Перейти к содержанию

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 предлагает две большие панели для темпов:

  1. Trace panel — для конкретного трейса (waterfall). Вы вводите traceID, Tempo возвращает спаны, Grafana показывает водопад.
  2. 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.


Далее: Mimir: долгосрочное хранение метрик