Команда 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.

Полезные ссылки

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.

Ждем всех, присоединяйтесь

Комментарии (1)


  1. semo
    05.11.2024 05:35

    Вы забыли упомянуть о возможности использования агента (https://opentelemetry.io/docs/zero-code/java/agent/getting-started/)