OpenTelemetry#
CedrusData Catalog может генерировать и экспортировать трейсы OpenTelemetry.
Настройка#
CedrusData Catalog предоставляет возможность трассировки четырех ключевых компонентов системы: веб-сервера, API, хранилища, и файловой системы.
Для включения трассировки необходимо указать подсистемы, подлежащие трассировке. Вам также потребуется задать адрес OTLP сервиса, в который будут экспортированы трейсы. Например:
telemetry.enabled=http,api
telemetry.exporter-endpoint=http://jaeger:4317
Допустимые значения telemetry.enabled
(могут быть заданы через запятую):
http
- трассировать HTTP-запросыapi
- трассировать вызовы методов ядра CedrusData Catalogstore
- трассировать обращения к хранилищу (SQLite, PostgreSQL)file_system
- трассировать обращения к файловым системам (S3, HDFS)all
- трассировать все перечисленные выше подсистемы
Трассировки различных подсистем организованы во вложенные span-ы. При получении HTTP запроса CedrusData Catalog открывает span подсистемы http
.
Далее обработчик запроса может обратиться к подсистеме store
для аутентификации и авторизации пользователя.
После этого контроль передается подсистеме api
, которая сделать некоторое количество вызовов подсистем store
и file_system
.
Вы также можете задать необязательный параметр telemetry.sampling-ratio
, который определяет процент пользовательских операций, подлежащих трассировке.
Значения данного параметра должны находиться в диапазоне от 0.0
до 1.0
. Например, при наличии следующей конфигурации CedrusData Catalog будет трассировать
приблизительно 50% запросов:
telemetry.sampling-ratio=0.5
Пример интеграции с Jaeger#
Данный пример показывает как включить трассировку CedrusData Catalog и экспортировать трейсы в Jaeger, запущенный на том же компьютере, что и CedrusData Catalog.
Убедитесь, что у вас установлен Docker Server, и команда
docker
не требуетsudo
Создайте сеть Docker, которая будет использован CedrusData Catalog и Jaeger:
docker network create example-network
Запустите Jaeger. Обратите внимание, что мы явно включаем OTLP в Jaeger с помощью переменной окружения
COLLECTOR_OTLP_ENABLED
и выставляем его порт4317
:docker run -d \ --name example-jaeger \ --network=example-network \ -e COLLECTOR_OTLP_ENABLED=true \ -p 16686:16686 \ -p 4317:4317 \ jaegertracing/all-in-one:latest
Убедитесь, что web-интерфейс Jaeger доступен по адресу http://localhost:16686.
Создайте файл конфигурации
config.properties
со включенной трассировкой. В данной конфигурации мы экспортируем трейсы в Jaeger по адресу http://example-jaeger:4317. Данный адрес будет доступен контейнеру CedrusData Catalog, который мы запустим в сети Dockerexample-network
на следующем шаге.data-dir=/data/catalog admin-password=${ENV:CATALOG_ADMIN_PASSWORD} telemetry.enabled=http,api,store telemetry.exporter-endpoint=http://example-jaeger:4317
Запустите контейнер CedrusData Catalog:
docker run -d \ --name example-catalog \ --network=example-network \ -p 9080:9080 \ -v $PWD/config.properties:/etc/catalog/config.properties \ cr.yandex/crpjtvqf29mpabhmrf1s/cedrusdata-catalog:458-1
Выполните произвольную операцию к каталогу. В данном примере мы создадим еще один access token для пользователя
root
, чтобы потом проанализировать трейс данной операции:docker exec -it example-catalog catalog access-token create \ --principal-name root
Откройте Jaeger UI по адресу http://localhost:16686, выберите Service
cedrusdata-catalog
и операциюPOST /v1/access-tokens
, нажмите кнопку «Find Traces». Выберите трейс и ознакомьтесь с его содержимым.(при необходимости) Остановите контейнеры и удалите ненужные ресурсы:
docker rm -f example-catalog docker rm -f example-jaeger docker network rm example-network rm config.properties