Трассировка с использованием Jaeger | Tdb

Версия:

1.x

Трассировка с использованием Jaeger

В этом руководстве описано, как настроить трассировку функций, а также просмотреть и оценить результаты трассировки в веб-интерфейсе Jaeger.

Подробнее о модуле tracing можно узнать в разделе Оценка производительности.

Руководство включает следующие шаги:

Пререквизиты

Для выполнения примера требуются:

  • установленный Docker-образ Tarantool DB;

  • приложение Docker compose;

  • утилита TT CLI;

  • сервис для сбора данных трассировки Jaeger;

  • исходные файлы примера tracing.

    Примечание

    Есть два способа получить исходные файлы примера:

    • Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива: tarantooldb-documentation-0.8.0.tar.gz. Пример tracing расположен в таком архиве в директории ./doc/examples/tracing/.

    • Отдельный архив tracing.tar.gz, скачанный c сайта Tarantool.

Определение конфигурации

В примере указаны следующие параметры трассировки:

tracing:
  enabled: true
  global_sample_rate: 0
  sample_rates:
    get_token_router: 2
    debug_1: 1
  base_url: 'http://tracing:9411/api/v2/spans'
  api_method: 'POST'
  report_interval: 1
  spans_limit: 1000

Здесь:

  • enabled – включает трассировку;

  • global_sample_rate – глобальный коэффициент частоты трассировки запросов, при значении 0 запросы не трассируются;

  • sample_rates – коэффициенты частоты трассировки для заданных сегментов (spans);

  • base_url – URL-адрес сервера, куда отправляются данные трассировки;

  • api_method – HTTP-метод, который используется для отправки данных трассировки на сервер;

  • report_interval – интервал в секундах между отправкой данных трассировки на сервер;

  • spans_limit – максимальное количество сегментов (span) трассировки, которые могут быть сохранены локально на экземпляре Tarantool перед отправкой во внешнюю систему хранения результатов трассировки.

По умолчанию сегменты (span) трассировки не засекают время выполнения участков кода. Время выполнения участков кода засекается, если выполнено одно из следующих условий:

  • В контексте указан параметр sample: true.

  • Название родительского сегмента трассировки будет get_token_router или debug_1. Вероятность замера времени для нового сегмента при этом будет равна 1/N (1/2 и 1 соответственно).

Параметры tracing.base_url, tracing.api_method, tracing.report_interval и tracing.spans_limit отвечают за отправку результатов трассировки в сторонний сервис Jaeger.

Полное описание опций конфигурации tracing приведено в соответствующем разделе Справочника по конфигурации.

Запуск стенда и подключение к узлу

Перейдите в директорию примера tracing:

cd ./doc/examples/migrations/

Запустите стенд:

   docker compose up -d

Подключитесь к роутеру с помощью команды tt connect. Команда открывает интерактивную консоль Tarantool, позволяющую работать с базой данных:

tt connect admin:secret-cluster-cookie@localhost:3300

Оценка результатов трассировки

Запустите несколько тестовых функций на роутере:

for i = 1, 10 do
   box.func.get_token:call({"test"})
end
box.func.debug_func:call({"debug_1"})
box.func.debug_func:call({"debug_2"})

После этого зайдите в веб-интерфейс Jaeger на http://127.0.0.1:16686. В поле Service выберите default@tarantool-router:3301 и нажмите кнопку Find Traces. В результате вы увидите примерно 5 результатов трассировки для функции get_token() и ровно 1 результат для функции debug_func() с сегментом debug_1.

Результаты трассировки

Если открыть результат трассировки для функции get_token(), можно увидеть, что функция get_token выполняется примерно за 12 мс:

  • 10 мс тратится на выполнение функции на экземпляре storage;

  • еще по 1 мс тратится на коммуникацию экземпляров по сети до и после вызова функции на экземпляре storage.

Логика, выполняемая на экземпляре storage, занимает 80% времени, следовательно, оптимизацию кода следует начать с него.

Результат трассировки функции get_token()

Остановка стенда

Чтобы остановить стенд, выполните следующую команду:

docker compose down
Нашли ответ на свой вопрос?
Обратная связь