Перейти к основному содержимому

Практикум — Loki, Tempo и Mimir

Инженеру Разработчику

Практикум, шаг 7 из 9. Назад — алертинг. Дальше — Alloy и Beyla.


Три столпа в одном UI

Prometheus отвечает на «сколько и как быстро». Для расследования инцидента нужны ещё

  • логи — что произошло по шагам;
  • трейсы — путь одного запроса через сервисы.

Grafana связывает все три в Explore и на дашбордах. Стек Grafana Labs часто называют LGTM (Loki, Grafana, Tempo, Mimir). Базовые дашборды и Explore — Практикум Grafana — шаг 4; полный маршрут — о разделе.

Дашборд Grafana — метрики производительности хоста для корреляции с логами и трейсами


Loki — логи как метки

Loki индексирует labels (как Prometheus), тело лога хранит в object storage или локально. Язык запросов — LogQL.

Минимальный фрагмент Compose:

loki:
image: grafana/loki:3.2.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml

promtail:
image: grafana/promtail:3.2.0
volumes:
- /var/log:/var/log:ro
- ./promtail.yml:/etc/promtail/config.yml:ro

promtail.yml — scrape docker logs или /var/log/*.log с labels job, host.

LogQL в Grafana Explore:

{job="varlogs"} |= "error"
{container="myapp"} | json | status >= 500

Сравнение с ELK — в 92.md.


Tempo — распределённые трейсы

Tempo принимает spans по OTLP (gRPC/HTTP), Jaeger, Zipkin. Дешёвое хранение — без отдельного индекса по каждому атрибуту.

tempo:
image: grafana/tempo:2.6.0
ports:
- "3200:3200" # query
- "4317:4317" # OTLP gRPC
command: [ "-config.file=/etc/tempo.yaml" ]

Приложение или Alloy отправляет трейсы на tempo:4317. В Grafana — datasource Tempo, поиск по trace_id.

Корреляция — из метрики с exemplars или из лога с полем trace_id → кнопка «View trace» в Explore.


Mimir — долгосрочные метрики

Prometheus TSDB по умолчанию хранит ~15 дней. Grafana Mimir (форк Cortex) — горизонтально масштабируемое хранилище с remote_write / remote_read.

Prometheus → remote_write:

remote_write:
- url: http://mimir:9009/api/v1/push

Для учебного стенда Mimir опционален — достаточно знать, что при росте retention его подключают вместо или вместе с Thanos. Долгосрочные метрики на дашбордах Grafana настраивают так же, как Prometheus-источник — см. шаг 4.

РешениеНазначение
MimirGrafana stack, object storage
ThanosSidecar к Prometheus, глобальный query
CortexПредшественник Mimir

Единый Explore — сценарий расследования

  1. Алерт HighErrorRate в Grafana (шаг 6).
  2. Explore → Prometheus — spike на графике 5xx.
  3. Переключение на Loki — {job="myapp"} |= "error" в том же интервале.
  4. Копируете trace_id из JSON-лога.
  5. Tempo — поиск по trace → медленный span в БД.

Мониторинг нагрузки и метрик в Grafana — старт расследования инцидента

Без trace_id в логах связь обрывается — см. OpenTelemetry на шаге 9.


Datasources в Grafana

DatasourceURL (Compose)
Lokihttp://loki:3100
Tempohttp://tempo:3200
Mimirhttp://mimir:9009/prometheus

В настройках Tempo укажите Trace to logs — datasource Loki и маппинг trace_id.


Чек-лист

  • Loki принимает логи, запрос {job=~".+"} в Explore
  • Tempo datasource добавлен
  • (Опционально) remote_write в Mimir

Дальше — Alloy, Beyla, Faro, Pyroscope.


См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").