Grafana Loki — горизонтально масштабируемая система агрегации логов, вдохновлённая Prometheus. Loki не индексирует содержимое логов (в отличие от Elasticsearch), а хранит только метаданные в виде labels (ключ-значение). Это снижает потребление памяти и стоимость хранения в 10–100 раз по сравнению с ELK Stack.
Как работает
Стек Grafana Loki (PLG — Promtail/Loki/Grafana):
- Promtail — агент-сборщик, читает логи из файлов и journald, отправляет в Loki с labels (app, host, environment).
- Loki — сервер хранения и запросов. Хранит метаданные (inverted index) и сами логи (chunks) отдельно. Chunks опционально в S3/GCS.
- Grafana — визуализация, поиск через LogQL (язык запросов Loki).
LogQL — язык запросов: {app="nginx"} |= "error" | rate()[5m] — выбрать логи nginx за последние 5 минут, содержащие «error», агрегировать в rate. Поддерживает metric queries (подсчёт числа строк, rate, bytes).
Grafana Loki хорошо интегрируется с Prometheus: трассировки из Grafana Tempo, метрики из Prometheus и логи из Loki визуализируются в одном Grafana-дашборде через Grafana Correlations — можно переходить от метрики к логам одним кликом.
История
Loki анонсирован Grafana Labs на KubeCon в декабре 2018 года. Первый стабильный релиз 1.0 — ноябрь 2019 года. Версия 2.0 (2020) добавила LogQL 2.0 с поддержкой metric queries. В 2022 году Grafana Labs привлекла $240 млн инвестиций, Loki занял значительную долю рынка систем логирования как альтернатива ELK Stack.
Grafana Loki: конфигурация и масштабирование
В monolithic режиме Loki запускается как один процесс — подходит для небольших инсталляций (до 100 ГБ логов/день). Для масштабирования — microservices mode: отдельные процессы Distributor, Ingester, Querier, Query Frontend. Backend хранения: local filesystem (только для однонодового режима), объектное хранилище S3/GCS/MinIO (для production). Компрессия chunks: Snappy (по умолчанию) или LZ4.
LogQL — язык запросов Loki, аналогичный PromQL. Пример: {app="nginx"} |= "error" | json | line_format "{{.message}}" — фильтрация nginx-логов с ошибками через JSON-парсер. Алертинг через Grafana или Loki Ruler (встроенный alerting rule engine). Интеграция с Grafana OnCall для управления on-call инцидентами.
На что обращать внимание
Loki не подходит для полнотекстового поиска по логам без label-фильтрации — без labels производительность запросов плохая (полный скан). Важно продумать схему labels заранее: не добавлять high-cardinality labels (user_id, request_id) — это убивает производительность. Loki vs ELK: ELK мощнее для полнотекстового поиска; Loki дешевле и лучше интегрирован с Kubernetes + Prometheus. Минимальные ресурсы для self-hosted Loki: VPS с 2 ГБ ОЗУ и SSD.
Loki на практике
Grafana Loki — система агрегации логов, разработанная по образцу Prometheus. Не индексирует содержимое логов (в отличие от ELK Stack), только метки — это делает его легковеснее. Установка на VPS: Docker Compose с Loki + Promtail (агент) + Grafana. Promtail собирает логи из /var/log/nginx/, Docker-контейнеров. Хранение: S3 или локальный диск. Запросы в Grafana: LogQL — язык запросов Loki, похож на PromQL. Loki хорош для: логов приложений, nginx access logs, системных логов. Для поиска по содержимому логов используйте ELK. Стоимость: Loki потребляет ~100-300 МБ ОЗУ против 1-4 ГБ у Elasticsearch.