Skip to content

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

Пропагатор контекста трассировки B3 (Zipkin).

Описание

Реализует внедрение и извлечение контекста трассировки через HTTP-заголовки в форматах B3 multi-header и single-header.

Multi-header формат:

  • X-B3-TraceId — идентификатор трассировки (32 символа hex)
  • X-B3-SpanId — идентификатор спана (16 символов hex)
  • X-B3-Sampled — флаг сэмплирования ("1" / "0")
  • X-B3-Flags — флаг отладки ("1" = debug)

Single-header формат:

  • b3: {traceId}-{spanId}-{sampling}-{parentSpanId}
  • Для отладочного режима: b3: {traceId}-{spanId}-d
  • Deny sampling: b3: 0

При извлечении контекста оба формата поддерживаются одновременно: single-header (b3) имеет приоритет над multi-header (X-B3-*).

Флаг отладки B3 (X-B3-Flags: 1 / b3: ...d) сохраняется в контексте через специальный ключ, доступный через метод КлючОтладки().

Конструктор

bsl
Новый ОтелB3Пропагатор(Формат)
ПараметрТипПо умолчаниюОписание
ФорматСтрокаОтелФорматB3.Одиночный()Формат внедрения заголовков: ОтелФорматB3.Мульти() или ОтелФорматB3.Одиночный()

Методы

Внедрить

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

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

Извлечь

Извлекает контекст трассировки из HTTP-заголовков носителя. Поддерживает оба формата: single-header имеет приоритет. При невалидных идентификаторах (неверная длина, all-zeros) возвращает исходный контекст.

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

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

Поля

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

Возвращает: Массив из Строка

  • Для single: ["b3"]
  • Для multi: ["X-B3-TraceId", "X-B3-SpanId", "X-B3-Sampled", "X-B3-Flags"]

КлючОтладки

Возвращает ключ контекста для хранения debug-флага B3. Аналог B3Propagator.DEBUG_CONTEXT_KEY из Java SDK.

Возвращает: ОтелКлючКонтекста — ключ для доступа к debug-флагу в контексте

Пример

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

// Single-header (по умолчанию)
Пропагатор = Новый ОтелB3Пропагатор();

// Multi-header
Пропагатор = Новый ОтелB3Пропагатор(ОтелФорматB3.Мульти());

// Внедрить в исходящий запрос
Заголовки = Новый Соответствие();
Пропагатор.Внедрить(ОтелКонтекст.Текущий(), Заголовки);
// Single: { "b3": "4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-1" }
// Multi: { "X-B3-TraceId": "4bf9...", "X-B3-SpanId": "00f0...", "X-B3-Sampled": "1" }

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

// Проверить debug-флаг
ЭтоОтладка = НовыйКонтекст.Получить(Пропагатор.КлючОтладки());

// Использовать совместно с W3C пропагатором через композитный
СписокПропагаторов = Новый Массив();
СписокПропагаторов.Добавить(Новый ОтелW3CПропагатор());
СписокПропагаторов.Добавить(Новый ОтелB3Пропагатор());
КомпозитныйПропагатор = Новый ОтелКомпозитныйПропагатор(СписокПропагаторов);