OpenTelemetry#

CedrusData Catalog может генерировать и экспортировать трейсы OpenTelemetry.

Настройка#

CedrusData Catalog предоставляет возможность трассировки четырех ключевых компонентов системы: веб-сервера, API, хранилища, и файловой системы.

Для включения трассировки необходимо указать подсистемы, подлежащие трассировке. Вам также потребуется задать адрес OTLP сервиса, в который будут экспортированы трейсы. Например:

telemetry.enabled=http,api
telemetry.exporter-endpoint=http://jaeger:4317

Допустимые значения telemetry.enabled (могут быть заданы через запятую):

  • http - трассировать HTTP-запросы

  • api - трассировать вызовы методов ядра CedrusData Catalog

  • store - трассировать обращения к хранилищу (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.

  1. Убедитесь, что у вас установлен Docker Server, и команда docker не требует sudo

  2. Создайте сеть Docker, которая будет использован CedrusData Catalog и Jaeger:

    docker network create example-network
    
  3. Запустите 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.

  4. Создайте файл конфигурации config.properties со включенной трассировкой. В данной конфигурации мы экспортируем трейсы в Jaeger по адресу http://example-jaeger:4317. Данный адрес будет доступен контейнеру CedrusData Catalog, который мы запустим в сети Docker example-network на следующем шаге.

    data-dir=/data/catalog
    admin-password=${ENV:CATALOG_ADMIN_PASSWORD}
    telemetry.enabled=http,api,store
    telemetry.exporter-endpoint=http://example-jaeger:4317
    
  5. Запустите контейнер 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
    
  6. Выполните произвольную операцию к каталогу. В данном примере мы создадим еще один access token для пользователя root, чтобы потом проанализировать трейс данной операции:

    docker exec -it example-catalog catalog access-token create \
      --principal-name root
    
  7. Откройте Jaeger UI по адресу http://localhost:16686, выберите Service cedrusdata-catalog и операцию POST /v1/access-tokens, нажмите кнопку «Find Traces». Выберите трейс и ознакомьтесь с его содержимым.

  8. (при необходимости) Остановите контейнеры и удалите ненужные ресурсы:

    docker rm -f example-catalog
    docker rm -f example-jaeger
    docker network rm example-network
    rm config.properties