Настройка трассировки
В этом руководстве описано, как включить технологическую роль app.roles.tracing и настроить конфигурацию трассировки. Кроме этого, приведены примеры использования трассировки при передаче контекста по сети и получении контекста от клиента.
Смотрите также: Трассировка с использованием Jaeger.
Содержание:
- Включение трассировки
- Настройка частоты трассировки
- Пример конфигурации трассировки
- Примеры использования трассировки
Технологическая роль app.roles.tracing включена по умолчанию на всех экземплярах кластера, но не используется, пока она не будет включена
в секции tracing файла конфигурации (config.yaml).
Включить трассировку можно с помощью опции app.roles.tracing.enabled:
roles_cfg:app.roles.tracing:enabled: true
Опция конфигурации tracing.global_sample_rate позволяет определить, как часто будет трассироваться запрос.
Например, tracing.global_sample_rate = 5 означает, что трассируется каждый пятый вызов функции.
В примере установлено значение 0, запросы при этом не трассируются:
roles_cfg:app.roles.tracing:enabled: trueglobal_sample_rate: 0
Полная конфигурация трассировки может выглядеть так:
roles_cfg:app.roles.tracing:enabled: trueglobal_sample_rate: 0sample_rates:get_token_api: 2debug_1: 1base_url: 'http://tracing:9411/api/v2/spans'api_method: 'POST'report_interval: 1spans_limit: 1000
Здесь:
enabled— включение трассировки;global_sample_rate— глобальный коэффициент частоты трассировки запросов, при значении0запросы не трассируются;sample_rates— коэффициенты частоты трассировки для заданных сегментов (spans);base_url— URL-адрес сервера, куда отправляются данные трассировки;api_method— HTTP-метод, который используется для отправки данных трассировки на сервер;report_interval— интервал в секундах между отправкой данных трассировки на сервер;spans_limit— максимальное количество сегментов (span) трассировки, которые могут быть сохранены локально на экземпляре Tarantool перед отправкой во внешнюю систему хранения результатов трассировки.
Полное описание опций конфигурации tracing приведено в соответствующем разделе Справочника по конфигурации.
Пример использования роли tracing с передачей контекста по сети:
-- ROUTERbox.schema.func.create('get_token', {language = 'LUA',if_not_exists = true,body = [[function (param)local vshard = require('vshard')local tracing = require('app.roles.tracing')local context = {}local span = tracing.start_span(context, 'get_token_router')local bucket_id = vshard.router.bucket_id_mpcrc32(param)local _, err = vshard.router.callrw(bucket_id, 'get_token', {context, param}, {})span:finish({error = err})end]],})-- STORAGEbox.schema.func.create('get_token', {language = 'LUA',if_not_exists = true,body = [[function (context, param)local tracing = require('app.roles.tracing')local fiber = require('fiber')local span = tracing.start_span(context, 'get_token_storage')fiber.sleep(0.01)span:finish()end]],})
Получение контекста от клиента:
box.schema.func.create('get_token', {language = 'LUA',if_not_exists = true,body = [[function (ctx, ...)local tracing = require('app.roles.tracing')local context = {trace_id = ctx.trace_id,span_id = ctx.span_id,sample = ctx.trace_id ~= nil,}local span_1 = tracing.start_span(context, 'span_1')— ...span_1:finish()end]],})