Трассировка с использованием Jaeger¶
В этом руководстве описано, как настроить трассировку функций, а также просмотреть и оценить результаты трассировки в веб-интерфейсе Jaeger.
Подробнее о модуле tracing
можно узнать в разделе Оценка производительности.
Руководство включает следующие шаги:
Пререквизиты¶
Для выполнения примера требуются:
установленный Docker-образ Tarantool DB;
приложение Docker compose;
утилита TT CLI;
сервис для сбора данных трассировки Jaeger;
исходные файлы примера
tracing
.Примечание
Есть два способа получить исходные файлы примера:
Архив с полной документацией Tarantool DB, полученный по почте или скачанный в личном кабинете tarantool.io. Пример архива:
tarantooldb-documentation-1.0.0.tar.gz
. Примерtracing
расположен в таком архиве в директории./doc/examples/tracing/
.Отдельный архив tracing.tar.gz, скачанный c сайта Tarantool.
Запуск стенда и подключение к узлу¶
Перейдите в директорию примера tracing
:
cd ./doc/examples/tracing/
Запустите стенд:
docker compose up -d
Подключитесь к роутеру с помощью команды tt connect
.
Команда открывает интерактивную консоль Tarantool, позволяющую работать с базой данных:
tt connect admin:secret-cluster-cookie@localhost:3300
Определение конфигурации¶
В конфигурации примера указаны следующие параметры трассировки:
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
приведено в соответствующем разделе Справочника по конфигурации.
Оценка результатов трассировки¶
Запустите несколько тестовых функций на роутере:
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% времени.
Это означает, что оптимизацию кода следует начать с него.