# Валидатор распространения OpenTelemetry W3C traceparent / tracestate / baggage и заголовков OTLP

Проверяет traceparent по ABNF W3C Trace Context (версия / 16-байтовый trace-id / 8-байтовый parent-id / 1-байтовый trace-flags; нули и версия ff отклоняются, верхний регистр предупреждает), tracestate (≤32 членов, простые и tenant@system ключи, предупреждение о дублях) и baggage (процентно-кодированные значения с непрозрачными свойствами); проверяет Content-Type экспорта OTLP и 25-байтовый двоичный контекст grpc-trace-context-bin; коррелирует два traceparent в симулированном round-trip (стабильность trace-id и коллизия случайного дочернего span-id) и выдаёт нормализованные заголовки.

> Каноническая страница: https://elysiatools.com/ru/tools/opentelemetry-w3c-traceparent-tracestate-baggage-and-otlp-protobuf-headers-propagation-validator

- **Категория:** Development

- **Ключевые слова:** W3C Trace Context, traceparent, tracestate, baggage, OpenTelemetry, заголовки OTLP, распределённая трассировка, span id, валидация распространения

## Обзор

Синтаксис traceparent: version(2 HEX)-trace-id(32 строчных HEX)-parent-id(16 строчных HEX)-trace-flags(2 HEX); пробелы внутри запрещены; trace-id/parent-id не могут быть нулевыми; версия ff зарезервирована и недопустима; бит0 = sampled, приёмники версии 00 игнорируют остальные. tracestate — список key=value через OWS","OWS (≤32), ключи простые (начинаются с lcalpha) или system-id@tenant, значения без =/, пробелов и ≤256 печатных символов. baggage: первый сегмент key=value (значение только из baggage-octet, вне диапазона обязательное процентное кодирование, ошибочные %-последовательности — ошибка); последующие ;prop — непрозрачные свойства. OTLP: двоичный экспорт требует Content-Type: application/x-protobuf (JSON — application/json); в gRPC grpc-trace-context-bin = base64(trace-id 16Б ‖ span-id 8Б ‖ flags 1Б), 25 байт со сверкой против traceparent. Корреляционный round-trip: один trace-id ротирует новые span-id на каждом шаге (8 случайных байтов, не ноль, без коллизии с родителем); стабильный trace-id объединяет контексты в один распределённый трейс.

## Входные данные

- **заголовок traceparent** (text): 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
- **заголовок tracestate** (text): congo=t61rcWkgMzE,rojo=00f067aa0ba902b7
- **заголовок baggage** (text): userId=alice;serverNode=DF%2028
- **транспорт OTLP** (select)
- **Content-Type экспорта** (text): application/x-protobuf
- **grpc-trace-context-bin (base64)** (text): S/kvNXezTaajzpKdDg5HNgDw…
- **Второй traceparent (корреляция)** (text): 00-4bf92f35…-aabbccddeeff0011-01

## Когда использовать

- При отладке разрыва цепочки распределённой трассировки между сервисами на стеке OpenTelemetry.
- При проверке формата и корректности процентного кодирования пользовательских атрибутов в заголовке baggage.
- При верификации двоичного контекста grpc-trace-context-bin и корректности Content-Type для экспорта OTLP Protobuf.

## Как это работает

- Синтаксический анализатор сверяет структуру traceparent по спецификации W3C Trace Context (версия, 16-байтный trace-id, 8-байтовый parent-id, trace-flags) и отклоняет недопустимые нулевые идентификаторы или версию ff.
- Модуль валидации tracestate и baggage проверяет лимиты элементов (до 32 пар в tracestate), правила именования tenant-ключей, валидность percent-encoding и синтаксис непрозрачных свойств.
- Двоичный верификатор декодирует заголовок grpc-trace-context-bin (25 байт) и сверяет соответствие идентификаторов трассировки относительно переданного traceparent.
- Симулятор round-trip сопоставляет два заголовка traceparent, проверяя стабильность сквозного trace-id и отсутствие коллизий нового child span-id.

## Сценарии использования

- Тестирование интеграций API-шлюзов и сервисных сеток на предмет корректной проброски контекста W3C Trace Context.
- Проверка правильности формирования метаданных в gRPC-интерцепторах перед отправкой в OpenTelemetry Collector.
- Диагностика ошибок передачи бизнес-контекста и пользовательских тегов через заголовок baggage.

## Частые вопросы

### Почему заголовок traceparent помечается как невалидный при наличии только нулей?

Спецификация W3C Trace Context строго запрещает полностью нулевые значения для trace-id и parent-id.

### Какой Content-Type требуется для OTLP при экспорте в формате Protobuf?

Для протокола HTTP при передаче бинарного Protobuf обязателен заголовок Content-Type: application/x-protobuf.

### Что представляет собой заголовок grpc-trace-context-bin?

Это 25-байтовая бинарная структура в кодировке base64, содержащая 16 байт trace-id, 8 байт span-id и 1 байт флагов.

### Какие ограничения накладываются на заголовок tracestate?

Список не должен превышать 32 элементов формата key=value, разделенных запятыми, а длина каждого значения ограничена 256 печатными символами.

### Зачем валидировать второй traceparent в поле корреляции?

Это позволяет проверить, сохраняется ли trace-id при переходе между сервисами и генерируется ли уникальный дочерний span-id.

## Связанные инструменты

- [Сравнение хеш-алгоритмов](https://elysiatools.com/ru/tools/hash-algorithm-comparator): Хеширует один и тот же вход с помощью MD5, SHA-1, SHA-256, SHA-512, BLAKE2b и BLAKE3 и сравнивает их: длину, hex/Base64-дайджест, статус безопасности (взломан/современный) и относительный бенчмарк скорости. Полезно для обучения, выбора алгоритма и проверки контрольных сумм.
- [Генератор PKCE Code Verifier и Challenge](https://elysiatools.com/ru/tools/pkce-code-verifier-generator): Создание, проверка и верификация пар code_verifier / code_challenge PKCE (RFC 7636) для OAuth2 / OIDC. Три режима: (1) создать новую пару из криптостойких случайных байт (256/384/512/768 бит), (2) аудит имеющегося verifier по RFC — длина (43–128), набор \[A-Za-z0-9-._~\] и ≥256 бит энтропии, (3) проверить пару, пересчитав BASE64URL(SHA256(verifier)). При желании строит полный URL запроса авторизации и тело обмена токена. Дополняет универсальный nonce-generator (только выдаёт пару) аудитом соответствия RFC и проверкой пар.
- [Шифрование / Расшифрование RSA](https://elysiatools.com/ru/tools/rsa-encrypt-decrypt): Шифрует текст открытым ключом RSA или расшифровывает шифртекст соответствующим закрытым ключом, с OAEP-паддингом (SHA-1 или SHA-256). Длинные сообщения бьются на блоки. Ключи и данные обрабатываются локально. PKCS#1 v1.5 не предлагается (Node отключает его для расшифровки из-за атак Bleichenbacher).
- [Генератор Data URI](https://elysiatools.com/ru/tools/data-uri-generator): Преобразует файлы в Data URI (Base64 или процентное кодирование) для встраивания изображений, шрифтов и ресурсов прямо в HTML, CSS или Markdown
- [Base64 Конвертер](https://elysiatools.com/ru/tools/base64-converter): Кодирует и декодирует данные в/из формата Base64 с опциями URL-safe
- [Расширенные текстовые кодеки (Base65536 + netstring)](https://elysiatools.com/ru/tools/extended-text-base-codecs): Кодируйте и декодируйте редкими кодеками: Base65536 (бинарное → плотный Unicode) и netstring (саморазграничивающее обрамление).
- [Мост OCR PDF → структурированный JSON](https://elysiatools.com/ru/tools/ocr-pdf-to-structured-json-bridge): Извлекает текстовый слой PDF с геометрией (строки по y-координате, таблицы по промежуткам колонок, заголовки по кеглю, пары ключ-значение через двоеточие) и заполняет пользовательскую JSON-схему поле за полем — метки сопоставляются по нормализованным ключам, значения приводятся к объявленным типам и проверяются ajv.
- [Конвертер Leet Speak](https://elysiatools.com/ru/tools/leet-speak-converter): Преобразует текст в leet speak (1337) и обратно. Кодирует в стилях Базовый, Полный или Заглавные, или декодирует leet в обычный текст.

## Примеры

- [Примеры OpenTelemetry](https://elysiatools.com/ru/samples/opentelemetry): Примеры стандартов observability OpenTelemetry, включая интеграцию, трассировку, метрики и логирование на нескольких языках и фреймворках
- [Примеры Распределенного Трейсинга](https://elysiatools.com/ru/samples/distributed-tracing-samples): Комплексные примеры распределенного трейсинга с использованием Jaeger, OpenTelemetry и современных инструментов
- [MP3 Аудио Образцы Без Авторских Прав](https://elysiatools.com/ru/samples/mp3-samples): Коллекция аудио образцов без авторских прав для тестирования и разработки, включая звуки природы, медитативную музыку и фоновое аудио
- [Примеры Обработки Изображений Web Python](https://elysiatools.com/ru/samples/web-image-processing-python): Примеры обработки изображений Web Python используя PIL/Pillow включая чтение, сохранение, изменение размера и преобразование формата
