Интеграция OpenTelemetry с Spring Boot позволяет собирать распределенные трассировки и другие данные телеметрии из вашего приложения, предоставляя ценную информацию о его производительности и поведении в распределенной среде.
Что такое OpenTelemetry?
OpenTelemetry определяет API и протоколы для сбора данных телеметрии, таких как метрики, трассировки и журналы, а также предоставляет множество библиотек, агентов и интеграций для популярных языков программирования и технологий.
OpenTelemetry — это открытое и независимое от поставщика решение, которое обеспечивает единый подход к наблюдению, упрощая организациям управление сложной облачной инфраструктурой. Он позволяет организациям собирать телеметрию из своих приложений и отправлять ее в различные распределенные инструменты трассировки.
Приложение Conduit
Spring Boot — это популярная платформа Java, упрощающая разработку приложений Java. Он обеспечивает подход, основанный на соглашениях, а не настройке, и поставляется со встроенной поддержкой внедрения зависимостей, управления конфигурацией и некоторыми другими функциями.
Пример приложения RealWorld — это полнофункциональное приложение под названием Conduit, состоящее из серверной части, обслуживающей JSON API, и пользовательского интерфейса внешнего интерфейса. Существует множество реализаций для разных языков и фреймворков, но в этом руководстве вы будете использовать серверную часть Spring и интерфейс React.
Серверная часть реального мира
Начнем с загрузки исходного кода бэкенда:
git clone https://github.com/gothinkster/spring-boot-realworld-example-app.git
Затем вам нужно собрать JAR из загруженного исходного кода:
cd spring-boot-realworld-example-app ./gradlew bootJar
Если вы получаете Could not find snakeyaml-1.27-android.jar (org.yaml:snakeyaml:1.27)
, примените следующую разницу к build.gradle
и повторите попытку:
diff --git a/build.gradle b/build.gradle index 12781f0..52a8f71 100644 --- a/build.gradle +++ b/build.gradle @@ -33,6 +33,7 @@ dependencies { implementation 'io.jsonwebtoken:jjwt:0.9.1' implementation 'joda-time:joda-time:2.10.6' implementation 'org.xerial:sqlite-jdbc:3.34.0' + implementation 'org.yaml:snakeyaml:1.28'
Теперь вы можете запустить приложение, используя скомпилированный JAR:
java -jar build/libs/spring-boot-realworld-example-app-0.0.1-SNAPSHOT.jar
Вы можете проверить, что бэкэнд работает, посетив http://localhost:8080/tags
:
curl http://localhost:8080/tags {"tags":[]}
Давайте пока остановим приложение, нажав CTRL+C.
Java-агент OpenTelemetry
Чтобы интегрировать OpenTelemetry с приложением Spring Boot, вы можете использовать Java-агент OpenTelemetry, который предоставляет инструменты для различных платформ Java, включая Spring Boot, для автоматического сбора данных телеметрии.
Агент OpenTelemetry Java — это автономный процесс, который обеспечивает автоматическое инструментирование и возможности трассировки для приложений Java без каких-либо изменений кода. Он подключается к приложению Java во время выполнения и перехватывает вызовы методов для сбора данных телеметрии, таких как трассировки и метрики.
Агент находится между инструментальным приложением и серверными системами или платформами наблюдения, что позволяет централизованно и оптимизировать обработку данных телеметрии.
Чтобы загрузить последнюю версию агента OpenTelemetry:
wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent.jar
Агент Otel принимает различные параметры конфигурации либо через системные свойства, либо через переменные среды.
Uptrace
Uptrace — это APM с открытым исходным кодом для OpenTelemetry, который поддерживает распределенную трассировку, метрики и журналы. Вы можете использовать его для мониторинга приложений и устранения неполадок.
Uptrace поставляется с интуитивно понятным конструктором запросов, богатыми информационными панелями, правилами оповещения с уведомлениями и интеграциями для большинства языков и платформ.
Uptrace может обрабатывать миллиарды диапазонов и метрик на одном сервере и позволяет вам отслеживать ваши приложения в 10 раз дешевле.
Uptrace DSN (имя источника данных) — это строка подключения, которая используется для подключения и отправки данных в серверную часть Uptrace. Получить DSN можно после установки Uptrace и создания проекта.
Используйте следующие переменные среды, чтобы настроить OpenTelemetry Java для отправки данных в Uptrace.
export OTEL_RESOURCE_ATTRIBUTES=service.name=myservice,service.version=1.0.0 export OTEL_TRACES_EXPORTER=otlp export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_COMPRESSION=gzip export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.uptrace.dev:4317 export OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=https://<token>@uptrace.dev/<project_id> export OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=DELTA export OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION=BASE2_EXPONENTIAL_BUCKET_HISTOGRAM
Давайте снова запустим серверное приложение, но на этот раз вы будете использовать агент Java для автоматического инструментирования JAR:
java -javaagent:opentelemetry-javaagent-all.jar -jar build/libs/spring-boot-realworld-example-app-0.0.1-SNAPSHOT.jar
Как обычно, вы можете открыть http://localhost:8080/tags
, чтобы проверить, работает ли API.
Интерфейс реального мира
У вас есть работающий бэкенд, но без фронтенда не очень интересно. Давайте продолжим и установим интерфейс React + Redux, который будет служить пользовательским интерфейсом:
git clone https://github.com/gothinkster/react-redux-realworld-example-app.git
Приложение поставляется с различными зависимостями JS:
cd react-redux-realworld-example-app npm install
Теперь вам нужно настроить внешнее приложение для использования нашего внутреннего интерфейса, работающего по адресу http://localhost:8080/
. Вы можете сделать это, отредактировав файл src/agent.js
:
const API_ROOT = 'http://localhost:8080'
После чего вы можете запустить приложение React и наслаждаться пользовательским интерфейсом в http://localhost:4100/register
:
npm start
Щелкнув по нескольким ссылкам, вы должны увидеть следы, подобные этой, поступающие в ваш проект Uptrace:
Заключение
С помощью агента Java OpenTelemetry вы можете настроить приложение Java, не изменяя ни одной строки кода. Хотите попробовать оснастить свое приложение? Зарегистрируйте бесплатную учетную запись Uptrace и следуйте этому руководству. Удачи.