Tempo: трейсы¶
Трейсы — самая молодая из трёх основных форм сигналов наблюдаемости, но критически важная. Без трейсов вы не узнаете, какой из 20 микросервисов стал узким горлышком при обработке запроса.
Tempo — бэкенд для хранения и выборки трейсов. Концептуально близок к Loki: хранит трейсы в объектном S3-хранилище, не индексируя каждую деталь span'а, а только по ключевым параметрам типа service name, duration.
TraceQL — язык запросов к трейсам¶
{ .service.name = "api" && duration > 1s }
{ .span.name = "db:query" }— найти все спаны определённого типа.parent:span— искать по родительским или дочерним спанам.- Поддержка структурных запросов: "покажи мне все трейсы, где после вызова api последовал вызов db".
Визуализация трейсов в Grafana¶
Grafana предлагает две большие панели для темпов:
- Trace panel — для конкретного трейса (waterfall). Вы вводите traceID, Tempo возвращает спаны, Grafana показывает водопад.
- Service Graph view — Grafana строит карту зависимостей между сервисами (нодами) и линиями с количеством запросов/ошибками/латенси.
Карта сервисов позволяет спросить: если api-GW тормозит — он сам или зависит от backend. Ответ очевиден — поезжай к backend.
Correlation traceID с логами Loki¶
Logs → Tempo bridge. В логах производится traceID — при помощи derivedFields Loki извлекает traceID из тела лога:
derivedFields:
- name: traceID
matcherRegex: '"traceid":"(\w+)"'
Теперь в Logs панели поле traceID становится кликабельным — оно ведёт на Trace view в Tempo.
Кейс: вы видите лог "Internal Server Error" — кликаете на traceID справа от него — проваливаетесь в Tempo. Смотрите, что именно делал сервис в момент ошибки, какие вызовы и результаты. Расследование инцидента сокращается с 30 минут до 2.