Что такое трейсинг

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

Распределённая трассировка — это техника наблюдаемости, отслеживающая путь одного запроса по мере его движения через несколько сервисов распределённого приложения. Каждая единица работы в сервисе записывается как спан, и все спаны, принадлежащие одному запросу, связываются общим trace_id, образуя дерево или ориентированный ациклический граф — трассировку. Распределённая трассировка позволяет отвечать на вопросы, недоступные для метрик и логов, — например, «какой сервис в цепочке вызовов ответственен за эту 3-секундную хвостовую задержку?» — предоставляя причинно-следственную временну́ю шкалу каждой операции. Реализация распределённой трассировки требует передачи заголовков контекста (как правило, traceparent в соответствии со стандартом W3C) между всеми сервисами, что можно сделать автоматически с помощью автоинструментирования OpenTelemetry. Такие инструменты, как Jaeger, Grafana Tempo и Zipkin, хранят и отображают распределённые трассировки, позволяя инженерам визуально исследовать каскадное поведение сложных систем.

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

Что такое трейсинг захватывает пути запросов через сервисы. 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 оба нормальны.

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

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

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

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