Skip to content

ОтелW3CПропагатор

Пропагатор контекста трассировки W3C Trace Context.

Описание

Реализует внедрение и извлечение контекста трассировки через HTTP-заголовки traceparent и tracestate согласно спецификации W3C Trace Context Level 2.

Формат traceparent: {version}-{trace-id}-{parent-id}-{trace-flags}
Пример: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Поля trace-flags (1 байт):

  • Бит 0 (маска 0x01) — sampled
  • Бит 1 (маска 0x02) — random (W3C Level 2): TraceId сгенерирован случайно

Все биты сохраняются при round-trip через числовое поле ФлагиТрассировки в ОтелКонтекстСпана. Парсинг tracestate выполняется через ОтелСостояниеТрассировки с RFC-валидацией ключей и значений.

Использует ОтелГеттерТекстовойКарты и ОтелСеттерТекстовойКарты по умолчанию.

Конструктор

Конструктор без параметров.

bsl
Новый ОтелW3CПропагатор()

Методы

Внедрить

Внедряет контекст трассировки (SpanContext) в HTTP-заголовки носителя. Если контекст не содержит валидного спана — ничего не делает.

ПараметрТипПо умолчаниюОписание
КонтекстСоответствиеOTel Context
НосительПроизвольныйНоситель заголовков
СеттерОтелСеттерТекстовойКартыСтандартный сеттерОбъект для записи в носитель

Извлечь

Извлекает SpanContext из HTTP-заголовков носителя в новый OTel Context. При невалидном заголовке возвращает исходный контекст без изменений.

ПараметрТипПо умолчаниюОписание
КонтекстСоответствиеВходной OTel Context
НосительПроизвольныйНоситель заголовков
ГеттерОтелГеттерТекстовойКартыСтандартный геттерОбъект для чтения из носителя

Возвращает: Соответствие — новый контекст с извлечённым SpanContext (или входной контекст при ошибке)

Поля

Возвращает список HTTP-заголовков, используемых пропагатором.

Возвращает: Массив из Строка["traceparent", "tracestate"]

Пример

bsl
#Использовать opentelemetry

Пропагатор = Новый ОтелW3CПропагатор();

// Внедрить контекст в исходящий запрос
Заголовки = Новый Соответствие();
Пропагатор.Внедрить(ОтелКонтекст.Текущий(), Заголовки);
// Заголовки теперь содержит traceparent: 00-...

// Извлечь контекст из входящего запроса
ВходящиеЗаголовки = Новый Соответствие();
ВходящиеЗаголовки.Вставить("traceparent", "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01");
НовыйКонтекст = Пропагатор.Извлечь(Новый Соответствие(), ВходящиеЗаголовки);

// Использовать совместно с kompozitным пропагатором
КомпПропагатор = Новый ОтелКомпозитныйПропагатор(
    Новый Массив() + Новый ОтелW3CПропагатор() + Новый ОтелW3CBaggageПропагатор()
);