Введение. Недавно я исследовал и выбирал компоненты мониторинга распределенной цепочки вызовов. Для практики и сравнения выбраны три основных компонента АРМ. Изначально я планировал закончить написание одной статьи, но она оказалась слишком длинной, поэтому я планировал разделить ее на две статьи. В этой статье в основном рассказывается об основных концепциях трассировки нисходящего канала и практике работы с несколькими компонентами APM.Практическая часть не дает особенно подробных шагов, потому что эта статья не посвящена конкретным шагам. Во второй части будет рассказано о сравнении и тестировании производительности нескольких вариантов APM.
1. Предыстория проблемы
В микросервисной архитектуре сервисы делятся по разным параметрам, и запрос часто должен включать несколько сервисов. Интернет-приложения строятся на разных наборах программных модулей.Эти программные модули могут разрабатываться разными командами, реализовываться с использованием разных языков программирования и могут быть распределены на тысячах серверов, охватывающих несколько разных наборов данных. Следовательно, необходимы инструменты, которые могут помочь понять поведение системы и проанализировать проблемы с производительностью, чтобы при возникновении сбоев можно было быстро обнаружить и устранить проблемы.
Компонент мониторинга распределенной цепочки вызовов создается в такой среде. Наиболее известно упоминается в публичной газете Google.Dapper
. Dapper был разработан для сбора дополнительной информации о поведении сложных распределенных систем и предоставления ее разработчикам Google. Такая распределенная система имеет особое преимущество, поскольку эти крупномасштабные серверы начального уровня, как носитель Интернет-услуг, представляют собой особую экономичную платформу. Понимание поведения распределенных систем в этом контексте требует мониторинга связанных действий в разных приложениях и между разными серверами.
Большинство представленных на рынке теоретических моделей APM (Application Performance Management) заимствованы.Google Dapper
В этом документе основное внимание уделяется следующим компонентам APM:
- Zipkin
Открытый исходный код Twitter, распределенная система отслеживания с открытым исходным кодом, используемая для сбора данных о времени для сервисов для решения проблем с задержкой в микросервисных архитектурах, включая сбор, хранение, поиск и представление данных. - Pinpoint
Pinpoint — это инструмент APM для крупномасштабных распределенных систем, написанный на Java, компонент распределенного отслеживания с открытым исходным кодом, созданный корейцами. - Skywalking
Отличным отечественным компонентом APM является система отслеживания, оповещения и анализа бизнес-операций распределенного кластера приложений JAVA.
Другие аналогичные компоненты включают CAT от Meituan Dianping и EgleEye от Taobao.
Как упоминалось выше, каковы требования к нашему выбору компонентов мониторинга каналов? Он также упоминается в Dapper, и автор резюмирует его следующим образом:
-
Стоимость работы зонда.
Влияние сервисов компонентов APM должно быть достаточно небольшим. В некоторых высокооптимизированных сервисах даже малейшая потеря может быть легко замечена и может заставить группу развертывания онлайн-сервиса отключить систему отслеживания. -
навязчивый код
Для программиста приложения нет необходимости знать, что есть система слежения. Если система слежения хочет вступить в силу, она должна полагаться на активное сотрудничество разработчиков приложения, тогда система слежения слишком хрупка, а приложение часто вызвано ошибками или небрежностью в коде, внедренном в приложение разработчиком. система слежения Удовлетворяет потребность в «повсеместном развертывании» систем слежения. -
Масштабируемость
Чем больше компонентов, которые могут быть поддержаны, конечно, лучше, лучше. Или предоставьте удобную плагирую API разработки, которые также могут расширяться для некоторых компонентов, которые не контролируются. -
анализ данных
Анализ данных должен быть быстрым, а размерности анализа должны быть как можно больше. Система слежения может обеспечить достаточно быструю информационную обратную связь, чтобы быстро реагировать на ненормальные условия в производственной среде. Всесторонний анализ позволяет избежать вторичного развития.
2. Основные понятия
Несколько перечисленных выше компонентов, из которых Zipkin строго соответствуетGoogle Dapper
Реализация документа, следующее вводит основные концепции.
-
Span
Базовая единица работы, вызов ссылки (которая может быть RPC, DB и т.д. без особых ограничений) создает спэн, идентифицирует его 64-битным ID, uuid удобнее, а в спэне есть другие данные, такие как информация описания, временная метка, информация тега пары ключ-значение (аннотация), родительский идентификатор и т. д., где родительский идентификатор может представлять источник ссылки вызова span. -
Трассировка: коллекция Span, похожая на древовидную структуру, представляющая ссылку вызова с уникальным идентификатором. Например, трассировка запущенного вами распределенного хранилища больших данных состоит из одного вашего запроса.
-
Аннотация: аннотация, используемая для записи информации, относящейся к конкретному событию (например, времени) запроса, обычно содержит четыре аннотации:
(1) cs: Client Start, указывающий, что клиент инициирует запрос(2) sr: Получение сервером, указывающее, что сервер получил запрос
(3) ss: отправка сервера, указывающая, что сервер завершает обработку и отправляет результат клиенту.
(4) cr: Клиент получен, что указывает на то, что клиент получает информацию, возвращенную сервером.
2.1 Trace
Давайте посмотрим, какой след выглядит как в системе.
Каждая цветная заметка помечается диапазоном, ссылка однозначно идентифицируется с помощью TraceId, а диапазон идентифицирует инициированную информацию запроса. Узел дерева является базовой единицей всей архитектуры, и каждый узел является ссылкой на диапазон. Линии между узлами представляют прямую связь между пролетом и его родительским пролетом. Хотя промежутки просто представляют время начала и окончания промежутков в файле журнала, они относительно независимы во всей древовидной структуре.
2.2 Span
На изображении выше показано, как выглядит диапазон во время большой трассировки. Dapper записывает имена отрезков, а также идентификатор и родительский идентификатор каждого отрезка, чтобы реконструировать взаимосвязь между различными отрезками во время трассировки. Если диапазон не имеет родительского идентификатора, он называется корневым диапазоном. Все промежутки привязаны к определенной дорожке, а также имеют общий идентификатор дорожки.
2.3 Annotation
Автоматический зонд не требует изменения исходного кода приложения, отслеживает распределенный путь управления для разработчика приложения практически с нулевой стоимостью погружения и почти полностью полагается на преобразование на основе небольшого количества общих библиотек компонентов. Dapper также позволяет разработчикам приложений добавлять дополнительную информацию к трассировкам Dapper для мониторинга поведения системы более высокого уровня или для устранения проблем.
Следующие главы познакомят вас с использованием и практикой трех вышеупомянутых компонентов APM.
3. zipkin
zipkin в основном включает в себя несколько компонентов:collector
Соберите данные агента,storage
место хранения,web UI
графический интерфейс,search
Запросите данные, хранящиеся в хранилище, и предоставьте простой JSON API для получения данных.
Наш проект создает микросервисы на основе микросервисного фреймворка Spring Cloud. Spring Cloud также предоставляет spring-cloud-sleuth для облегчения интеграции реализаций zipkin. Поэтому я попробовал spring-cloud-sleuth-zipkin в проекте.
Запущено три сервиса:
zipkin-сервер, zipkin-клиент-бэкэнд, zipkin-клиент.
Служба сервера отвечает за сбор и отображение информации. Серверная часть клиента вызывает клиента для создания информации о ссылке вызова.
3.1 реализация zipkin-сервера
Есть два основных момента, на которые следует обратить внимание при реализации zipkin-сервера: один — это хранение собранных данных, включая память, базу данных, ES и т. д., другой — способ связи, включая HTTP-связь и асинхронную связь mq. Доступ влияет, поэтому рекомендуется общаться на основе асинхронного режима mq.
В этой статье в качестве хранилища используется mysql и используется связь MQ, основанная на Spring-cloud-Stream. В этой статье основное внимание уделяется не конкретным методам реализации zipkin-server, другие методы читатели могут посмотреть на официальном сайте.
(1) Ссылки, которые необходимо добавить в pom, следующие:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--zipkin依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
<scope>runtime</scope>
</dependency>
<!--保存到数据库需要如下依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
(2) Начальный класс:
// 使用Stream方式启动ZipkinServer
@EnableZipkinStreamServer
@SpringBootApplication
public class ZipkinStreamServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZipkinStreamServerApplication.class,args);
}
}
@EnableZipkinStreamServer
Аннотация представляет@EnableZipkinServer
Аннотация, а также создает слушатель очередей по очереди кролика-MQ MQUETSINK.
(3) профили
server:
port: 9411
spring:
datasource:
username: root
password: root123
schema[0]: classpath:/zipkin.sql
zipkin:
storage:
type: mysql
---
spring:
application:
name: microservice-zipkin-stream-server
rabbitmq:
host: ${RABBIT_ADDR:localhost}
port: ${RABBIT_PORT:5672}
username: guest
password: guest
sleuth:
enabled: false
profiles: default
datasource:
url: jdbc:mysql://localhost:3307/zipkin?autoReconnect=true&useSSL=false
zipkin.sql можно получить с официального сайта, а номер порта zipkin-сервера установлен на 9411.
3.2 zipkin-client
Конфигурации двух zipkin-клиентов одинаковые, поэтому они собраны вместе.
(1) пом-зависимость
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
(2) Файл конфигурации
spring:
rabbitmq:
host: 127.0.0.1
port : 5672
username: guest
password: guest
3.3 Результаты
Вызов между услугами заключается в следующем:
Видно, что запрос клиента проходит через шлюз, вызывая различные услуги в интрасети, и некоторые из них также включают в себя вызов службы уведомления. С фигуры мы можем четко видеть услуги, которые проходят клиентские запросы.
Давайте посмотрим на путь http в экземпляре службы demo2-default:
На приведенном выше рисунке несколько HTTP-путей службы demo2-default отсортированы по длительности, показывая продолжительность вызова трассировки и количество интервалов. Нажмите, чтобы увидеть:
На рисунке показано время, затрачиваемое на каждый пролет, начиная с родительского отрезка. В этой трассировке участвуют две службы demo1 и demo2. demo2 вызывает demo1 и вызывает demo1 с 597 мс, и для выполнения окончательного запроса требуется 1265 мс.
4. pinpoint
Нулевое вмешательство в код, использование технологии улучшения байт-кода JavaAgent, нужно только добавить параметры запуска.
Некоторые компоненты pinpoint похожи на zipkin, схема архитектуры выглядит следующим образом:
Pinpoint-Collector собирает различные данные о производительности, Pinpoint-Agent связывает зонды с запущенными приложениями, Pinpoint-Web отображает собранные данные в виде веб-страниц, а HBase Storage хранит данные, собранные в HBase.
4.1 Приводная установка
В основном это включает в себя установку следующего программного обеспечения:
-
jdk 1.8
Нужна среда Java, объяснений нет. -
Hbase
Тестовые данные, собранные pinpoint, в основном хранятся в базе данных Hbase. Таким образом, он может собирать много данных и проводить более подробный анализ. После установки Hbase необходимо инициализировать библиотеку pinpoint Hbase, которую предоставляет pinpoint. Hbase имеет встроенный зоопарк. -
pinpoint-collector
Сборщик собирает данные агента, сохраняет данные в кластере hbase и предоставляет прослушивающие порты TCP и UDP сборщика 9994, 9995 и 9996. -
pinpoint-web
Страница отображается, а переменные среды HBASE_HOST, HBASE_PORT и т. д. устанавливаются в файле конфигурации. -
pinpoint-agent
прибытьОфициальный сайтСтраница выпуска для загрузки pinpoint-agent-x-SNAPSHOT.tar.gz, сборщика информации о конфигурации pinpoint.config.
Установка действительно хлопотная, статья слишком длинная, конкретные шаги будут написаны отдельно позже.
4.2 Запуск pinpoint-агента
Автор использует проект spring-boot, поэтому мне нужно только добавить параметр -javaagent в команду для запуска пакета jar и указать абсолютный путь пакета pinpoint-bootstrap. Пример кода выглядит следующим образом:
java -javaagent:/aoho/auth_compose/pinpoint-bootstrap-1.6.0.jar -Dpinpoint.agentId=aoho-consumer -Dpinpoint.applicationName=aoho-consumer -jar id_generator/snowflake-id-generate-1.0-SNAPSHOT.jar
Служба генератора идентификаторов относительно проста и не использует носители данных, такие как базы данных. Сервис регистрируется на консуле, и локальный клиент запрашивает id-сервер для получения id. Его цепочка вызовов выглядит следующим образом:
Функции, предоставляемые pinpoint, относительно богаты.На следующем рисунке показаны подробности вызова интерфейса /api/id.
Видно, что pinpoint записывает соответствующее время, IP-адрес клиента и т. д. Дерево вызовов также подробно перечислено ниже, а также указано время, затрачиваемое на каждый метод.
ServerMap также отображает кучу сервера, постоянное поколение, CPU и другую информацию, которая очень мощна.
5. Skywalking
Skywalking — отечественный компонент мониторинга APM с открытым исходным кодом, официальный сайтOpenSkywalking, согласно официальному сайту, основное внимание уделяется производительности и производительности в реальном времени.
Схема архитектуры Skywalking найдена в Интернете.
Видно, что Skywalking также состоит из четырех частей: коллектора, агента, сети и хранилища. Поддерживается развертывание кластера, а также вводится связь grpc между кластерами. Хранилище поддерживает встроенное хранилище h2 и elasticsearch.
5.1 Установка
Видна конкретная установкаОфициальный сайт.
- установка коллектора
Здесь я использую автономную версию сборщика, скачиваю сжатый пакет на странице релиза, а после распаковки автономная версия сборщика по умолчанию использует базу данных h2, поэтому файл конфигурации можно запускать без модификации.bin/startup.sh
.
Структура каталогов такая же, как и выше.В папке журналов есть журналы запуска, и вы можете просмотреть статус запуска.
-
web
Разархивируйте skywalking-ui, установите сервер config/collector_config.properties, log4j2 и порт прослушивания и другую связанную информацию, -
agent
Скопируйте каталог skywalking-agent в нужное место, зонд содержит весь каталог и задайте информацию о сборщике в /config/agent.config.
5.2 Запуск агента
Загрузочный проект Spring запускается так же, как и указанный выше агент pinpoint. Увеличьте параметры запуска JVM,-javaagent:/path/to/skywalking-agent/skywalking-agent.jar
.
На этот раз запускается пользовательский сервис, включающий такие компоненты, как mysql, redis и consul. Вы можете видеть, что диаграмма цепочки вызовов выглядит следующим образом:
при посещении/api/external/register-code
и/api/external/validate-code
При использовании интерфейса формируется цепочка вызовов на рисунке выше.
Запрос с TraceId 2.59.15103021777910001 на рисунке выше/api/external/register-code
. В этой трассировке на графике подсчитывается время, затраченное на каждый задействованный отрезок.
На приведенном выше рисунке показана статистика интерфейса Entry Service List в userService, включая количество вызовов, процент успешных вызовов и другую информацию. (из-за встроенного h2 здесь уже давно отзывается UI)
Также есть статистика по инстансу, информация, связанная со статистикой jvm, ответ API тоже очень медленный, это может быть связано с используемым хранилищем, поэтому скриншоты делать не буду.
6. Резюме
В этой статье в основном описывается практика компонентов мониторинга ссылок. Во-первых, вводятся основы создания и применения компонентов мониторинга канала и требования к выбору; во-вторых, вводятся основные концепции, связанные с открытой трассировкой; наконец, подробно вводятся установка и использование трех компонентов APM, а также Показан пользовательский интерфейс каждого APM. Эта статья относительно проста, а следующая статья в основном посвящена сравнению и тестированию производительности нескольких вариантов APM.
Исходный код zipkin-server-stream
github: GitHub.com/Доступный ETS2012/S…
oschina: git ee.com/can ets/judgment day you…
Подписывайтесь на свежие статьи, приглашаю обратить внимание на мой публичный номер
Ссылка (безумно ищу информацию)
- Официальные стандарты OpenTraacing — китайский язык
- Skywalking
- Zipkin
- PinPoint
- Spring Cloud Sleuth
- Dapper
- точную установку и развертывание
- Резюме APM с открытым исходным кодом Java
- Начало работы с zipkin, распределенной системой мониторинга системы
- Подпишитесь на Xiaocheng, чтобы изучить микросервисы — расширьте цепочку распределенных вызовов самостоятельно