В этом материале
Идентификаторы разных слоёв связывают, а не подменяют друг другом. Trace context не должен переносить секреты или создавать ложную глобальную уникальность.
Ошибка видна клиенту под одним generation ID, API-процесс записал другой request ID, а движок использует свой внутренний номер. Если эти значения не связаны, расследование превращается в поиск по времени. Для провайдера полезна карта корреляции, которая сохраняет область каждого идентификатора и связывает логическую операцию с попытками. Она должна помогать диагностике без добавления пользовательских данных в каждый технический канал.
Назовите разные идентичности
OpenTelemetry context propagation описывает передачу контекста распределённой операции. Trace ID и span ID относятся к этой модели наблюдаемости, а request ID может существовать независимо. Совпадение строк не делает их одним понятием и не гарантирует одинаковый срок жизни.
В таблице укажите источник значения, область уникальности и место хранения. Локальный engine ID может быть уникален только в пределах процесса. Внешний generation ID относится к интерфейсу платформы. Не заменяйте их друг другом при пересылке ошибок, иначе связь с исходной записью станет невозможной после рестарта или повторной попытки.
Проверьте внешний идентификатор
Документация streaming OpenRouter описывает X-Generation-Id как средство корреляции на своих endpoints. Это полезный внешний ориентир, но не универсальное требование заголовка любого upstream. Собственный сервис должен отдельно документировать, какие идентификаторы принимает и возвращает.
Если клиент передаёт свой request identifier, определите политику доверия. Он может повториться, отсутствовать или иметь недопустимую форму. Серверная запись не должна случайно объединить чужие операции только потому, что поступила одинаковая строка. Для теста используйте короткие синтетические значения без секретных сведений.
Свяжите попытки и операцию
Одна логическая операция способна содержать несколько transport attempts. Сохраните parent relationship и итог каждой попытки отдельно. Если fallback выбрал другую реплику, это не обязательно новая пользовательская задача, но фактически выполненная работа тоже не должна исчезнуть из диагностики.
Карта корреляции содержит безопасные IDs, endpoint, release и outcome. Полный prompt для этого не нужен. Сравнение по одному timestamp остаётся вспомогательным: оно не гарантирует точную связь при высокой конкуренции запросов и несовпадающих часах разных хостов.
Ограничьте переносимые данные
OpenTelemetry о sensitive data объясняет минимизацию и фильтрацию телеметрии. Baggage и headers не должны становиться скрытым контейнером для токенов доступа, адресов пользователей или содержания запросов. Наличие trace propagation не является согласием на передачу любой metadata дальше по цепочке.
Определите allowlist переносимых полей и точки удаления. В fixture вставьте заведомо тестовую чувствительную строку, затем проверьте фактический exported payload. Успешный ответ приложения не подтверждает, что фильтр сработал на error path или в дополнительном logging middleware.
Испытайте missing context
Проверьте запрос без внешнего ID, с некорректным trace context и с повторяющимся клиентским ID. Ожидаемое поведение должно сохранять диагностируемую операцию, не доверяя неподтверждённой идентичности. Сохраните результаты вместе с версией instrumentation и настройками propagation.
Связанные темы — полезный failure report и мониторинг GPU. Итог — проверяемая связь технических событий, а не обещание полного tracing любого внешнего сервиса или требование раскрывать содержимое пользовательских запросов.