Настройка трассировки¶
В этом руководстве описано, как включить технологическую роль 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: true
    global_sample_rate: 0
Примечание
Рекомендуется установить такое значение параметра, чтобы трассировалось не более 1 запроса в секунду.
Например, при нагрузке 1000 RPS, если функция start_span() вызывается при каждом обращении к базе,
установите значение global_sample_rate = 1000.
Пример конфигурации трассировки¶
Полная конфигурация трассировки может выглядеть так:
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 перед отправкой во внешнюю систему хранения результатов трассировки.
Полное описание опций конфигурации tracing приведено в соответствующем разделе Справочника по конфигурации.
Примеры использования трассировки¶
Пример использования роли tracing с передачей контекста по сети:
-- ROUTER
box.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
    ]],
})
-- STORAGE
box.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
    ]],
})