Настройка трассировки | Tdb

Версия:

1.x

Настройка трассировки

В этом руководстве описано, как включить технологическую роль tracing и настроить конфигурацию трассировки. Кроме этого, приведены примеры использования трассировки при передаче контекста по сети и получении контекста от клиента.

Смотрите также: Трассировка с использованием Jaeger.

Содержание:

Включение трассировки

Технологическая роль tracing включена по умолчанию на всех экземплярах кластера, но не используется, пока она не будет включена в секции tracing файла конфигурации (config.yaml). Включить трассировку можно с помощью опции tracing.enabled:

tracing:
  enabled: true

Настройка частоты трассировки

Опция конфигурации tracing.global_sample_rate позволяет определить, как часто будет трассироваться запрос. Например, tracing.global_sample_rate = 5 означает, что трассируется каждый пятый вызов функции:

tracing:
  enabled: true
  global_sample_rate: 5

Примечание

Рекомендуется установить такое значение параметра, чтобы трассировалось не более 1 запроса в секунду. Например, при нагрузке 1000 RPS, если функция start_span() вызывается при каждом обращении к базе, установите значение global_sample_rate = 1000.

Пример конфигурации трассировки

Полная конфигурация трассировки может выглядеть так:

tracing:
  enabled: true
  global_sample_rate: 5
  sample_rates:
    get_token: 10000
    get_user: 1000
  base_url: 'http://127.0.0.1:9411/api/v2/spans'
  api_method: 'POST'
  report_interval: 10
  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
    ]],
})
Нашли ответ на свой вопрос?
Обратная связь