Как настроить мониторинг логов приложения в реальном времени с помощью связки Loki и Grafana?
Связка Loki + Grafana — это мощный и легковесный стек для сбора, хранения и визуализации логов приложений в реальном времени. В отличие от ELK, Loki не индексирует содержимое логов, а только метки (labels), что делает его экономичным по ресурсам.
## 1. Архитектура стека
Стек состоит из трёх компонентов:
— **Promtail** — агент, который собирает логи с хостов и отправляет их в Loki.
— **Loki** — сервер хранения и агрегации логов.
— **Grafana** — интерфейс для визуализации и алертинга.
## 2. Установка через Docker Compose
Создайте файл `docker-compose.yml`:
yaml
version: ‘3’
services:
loki:
image: grafana/loki:2.9.0
ports:
— «3100:3100»
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:2.9.0
volumes:
— /var/log:/var/log
— ./promtail-config.yaml:/etc/promtail/config.yml
command: -config.file=/etc/promtail/config.yml
grafana:
image: grafana/grafana:latest
ports:
— «3000:3000″
Запустите: `docker-compose up -d`
## 3. Настройка Promtail
Создайте `promtail-config.yaml`:
yaml
server:
http_listen_port: 9080
positions:
filename: /tmp/positions.yaml
clients:
— url: http://loki:3100/loki/api/v1/push
scrape_configs:
— job_name: app-logs
static_configs:
— targets:
— localhost
labels:
job: myapp
__path__: /var/log/myapp/*.log
Promtail будет отслеживать файлы логов и отправлять их в Loki с меткой `job=myapp`.
## 4. Подключение Loki к Grafana
1. Откройте Grafana по адресу `http://localhost:3000` (логин/пароль: admin/admin).
2. Перейдите в **Configuration → Data Sources → Add data source**.
3. Выберите **Loki**.
4. Укажите URL: `http://loki:3100`.
5. Нажмите **Save & Test**.
## 5. Просмотр логов в реальном времени
Перейдите в раздел **Explore**, выберите источник данных Loki и введите запрос на языке LogQL:
logql
{job=»myapp»} |= «ERROR»
Это покажет все строки логов с меткой `myapp`, содержащие слово ERROR. Для просмотра в реальном времени включите режим **Live** в правом верхнем углу.
## 6. Создание дашборда
Добавьте панели на дашборд:
— **Logs panel** — отображает поток логов.
— **Time series** — количество ошибок за период: `count_over_time({job=»myapp»} |= «ERROR» [5m])`.
## 7. Настройка алертов
В Grafana 9+ можно создать Alert Rule прямо на основе LogQL-запроса. Укажите условие, например, если количество ошибок за минуту превышает 10 — отправить уведомление в Slack или Telegram через Contact Points.
## Итог
С помощью Loki и Grafana вы получаете полноценную систему мониторинга логов с минимальными ресурсными затратами, удобным поиском по меткам и мощными возможностями визуализации.
