Отел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-валидацией ключей и значений.
Использует ОтелГеттерТекстовойКарты и ОтелСеттерТекстовойКарты по умолчанию.
Конструктор
Конструктор без параметров.
Новый ОтелW3CПропагатор()Методы
Внедрить
Внедряет контекст трассировки (SpanContext) в HTTP-заголовки носителя. Если контекст не содержит валидного спана — ничего не делает.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Контекст | Соответствие | — | OTel Context |
Носитель | Произвольный | — | Носитель заголовков |
Сеттер | ОтелСеттерТекстовойКарты | Стандартный сеттер | Объект для записи в носитель |
Извлечь
Извлекает SpanContext из HTTP-заголовков носителя в новый OTel Context. При невалидном заголовке возвращает исходный контекст без изменений. Невалидным считается заголовок, в котором версия, trace-id, parent-id или флаги имеют неверную длину или содержат что-то кроме строчных hex-символов (W3C допускает только 0-9a-f), а также заголовок с нулевыми идентификаторами или версией ff.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
Контекст | Соответствие | — | Входной OTel Context |
Носитель | Произвольный | — | Носитель заголовков |
Геттер | ОтелГеттерТекстовойКарты | Стандартный геттер | Объект для чтения из носителя |
Возвращает: Соответствие — новый контекст с извлечённым SpanContext (или входной контекст при ошибке)
Поля
Возвращает список HTTP-заголовков, используемых пропагатором.
Возвращает: Массив из Строка — ["traceparent", "tracestate"]
Пример
#Использовать opentelemetry
Пропагатор = Новый ОтелW3CПропагатор();
// Внедрить контекст в исходящий запрос
Заголовки = Новый Соответствие();
Пропагатор.Внедрить(ОтелКонтекст.Текущий(), Заголовки);
// Заголовки теперь содержит traceparent: 00-...
// Извлечь контекст из входящего запроса
ВходящиеЗаголовки = Новый Соответствие();
ВходящиеЗаголовки.Вставить("traceparent", "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01");
НовыйКонтекст = Пропагатор.Извлечь(Новый Соответствие(), ВходящиеЗаголовки);
// Использовать совместно с композитным пропагатором
Список = Новый Массив();
Список.Добавить(Пропагатор);
Список.Добавить(Новый ОтелW3CBaggageПропагатор());
КомпПропагатор = Новый ОтелКомпозитныйПропагатор(Список);