OpenTelemetry Java: Руководство по началу работы

Это практическое руководство, в котором вы найдете все необходимое для начала работы с OpenTelemetry Java. Никаких предварительных знаний OpenTelemetry не требуется — здесь мы рассмотрим основы.

Для этого примера OpenTelemetry Java мы будем использовать проект Spring Pet Clinic, чтобы сэкономить ваше время на настройку проекта.

Что вас ожидает

  • Введение в OpenTelemetry
  • Hello World: OpenTelemetry Java
  • Визуализация с помощью трассировки Jaeger
  • Расширенная визуализация с помощью Aspecto
  • Продолжайте учиться: Освоение OpenTelemetry

Что такое OpenTelemetry?

OpenTelemetry — это набор SDK и API — проект с открытым исходным кодом, который позволяет нам собирать, генерировать и экспортировать журналы, метрики и трассировки (также известные как три столпа наблюдаемости).

OpenTelemetry позволяет нам инструментировать наши распределенные сервисы. Инструментирование означает сбор телеметрических данных от событий и операций в нашей распределенной системе.

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

Под руководством CNCF (Cloud Native Computing Foundation, фонд, ответственный за Kubernetes), это служит единой библиотекой, которая собирает данные в рамках единой спецификации.

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

С момента внедрения в большинство современных языков программирования он становится все более популярным и используется разработчиками повсеместно. Он сочетает в себе все три аспекта, необходимые для правильного мониторинга (сначала трассировка, затем метрики).

Об OpenTelemetry можно узнать гораздо больше, и если вы хотите глубже погрузиться в его структуру, следуйте этому руководству. В этом руководстве приведены основные термины, которые вам необходимо знать:

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

  • Трассировка: Представляет собой дерево диапазонов, связанных отношениями «ребенок/родитель». Трассировки описывают прохождение запросов через различные сервисы и компоненты нашей системы (БД, источники данных, очереди и т.д.). Например, отправка вызова API на user-service привела к запросу к БД на users-db.

  • Инструментарий — библиотеки инструментария позволяют нам собирать данные и создавать диапазоны на основе различных библиотек в нашей системе, таких как Kafka, MySQL, Spring и т.д. Существует 2 способа инструментирования нашего приложения — вручную или автоматически:

    • Автоматическое инструментирование: Автоматическое создание диапазонов на основе библиотек приложения, которые мы используем, с помощью готовых библиотек OpenTelemetry.
    • Ручное инструментирование: Ручное создание диапазонов путем добавления кода в ваше приложение для определения начала и конца каждого диапазона.
  • Экспортер: Как только мы создаем пролет, нам нужно отправить его на специальный бэкэнд. Это может быть память, консольный вывод, поставщик или открытый источник, такой как Jaeger Tracing. Экспортер обрабатывает отправку данных на наш бэкэнд.

Для получения дополнительной терминологии OpenTelemetry посетите официальную документацию.

Hello World: OpenTelemetry Java

Шаг 1: Загрузите последнюю версию Java-агента OpenTelemetry

Скачайте последнюю версию Java-агента ‘JAR’ из официального репозитория на GitHub и скопируйте файл opentelemetry-javaagent-all.jar в свой проект.

Примечание: Убедитесь, что вы клонировали проект Spring Pet Clinic, о котором мы упоминали ранее.

Шаг 2: Запись пролетов OpenTelemetry в консоль

1) Выполните в терминале следующие команды

  1. Устанавливаем имя нашего сервиса my-service
  2. Устанавливаем экспортер для записи пролетов в консоль OTEL_TRACES_EXPORTER=logging
OTEL_SERVICE_NAME=my-service OTEL_TRACES_EXPORTER=logging java -javaagent:./opentelemetry-javaagent.jar -jar target/*.jar
Входим в полноэкранный режим Выход из полноэкранного режима

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

С точки зрения внедрения Java-инструментария OpenTelemetry в наш проект для сбора трасс, мы практически закончили (продолжайте читать, это еще не все).

Теперь конечный результат должен выглядеть примерно так, как показано ниже.

//Console output

INFO io.opentelemetry.exporter.logging.LoggingSpanExporter - '/owners/{ownerId}' :
99af87eeaa19b83d014463b046884e56 632e2d2a5931bd17 SERVER [tracer: io.opentelemetry.tomcat-7.0:1.13.1-
alpha] AttributesMap{data={net.transport=ip_tcp, http.target=/owners/11, thread.id=120, http.flavor=1.1,
http.status_code=200, net.peer.ip=0:0:0:0:0:0:0:1, thread.name=http-nio-8080-exec-10,
http.host=localhost:8080, http.route=/owners/{ownerId}, http.user_agent=Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36,
http.method=GET, net.peer.port=50778, http.scheme=http}, capacity=128, totalAddedValues=13}
Вход в полноэкранный режим Выход из полноэкранного режима

Примечание: Это не самый красивый консольный вывод 😬 Мы думали сделать его красивее, однако, именно так он выглядит в консоли, поэтому мы решили придерживаться исходного текста, чтобы избежать путаницы.

Если вы посмотрите на JSON, то увидите, что, например, http.route=/owners/{ownerId} представляет собой вызов https для получения владельца по ID.

На данном этапе мы создали диапазоны и записали их в консоль. Но мы здесь не только для того, чтобы иметь красивые развороты в нашей консоли — все дело в визуализации.

Наша способность визуализировать данные трассировки — вот где проявляется истинная мощь этой технологии для поиска и устранения неисправностей.

Для визуализации мы будем использовать Jaeger Tracing с открытым исходным кодом и Aspecto.

Начало работы с OpenTelemetry Java и Jaeger Tracing

Jaeger Tracing — это набор проектов с открытым исходным кодом, управляющих всем «стеком» распределенной трассировки: клиент, коллектор и пользовательский интерфейс. Jaeger UI является наиболее часто используемым открытым исходным кодом для визуализации трассировок.

Вот как мы отправляем трассировки в Jaeger:

Экспорт в Jaeger

1) Запустите Jaeger локально с помощью следующей команды docker

docker run -d --name jaeger 
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 
  -p 5775:5775/udp 
  -p 6831:6831/udp 
  -p 6832:6832/udp 
  -p 5778:5778 
  -p 16686:16686 
  -p 14250:14250 
  -p 14268:14268 
  -p 14269:14269 
  -p 9411:9411 
  jaegertracing/all-in-one:1.32
Войдите в полноэкранный режим Выйти из полноэкранного режима

2) Ранее мы настроили экспортер на запись логов в консоль. Теперь нам нужно внести следующие изменения и запустить эту команду:

  1. Измените экспортер на Jaeger OTEL_TRACES_EXPORTER=jaeger.
  2. Укажите конечную точку Jaeger’а OTEL_EXPORTER_JAEGER_ENDPOINT.
OTEL_SERVICE_NAME=my-service OTEL_TRACES_EXPORTER=jaeger OTEL_EXPORTER_JAEGER_ENDPOINT=http://localhost:14250 java -javaagent:./opentelemetry-javaagent.jar -jar target/*.jar
Вход в полноэкранный режим Выйдите из полноэкранного режима

3) Запустите проект Pet Clinic и выполните несколько действий. Например, мы создали нового владельца, затем выполнили поиск владельца по фамилии.

4) Используйте браузер для просмотра пользовательского интерфейса Jaeger по адресу http://localhost:16686/.

5) Теперь мы можем просмотреть наш след в Jaeger UI. Выберите ‘my-service’ в панели поиска справа и нажмите на Find Traces.

Вы можете перейти к конкретной трассе. Например, запрос на поиск владельца по ID владельца.

Расширенная визуализация с помощью OpenTelemetry Java и Aspecto

Итак, теперь вы знаете основы инструментария, диапазонов, трассировок и как мы можем использовать OpenTelemetry для генерации трассировок для нашего Java-приложения.

Вы можете поднять визуализацию трассировки на новый уровень с помощью Aspecto.

Отправка трасс в Aspecto так же проста, как и то, что мы делали до сих пор. Прежде чем приступать к работе, вы можете попробовать сами, воспользовавшись бесплатным тарифным планом, который не имеет ограниченных возможностей.

Попробуйте этот Live Playground, чтобы получить лучшее представление.

Экспорт в Aspecto

Вот как это делается:

1) Создайте бесплатную учетную запись на сайте www.aspecto.io или войдите в существующую учетную запись.

2) Ранее мы настроили экспортер на отправку трасс в Jaeger. Теперь нам нужно внести следующие изменения и выполнить эти команды:

  1. Изменить экспортер на OTEL_EXPORTER_OTLP_HEADERS.
  2. Укажите конечную точку Aspecto OTEL_EXPORTER_OTLP_TRACES_ENDPOINT.
  3. Замените {ASPECTO_AUTH} на уникальный идентификатор токена Aspecto — https://app.aspecto.io/app/integration/token (Settings > Integrations > Tokens).
OTEL_SERVICE_NAME=my-service 
OTEL_EXPORTER_OTLP_HEADERS=Authorization={ASPECTO_AUTH}
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://otelcol.aspecto.io:4317 java -javaagent:./opentelemetry-javaagent.jar -jar target/*.jar 
Вход в полноэкранный режим Выйти из полноэкранного режима

3) Выполните несколько действий в вашем проекте. В вашем аккаунте Aspecto основное представление Trace Search должно выглядеть примерно так:

Используя левую панель фильтров, мы можем быстро найти любую ошибку, которая есть в нашей системе (эта ошибка была встроена в проект Pet Clinic по умолчанию):

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

Мы также можем отфильтровать трассы по имени HTTP-маршрута. Например, здесь мы отфильтровываем только http.route=/owners/{ownerId}, о котором мы упоминали ранее:

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

На этом руководство по OpenTelemetry Java закончено, друзья. Если у вас возникли вопросы или проблемы с любым из этих шагов, не стесняйтесь связаться с нами в чате или присоединиться к нашему каналу OpenTelemetry Slack (часть CNCF Slack).

Освоение OpenTelemetry

Для того чтобы вы могли продолжать свое путешествие по OpenTelemetry, мы создали серию из 6 эпизодов видео, в которой вы узнаете все, что вам нужно знать об OpenTelemetry. От нуля до освоения, он содержит все от самых основ до продвинутых концепций, таких как выборка, безопасность и масштабирование для производства.

OpenTelemetry Bootcamp — бесплатный и нейтральный к поставщикам.

Используйте его в качестве учебника по OpenTelemetry:

  1. Эпизод 1: Основы OpenTelemetry
  2. Эпизод 2: Интеграция вашего кода (журналы, метрики и трассировки)
  3. Эпизод 3: Развертывание в производство + коллектор
  4. Эпизод 4: Отбор проб и работа с большими объемами
  5. Эпизод 5: Пользовательские инструменты
  6. Эпизод 6: Тестирование с OpenTelemetry

Оцените статью
devanswers.ru
Добавить комментарий