⏱️ Grafana Tempo
Распределённая трассировка: spans, TraceQL, OpenTelemetry и связь с логами.
Шпаргалки · Инфраструктура · #tempo #grafana #tracing #observability
Идея
Трасса (trace) показывает путь одного запроса через сервисы. Состоит из спанов (span): операция, время начала, длительность, атрибуты, родитель. Tempo хранит трассы дёшево (объектное хранилище) и ищет по trace_id и по TraceQL.
Как данные попадают в Tempo
приложение (OpenTelemetry SDK) → OTel Collector / Grafana Alloy → Tempo
Протоколы приёма: OTLP (gRPC 4317, HTTP 4318), Jaeger, Zipkin. Просмотр: Grafana → Explore → источник Tempo.
Настройка приложения (переменные OpenTelemetry)
OTEL_SERVICE_NAME=checkout
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4318
OTEL_TRACES_SAMPLER=parentbased_traceidratio
OTEL_TRACES_SAMPLER_ARG=0.1 # 10% запросов
Запросы TraceQL
{ resource.service.name = "checkout" }
{ resource.service.name = "checkout" && status = error }
{ span.http.status_code >= 500 }
{ duration > 2s }
{ span.db.system = "postgresql" } | count() > 3
{ name = "POST /pay" } >> { span.db.system = "redis" } # потомок
Основные поля
| Поле | Смысл |
|---|---|
resource.service.name |
сервис |
name |
имя спана |
duration |
длительность |
status |
ok, error, unset |
span.<атрибут> |
атрибут спана |
kind |
server, client, producer… |
Связь с остальным
- Логи → трасса: пишите
trace_idв каждую строку лога, в Loki настройте derived field. - Трасса → логи: в источнике данных Tempo включите «Trace to logs».
- Метрики → трасса: exemplars в Prometheus ведут из графика к конкретной трассе.
- Service graph и span metrics строят карту сервисов и RED-метрики из трасс.
Приёмы
- Семплируйте: сохранять все трассы дорого. Tail sampling оставляет медленные и с ошибками.
- Передавайте контекст (
traceparent) между сервисами и через очереди.