Loki: логи¶
Логи — самая древняя форма наблюдаемости. tail -f /var/log/syslog существовал задолго до веб-приложений. Но в эпоху контейнеров логи размазаны по сотням подов, а grep уже не спасает. Loki — централизованное хранилище логов, сделанное специально для Grafana.
Главная идея Loki: индексировать не содержимое логов (как Elasticsearch), а метаданные — labels, те же ключ-значение, что в Prometheus.
Разница: Elasticsearch индексирует каждое слово. Loki индексирует только {job="api", env="prod"}. Сами строки пишутся в chunk'и без индекса — получается дёшево по памяти (раз в 5-10 дешевле Elasticsearch).
LogQL — язык запросов к Loki¶
Базовый синтаксис:
{job="api", env="production"} |= "error"
{...}— label filter (обязателен, Loki не делает запрос без меток)|= "error"— line filter (ищет слово "error" в строке)
Пример для панели Logs:
{job="api"}
| json message
| line_format "{{.message}}"
| status >= 400
Визуализация логов в Grafana¶
Три типа визуализации:
- Logs panel: raw логи с цветовой подсветкой. Удобно, когда нужно именно строки.
- Time Series: метрика
rate({job="api"} |="error" [5m])— счётчик ошибок в логах. Это визуализируется как обычный график в панели Time Series. Позволяет смотреть вместе с Prometheus для корреляции. - Histogram в Explore: без создания панели. В Explore, Loki data source, нажмите "Logs" → "Histogram". Grafana сама построит распределение логов по времени в виде гистограммы.
Correlation между метрикой Prometheus и логами в Loki¶
Типичный пример: в панели Time Series видите скачок HTTP 500 errors. Переходите в Explore, находите тот же промежуток времени через dataLinks, переключившись на Loki. Логи сами отфильтруются.
Чтобы эти связи работали: 1. В Loki-источнике включены derivedFields (см. главу Provisioning источников данные — tracesToLogsV2). Обычно для traceID. 2. В Prometheus-источнике также считываются exemplarTraceIDdestinations.
Вывод: метрика Prometheus показывает медленный запрос → переключаемся → трейс Tempo → внутри трейса ссылка на логи Loki через traceID.
Далее: Tempo: трассировка