SkyWalking решает отслеживание распределенных ссылок, действительно ароматный!

Java Spring Cloud

Всем привет, я не Кай Чен~

В этой статье рассказывается о Skywalking, еще одном решении для отслеживания ссылок. Каталог статей выглядит следующим образом:

Что такое Скайуокинг?

В предыдущей статье был представлен способ отслеживания распределенных ссылок:Spring Cloud Sleuth+ZipKin, это решение в настоящее время используется многими компаниями, но как программисту, стремящемуся к новым технологиям, Skywalking также стоит изучить как восходящей звезде.

прогулка по небу - отличноеВнутренний фреймворк с открытым исходным кодом,2015Открытый исходный код, созданный отдельным человеком Ву Шэном (разработчиком Huawei),2017Присоединился к инкубатору Apache. Всего за два года он оказался под командованием Apache, и его сила очевидна.

Skywalking поддерживает интеграцию dubbo, SpringCloud, SpringBoot,Код является неинвазивным, метод связи использует GRPC, производительность лучше, метод реализации - java probe, поддерживает сигнализацию, поддерживает мониторинг JVM и поддерживает глобальную статистику вызовов.Подождите, функция более совершенна.

Как выбрать Skywalking и Spring Cloud Sleuth+ZipKin?

По сравнению с zipkin, Skywalking по-прежнему имеет большие преимущества, а именно:

  • Skywalking использует технологию улучшения байт-кода для получения ненавязчивого кода, а код zipKin относительно навязчив.
  • Skywalking имеет богатые функции, отчеты по статистике и более удобный пользовательский интерфейс.

личное предложение: Если это новая архитектура, рекомендуется сначала выбрать прогулку по небу.

Какова архитектура Skywalking?

Как и zipkin, skywalking также делится на сервер и клиент.Сервер отвечает за сбор данных журнала и их отображение.Архитектура следующая:

Приведенная выше схема архитектуры в основном разделена на четыре части следующим образом:

  • Агент выше: отвечает за сбор данных журнала и их передачу на промежуточный сервер OAP.
  • Промежуточный ОАП: отвечает за получение информации о данных трассировки и метрики, отправленной агентом, затем анализирует (ядро анализа), сохраняет ее во внешнем хранилище (хранилище) и, наконец, предоставляет функцию запроса (запроса).
  • Интерфейс слева: Отвечает за предоставление веб-консоли, просмотр ссылок, просмотр различных показателей, производительности и т. д.
  • Хранилище справа: Отвечает за хранение данных, поддерживает несколько типов хранения.

После прочтения схемы архитектуры идея предельно ясна.Агент отвечает за сбор данных о передаче журнала, передачу их в OAP через GRPC для анализа и сохранения в базе данных, и, наконец, отображение проанализированных статистических отчетов, сервисных зависимостей и топологических диаграмм. через интерфейс пользовательского интерфейса.

Как собрать сервер?

Skywalking также запускается через jar-пакет, вам нужно скачать jar-пакет, адрес:skywalking.apache.org/downloads/

1. Загрузите установочный пакет

выберитеV8.7.0Эта версия, как показано ниже:

Вышеупомянутое - это выбор Чена, вы можете выбрать другие версии в соответствии с вашими потребностями.

Полный каталог после распаковки выглядит следующим образом:

Важный анализ структуры каталогов выглядит следующим образом:

  • agent: Клиенту нужно указать директорию, в которой есть jar, который отвечает за интеграцию с клиентом для сбора логов
  • bin: Скрипт, запущенный сервером
  • config: каталог для некоторых файлов конфигурации
  • logs: каталог журнала службы oap.
  • oap-libs: каталог зависимостей, требуемый oap
  • webapp: Каталог сервисов пользовательского интерфейса

2. Модификация конфигурации

Перед запуском вам необходимо внести некоторые изменения в файл конфигурации, а именно:

1. /config/application.yml

Это файл конфигурации службы oap, вам нужно изменить реестр на nacos, как показано ниже:

Конфигурация①: Измените реестр по умолчанию, чтобы выбрать nacos, чтобы его не нужно было указывать в параметрах запуска.

Конфигурация ②: Измените соответствующую конфигурацию nacos.Поскольку Chen является локальным, нет необходимости изменять его и изменять в соответствии с вашей собственной ситуацией.

2. веб-приложение/webapp.yml

Это файл конфигурации службы пользовательского интерфейса, который имеетserver.portКонфигурация — это порт службы пользовательского интерфейса, по умолчанию8080, Чен изменил его на8888, чтобы избежать конфликтов портов, как показано ниже:

3. Запустите службу

Команда запуска находится в каталоге /bin, и здесь необходимо запустить две службы, как показано ниже:

  • oap-сервис: Соответствующий сценарий запуска oapService.bat, соответствующий суффикс под Linux — sh
  • Сервис пользовательского интерфейса: соответствующий скрипт запуска webappService.bat, соответствующий суффикс под Linux — sh

Конечно есть ещеstartup.batФайл запуска может напрямую запускать две вышеупомянутые службы.Мы можем использовать этот сценарий напрямую, дважды щелкнуть, и появятся два окна, указывающие на успешный запуск, как показано ниже:

Прямой доступ в этот момент:http://localhost:8888/, перейдите непосредственно к пользовательскому интерфейсу, как показано ниже:

Как построить клиент?

Клиент также является отдельным микросервисом.Поскольку Skywalking использует технологию улучшения байт-кода, для микросервисов нет вторжения кода, пока это обычный микросервис, нет необходимости вводить зависимости.

Три сервиса предыдущего Spring Cloud Sleuth следующие:

  • skywalking-product1001: Товарные микросервисы
  • skywalking-order1002: Заказать микросервис
  • skywalking-gateway1003: Микросервис шлюза

Исходный код кейса загружен, обратите внимание на публичный номер: Code Ape Technology Column, отвечайте на ключевые слова9528Получать!

Каталог структуры исходного кода case выглядит следующим образом:

Если вы хотите передавать данные, вы должны использовать агента, предоставляемого Skywalking, вам нужно только указать его в параметрах запуска, команда выглядит следующим образом:

-javaagent:E:\springcloud\apache-skywalking-apm-es7-8.7.0\apache-skywalking-apm-bin-es7\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=skywalking-product-service
-Dskywalking.collector.backend_service=127.0.0.1:11800

Приведенная выше команда анализируется следующим образом:

  • -javaagent: указать агента в Skywalkingskywalking-agent.jarмаршрут
  • -Dskywalking.agent.service_name: Указывает имя службы в Skywalking, обычно это микросервисы.spring.application.name
  • -Dskywalking.collector.backend_service: укажите адрес, привязанный к oap-сервису.Поскольку Чен здесь локальный, а порт oap-сервиса по умолчанию — 11800, его нужно настроить только как127.0.0.1:11800

Вышеупомянутые параметры могут быть переданы в командной строкеjava -jar xxxУкажите, работайте в IDEA, как показано ниже:

Для всех трех вышеперечисленных микросервисов необходимо настроить начальную конфигурацию Skywalking.После успешной настройки его можно запустить в обычном режиме.

Примечание. Путь к JAR-пакету агента не может содержать китайский язык или пробелы, иначе операция завершится ошибкой.

После успешного запуска доступ напрямую через шлюз:http://localhost:1003/order/get/12 возвращает следующую информацию:

В настоящее время, взглянув на UI-сторону Skywalking, вы можете увидеть, что три службы были успешно отслежены, как показано ниже:

Зависимости перед сервисом также хорошо видны, как показано ниже:

Информация о ссылке запроса также может быть четко видна, например запрошенный URL-адрес, время выполнения и вызываемая служба, как показано на следующем рисунке:

Каково это? Это очень высококлассный и более многофункциональный, чем zipkin.

Как сохраняются данные?

Вы обнаружите, что до тех пор, пока сервер перезагружается, эти данные отслеживания ссылок будут потеряны, потому что метод сохраняемости по умолчанию для перемещения по небу хранится в памяти.

Конечно, промежуточное программное обеспечение хранилища также можно заменить подключением и отключением, которое часто используется на предприятиях.ESХранилище, Чен представит его в этой главе.MySQLМетод сохранен в методе ES, и отдельная статья будет представлена ​​позже в методе ES.

1. Измените файл конфигурации

Чтобы изменить способ хранения в файле config/application.yml, вам нужно всего изменить два места.

  • Измените метод хранения по умолчанию на mysql, как показано ниже:

  • Измените информацию, связанную с Mysql, такую ​​как имя пользователя, пароль и т. д., как показано ниже:

2. Добавьте зависимость jdbc MySQL

В oap по умолчанию нет зависимости от драйвера jdbc, поэтому нам нужно добавить его вручную, просто поместите jar-файл драйвера вoap-libsпапку, как показано ниже:

Итак, настройка завершена, запускаем сервер, и в базе данных skywalking автоматически создастся таблица, как показано ниже:

Чен больше не будет тестировать здесь, просто поиграйте с этим...

Исходный код кейса загружен, обратите внимание на публичный номер: Code Ape Technology Column, отвечайте на ключевые слова9528Получать!

Как сделать мониторинг журнала?

На стороне пользовательского интерфейса skywalking есть модуль журнала, который используется для сбора логов клиента.По умолчанию данных нет.Так как же вам нужно передавать данные журнала в skywalking?

Существует множество типов фреймворков журналов, наиболее известные из которых — log4j, logback и log4j2.logbackВ качестве примера для ознакомления с настройкой официальная документация выглядит следующим образом:

1. Добавьте зависимости

Согласно официальной документации, вам нужно сначала добавить зависимости, как показано ниже:

<dependency>
   <groupId>org.apache.skywalking</groupId>
   <artifactId>apm-toolkit-logback-1.x</artifactId>
   <version>${project.release.version}</version>
</dependency>

2. Добавьте файл конфигурации

создать новыйlogback-spring.xmlПоместите его в каталог ресурсов и настройте, как показано ниже:

Все приведенные выше конфигурации скопированы из официальных документов, если вы не понимаете конфигурацию лога, то можете прочитать предыдущую статью Чена:Третья пуля Spring Boot, эта статья покажет вам, как настроить журнал?

После завершения настройки запустите службу и получите доступ:http://локальный:1003/заказ/получить/12.

Журнал, напечатанный на консоли, выглядит следующим образом:

Вы можете видеть, что traceId был распечатан.

Вывод журнала модулем журнала в Skywalking выглядит следующим образом:

Журнал был переведен в прыжки с парашютом..........................

Уведомление:еслиagentа такжеoapСлужба не находится на том же сервере и должна быть/agent/config/agent.configДобавьте следующую конфигурацию в конец файла конфигурации:

plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:10.10.10.1}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}

Анализ конфигурации выглядит следующим образом:

Как сделать профилирование?

Skywalking действительно мощный инструмент для анализа производительности: он предоставляет результаты анализа на основе стека, позволяя эксплуатационному персоналу и обслуживающему персоналу с первого взгляда обнаруживать проблемы.

создать новый/order/listинтерфейс следующим образом:

Вышеприведенный код спит в течение 2 секунд, чтобы увидеть, как найти эту проблему при ходьбе по небу.

В модуле анализа производительности -> новая задача -> выбрать сервис, заполнить конечную точку и следить за временем, операция выглядит следующим образом:

На приведенном выше рисунке максимальное количество образцов выбрано равным 5, а затем прямой доступ 5 раз:http://localhost:1003/order/list, затем выберите эту задачу, и отслеживаемые данные появятся, как показано ниже:

Как видно на картинке выше {GET}/order/listЭтот интерфейс занял более 2 секунд, поэтому выберите этот интерфейс и нажмите «Анализ», вы увидите подробную информацию о стеке, как показано ниже:

Как найти строку кода, которая спит 2 секунды? Прокрутите вниз, как показано ниже:

Ясно ли, что поток интерфейса OrderController спит в течение двух секунд........

Исходный код кейса загружен, обратите внимание на публичный номер: Code Ape Technology Column, отвечайте на ключевые слова9528Получать!

Как отслеживать тревоги?

Для ненормальной информации службы, такой как интерфейс имеет большую задержку, переход по небу также выполняет функцию тревоги, как показано на следующем рисунке:

Есть несколько правил тревоги по умолчанию при прыжках в небо, а именно:

  • Среднее время ответа сервиса за последние 3 минуты более 1 секунды
  • Успешность обслуживания за последние 2 минуты составляет менее 80%
  • 90% время ответа службы за последние 3 минуты превышает 1 секунду
  • Среднее время ответа экземпляра службы за последние 2 минуты составляет более 1 секунды.

Конечно, в дополнение к четырем вышеперечисленным правилам будут добавлены и другие по мере продолжения итерации Skywalking.Конфигурация этих правил находится вconfig/alarm-settings.ymlВ файле конфигурации, как показано ниже:

Каждое правило состоит из одних и тех же атрибутов, и значение этих атрибутов следующее:

Если вы хотите настроить правила по умолчанию, такие как мониторинг возвращаемой информации, параметры мониторинга и т. д., вам нужно всего лишь изменить параметры в указанном выше файле конфигурации.

Конечно, в дополнение к приведенным выше правилам по умолчанию, хождение по небу также адаптирует некоторые крючки (webhooks). По сути, это эквивалентно обратному вызову: как только сработает указанный выше сигнал тревоги, Skywalking вызовет настроенный веб-хук, чтобы разработчики могли настроить некоторые методы обработки, такие как отправкаПочта,WeChat,Дин ДинСообщите эксплуатационному и обслуживающему персоналу, чтобы он справился с этим.

Конечно, этот хук также имеет некоторые правила, а именно:

  • POST-запрос
  • application/jsonПолучить данные
  • Полученный параметр должен быть параметром, указанным в AlarmMessage.

Уведомление: Класс AlarmMessage может отображаться по-разному в итерации версии с ходьбой по небу.Обязательно найдите этот класс в исходном коде соответствующей версии и скопируйте его свойства. Путь этого класса в исходном коде:org.apache.skywalking.oap.server.core.alarm,Как показано ниже:

Создайте новый модуль сигнализации:skywalking-alarm1004, который использует веб-перехватчик для определения интерфейса следующим образом:

После того, как настройка интерфейса завершена, вам нужно толькоconfig/alarm-settings.ymlДобавьте этот хук в файл конфигурации, как показано ниже:

Что ж, это было настроено, и тест также очень прост, или вызвать интерфейс, который спит две секунды в приведенном выше случае:http://localhost:1003/order/list, если вызвать его несколько раз, сработает тревога.Консоль выводит лог следующим образом:

Суммировать

В этой статье рассказывается о решении для отслеживания ссылок Skywalking и в основном объясняются знания о построении серверов, построении клиентов, сохранении данных, мониторинге журналов и анализе производительности.Каждое знание очень важно.