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

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

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

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

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

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

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

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

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

  • утилита tt CLI;

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

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

    Примечание

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

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

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

Запуск стенда

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

cd ./doc/examples/tracing/

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

make start

Запущенный стенд состоит из:

  • кластера Tarantool DB:

    • 1 роутер;

    • 2 набора реплик по 1 хранилищу;

  • кластера etcd из 3 узлов;

  • 1 узла Tarantool Cluster Manager (TCM).

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

После запуска должны работать все контейнеры, кроме init_host.

Также после запуска кластера становится доступен веб-интерфейс TCM. Для входа в TCM откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:

  • Username: admin

  • Password: secret

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

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

roles_cfg:
  app.roles.tracing:
    enabled: true
    global_sample_rate: 0
    sample_rates:
      get_token_api: 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_api или debug_1. Вероятность замера времени для нового сегмента при этом будет равна 1/N (1/2 и 1 соответственно).

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

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

Подключение к узлу

Чтобы начать работу с базой данных через интерактивную консоль Tarantool, нужно подключиться к узлу кластера. Сделать это можно двумя способами:

  • в веб-интерфейсе TCM;

  • в терминале с помощью утилиты tt CLI:

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

Подключитесь к узлу api, используя первый способ – через TCM. Для этого:

  1. Перейдите на вкладку Stateboard.

  2. Нажмите на набор реплик api.

  3. Выберите узел api-1 и в открывшемся окне перейдите на вкладку Terminal.

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

В TCM во вкладке Terminal запустите несколько тестовых функций на роутере:

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 выберите tarantool-api-1:3301 и нажмите кнопку Find Traces. В результате вы увидите примерно 4 результата трассировки для функции get_token_api() и ровно 1 результат для функции debug_func() с сегментом debug_1.

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

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

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

  • 4 мс занимает коммуникация экземпляров по сети до и после вызова функции на экземплярях worker.

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

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

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

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

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