Команда Spring АйО перевела статью, раскрывающую преимущества использования OpenTelemetry для мониторинга и трассировки Spring Boot приложений.
В статье показано, как интеграция с OpenTelemetry с использованием OTLP и других компонентов позволяет легко встроить стандартизированный сбор метрик, логов и трассировок в экосистему Spring.
Введение
В мире современных технологий observability, OpenTelemetry — это новый набор инструментов, который пришел на смену проектам OpenCensus и OpenTracing. В контексте Spring Framework, Spring Boot, Spring Data и Spring Cloud уже активно применяются зрелые решения, такие как Micrometer — стандарт для observability в Java. Проект OpenTelemetry включает множество компонентов, из которых особенно выделяется протокол OpenTelemetry Protocol (OTLP). Этот протокол позволяет разработчикам унифицировать формат телеметрии и интегрировать его с любыми бэкэндами, поддерживающими OTLP. Давайте посмотрим, как Spring Boot интегрируется с этими инструментами, обеспечивая высокий уровень observability.
Мощь Observation API в Micrometer
Observation API в Micrometer – ключевая часть стратегии observability Spring Boot. Это надежное и универсальное решение, которое легко интегрируется с различными системами мониторинга и трассировки. Почему оно является лучшим выбором для Spring Boot приложений?
Стабильность и надежность: Micrometer – проверенное временем решение, обеспечивающее стабильную платформу для работы с observability.
Широкая совместимость: Micrometer поддерживает множество протоколов (AppOptics, Azure Monitor, Netflix Atlas, AWS CloudWatch, Datadog, Dynatrace, Elastic, и другие), включая OTLP, что гарантирует совместимость с OpenTelemetry и другими инструментами observability.
Универсальная интеграция: Observation API используется как в проектах на Spring, так и вне его, предоставляя единый API для упрощения настройки метрик и публикации собранных данных.
Простота API: Один раз настроив обработку, можно получать множественные преимущества – трассировка, метрики, логи и другое.
Гибкость в выборе: Micrometer позволяет разработчикам свободно выбирать технологии observability, что обеспечивает устойчивость к изменениям в технологическом стекe.
Использование протокола OpenTelemetry
Протокол OpenTelemetry (OTLP) облегчает взаимодействие между различными инструментами наблюдаемости. Благодаря OTLP приложения Spring Boot могут экспортировать логи, метрики и трассировки в стандартизированном формате, что упрощает интеграцию с разными бэкендами и платформами. В конечном счёте, главное — это протокол!
Почему OTLP важен:
Стандартизация: OTLP предоставляет единый способ экспорта данных наблюдаемости, обеспечивая совместимость и снижая сложность интеграции.
Гибкость: Используя OTLP, разработчики могут выбирать лучшие инструменты под свои задачи, не привязываясь к конкретному поставщику или технологическому стеку.
Защита на будущее: По мере развития сферы наблюдаемости OTLP гарантирует, что ваши данные трассировки останутся доступными и пригодными для использования в различных системах.
Знакомство с Micrometer
Spring всегда стремится к абстракциям и свободе выбора для разработчиков. То же касается и Micrometer, созданного в 2016 году с идеей: "как SLF4J, но для метрик". Micrometer позволяет абстрагировать ваш код от конкретного бэкенда метрик. С 2022 года Micrometer поддерживает OTLP через специальный OtlpMeterRegistry.
Мы хотели внедрить аналогичную абстракцию для трассировки. Поэтому перенесли зрелый проект Spring Cloud Sleuth (основан в 2014 году) в Micrometer Tracing, сделав его независимым от Spring. С Micrometer Tracing вы можете выбрать любую библиотеку трассировки по своему усмотрению (трассер управляет жизненным циклом span (span – структура данных, хранящая информацию о единой операции, прим. пер.) и критичен для распределенной трассировки). Micrometer Tracing поддерживает две библиотеки: OpenZipkin Brave (Brave) и OpenTelemetry.
Мы верим в зрелые, проверенные решения, поэтому считаем Micrometer и Brave ключевыми инструментами в наборе средств observability в Spring Boot. Они предоставляют надежные возможности, помогая разработчикам отслеживать и анализировать запросы в распределённых системах.
Micrometer и Brave отлично работают с Micrometer Observation и оба поддерживают OTLP. Это гарантирует, что ваши метрики (уже около двух лет) и данные трассировки могут быть легко экспортированы и использованы (через недавно выпущенный проект zipkin-otel).
Постоянное совершенствование
Команда Spring досконально знает Spring Framework, ведь мы работаем с ним каждый день. Мы серьёзно подходим к observability, а наш опыт и понимание потребностей сообщества помогают нам создавать отличный UX для разработчиков. Мы верим, что возможности фреймворка и их сопровождение идут рука об руку: код, документация и поддержка.
Никто не идеален, и мы тоже. Мы осознаем, что всегда есть возможность улучшить опыт использования OpenTelemetry и Spring. Сейчас мы работаем над тем, чтобы OTLP стал полноправным элементом (first class citizen) в метриках, трассировках, логировании и семантических соглашениях. Это приведёт к лучшей автоконфигурации, улучшенной поддержке в библиотеках и упрощению работы для разработчиков.
Spring Boot и OpenTelemetry: Пример использования
Порой одна картинка стоит тысячи слов — давайте взглянем на результат выполнения кода, доступного здесь.
Настройка Maven для интеграции Spring Boot с OpenTelemetry (OTLP) через Micrometer Observation, Micrometer Core и Micrometer Tracing:
Зависимости
<!-- Prerequisite for observability -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- For Metrics -->
<!-- For OTLP -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-otlp</artifactId>
</dependency>
<!-- Brave version -->
<!-- For Tracing -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- For Latency Visualization -->
<!-- For OTLP -->
<dependency>
<groupId>io.zipkin.contrib.otel</groupId>
<artifactId>encoder-brave</artifactId>
<version>0.1.0</version>
</dependency>
<!-- For pushing logs out -->
<dependency>
<groupId>com.github.loki4j</groupId>
<artifactId>loki-logback-appender</artifactId>
<version>1.5.2</version>
<scope>runtime</scope>
</dependency>
Граф узлов клиентского консольного приложения, отправляющего HTTP-запросы на сервер
Корреляция логов с помощью Spring Boot, Micrometer Observation, Micrometer Tracing и OpenZipkin Brave
Просмотр трассировки: данные span’ов в формате OTLP, полученные через OTel Brave Encoder (также с использованием Micrometer Observation, Micrometer Tracing и OpenZipkin Brave)
Анализ задержек входящих запросов в Spring Boot с Micrometer Observation, Micrometer Core, Micrometer OTLP push MeterRegistry и включенным приемником OTLP в Prometheus
Выводы
Подход Spring Boot к observability:
Экспертиза библиотек: Разработчики, поддерживающие код, также отвечают за его инструментирование.
Интегрированные решения: С Micrometer и Brave все необходимые инструменты встроены в экосистему Spring Boot, обеспечивая согласованный и надежный фреймворк с точки зрения observability.
Важность протокола: Стандартизируя протокол через OTLP, упрощается интеграция с различными бэкендами и платформами observability.
Spring Boot активно внедряет принципы OpenTelemetry, используя OTLP, Micrometer для метрик, Brave для трассировки и Micrometer Observation в качестве общей абстракции, что демонстрирует приверженность надежной и устойчивой observability. Благодаря этим инструментам разработчики получают полную картину происходящего в приложении. Такой подход не только упрощает настройку observability, но и обеспечивает стабильную и зрелую платформу для продакшена. Spring Boot — настоящий поклонник OpenTelemetry, что видно по легкости интеграции с мощными инструментами observability.
Полезные ссылки
Код примера: https://github.com/marcingrzejszczak/observability-boot-blog-post
Документация по observability в Spring Boot: https://docs.spring.io/spring-boot/reference/actuator/observability.html
Сайт Micrometer: https://micrometer.io/
Документация Micrometer: https://docs.micrometer.io/micrometer/reference/
Документация Micrometer Tracing: https://docs.micrometer.io/tracing/reference/
Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.
Ждем всех, присоединяйтесь
semo
Вы забыли упомянуть о возможности использования агента (https://opentelemetry.io/docs/zero-code/java/agent/getting-started/)