OpenTelemetry трейсы

Тема дорожной карты · Observability

Трассировки OpenTelemetry — это распределённые трассировки, созданные с помощью OpenTelemetry SDK и переданные через заголовок W3C traceparent, что обеспечивает независимую от поставщика и переносимую реализацию трассировки. API трассировки OpenTelemetry предоставляет объекты Tracer, Span и SpanContext, единые для всех поддерживаемых языков (Go, Java, Python, Node.js и другие), что позволяет командам инструментировать полиглотные системы по единой концептуальной модели. Данные трассировки экспортируются из приложений через OTLP — либо напрямую в бэкенд, либо через otel-collector, настроенный с receivers: [otlp] и exporters: [jaeger, tempo, datadog]. Для начала отправки трассировок OpenTelemetry в эндпоинт коллектора достаточно задать переменные окружения OTEL_EXPORTER_OTLP_ENDPOINT и OTEL_SERVICE_NAME. Трассировки OpenTelemetry поддерживают эксемпляры — механизм, связывающий отдельные спаны с соответствующими выборками метрик Prometheus и обеспечивающий бесшовную навигацию между метриками и распределёнными трассировками в Grafana.

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

OpenTelemetry трейсы захватывает пути запросов через сервисы. Trace = дерево spans; у каждого span — имя, длительность, атрибуты, parent span. Trace context (traceparent-заголовок по W3C) пробрасывается между сервисами — spans из разных сервисов соединяются в один trace. Storage: Jaeger, Tempo (Grafana-стек, масштабируется через object storage), Zipkin, SigNoz. Sampling at the head (решение per-request) или tail (решение после полного trace).

Когда применять

Tracing — когда сервисов > 2 или нужно дебажить latency. OpenTelemetry SDK + auto-instrumentation для популярных фреймворков (Spring, FastAPI, Express, Gin). Sampling 1-10% в production (head sampling); поднимайте до 100% на короткие debug-сессии. Tempo — если уже на Grafana-стеке; иначе Jaeger / SigNoz оба нормальны.

Типичные ошибки

Ловушки OpenTelemetry трейсы: 100% sampling на высоком трафике (storage взрывается + perf-хит); сломанная context propagation (HTTP middleware, стрипающий W3C traceparent — каждый вызов = новый trace); spans без релевантного контекста (service, version, user-segment) — traces сложно фильтровать.

Связанные понятия

Полезные ресурсы