Телеметрия#

CedrusData позволяет трассировать выполнение запросов. Когда трассирование включено, для каждого запроса засекаются интервалы времени (spans) соответствующие различным стадиям выполнения или различным активностям, связанным с запросами.

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

Трассирование запросов использует OpenTelemetry. Для конфигурации доступно 3 экспортера OpenTelemetry:

  • logging - для логирования интервалов в лог CedrusData.

  • otlp - передача интервалов по стандартному протоколу otlp в совместимый сервис (например, в Grafana Tempo).

  • jaeger - передача интервалов в Jaeger.

Необходимые библиотеки для поддерживаемых экспортеров включены в дистрибутив CedrusData. Для использования других типов экспортеров необходимо вручную добавить соответствующие библиотеки в директорию lib.

Конфигурация#

Для настройки трассирования используется автоконфигурация OpenTelemetry SDK.

Настройка трассирования производится в файле конфигурации jvm.config. Параметры задаются как Java Properties каждый на отдельной строке. Это означает, что для параметра необходимо использовать префикс -D, затем имя параметра, затем знак =, затем значение параметра. Например, для параметра otel.service.name строка будет выглядеть как: -Dotel.service.name=cedrus

OpenTelemetry SDK поддерживает 3 вида телеметрии: логи (logs), метрики (metrics) и трассирование (traces). В CedrusData используется только передача трассирования. Остальные виды телеметрии передаются другими способами. Поэтому из настроек, описанных в документации автоконфигурации OpenTelemetry SDK, доступны только те, которые относятся к трассировке. Настройки для логов и метрик не поддерживаются и при их использовании CedrusData выдаст ошибку.

Ниже приведено описание наиболее широко используемых параметров.

otel.sdk.disabled#

  • Тип: boolean

  • Допустимые значения: true, false

  • Значение по умолчанию: false

Позволяет полностью отключить OpenTelemetry SDK. При отключении, интервалы перестанут собираться и передаваться в экспортеры.

otel.service.name#

Имя сервиса, как оно будет передаваться в экспортеры. Например, «CedrusData».

otel.traces.exporter#

  • Тип: string

  • Допустимые значения: logging, otlp, jaeger, none

  • Значение по умолчанию: none

Тип экспортера OpenTelemetry для интервалов. - none - экспорт интервалов не производится. - logging - производится запись интервалов в логи CedrusData. - jaeger - производится запись интервалов в Jaeger(Необходимо дополнительно указать адрес сервиса, принимающего otlp с помощью otel.exporter.jaeger.endpoint). - otlp - производится экспорт интервалов по протоколу otlp (Необходимо дополнительно указать адрес сервиса, принимающего otlp с помощью otel.exporter.otlp.endpoint).

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

otel.exporter.otlp.endpoint#

  • Тип: string

  • Значение по умолчанию: http://localhost:4317

Адрес сервиса, принимающего интервалы по протоколу otlp. Имеет смысл только когда otel.traces.exporter установлен в «otlp».

otel.exporter.jaeger.endpoint#

  • Тип: string

  • Значение по умолчанию: http://localhost:14250

Адрес сервиса, принимающего интервалы по протоколу Jaeger. Имеет смысл только когда otel.traces.exporter установлен в «jaeger».

Примеры#

Экспорт в лог#

Добавьте следующие строки в jvm.config для экспорта интервалов в лог узлов CedrusData:

-Dotel.service.name=CedrusData
-Dotel.traces.exporter=logging

Экспорт в OTLP и Jaeger#

Для демонстрации работы с OTLP или Jaeger запустим Jaeger в контейнере:

docker run -d --name jaeger \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 4317:4317 \
  -p 14250:14250 \
  -p 16686:16686 \
  jaegertracing/all-in-one:1.41

После запуска контейнера, Jaeger UI будет доступен по адресу http://localhost:16686.

Добавьте следующие строки в jvm.config для экспорта интервалов в Jaeger через протокол OTLP:

-Dotel.service.name=CedrusData
-Dotel.traces.exporter=otlp
-Dotel.exporter.otlp.endpoint=http://localhost:4317

Добавьте следующие строки в jvm.config для экспорта интервалов в Jaeger через нативный протокол Jaeger:

-Dotel.service.name=CedrusData
-Dotel.traces.exporter=jaeger
-Dotel.exporter.jaeger.endpoint=http://localhost:14250