📄 Использование Grafana Loki
1. Описание сервиса
Loki — это горизонтально масштабируемая, многопользовательская система логирования с низкими требованиями к ресурсам. В отличие от других решений (например, ELK), Loki не индексирует сами логи, а только метаданные (labels), что делает его очень эффективным в использовании памяти и дискового пространства.
Основные компоненты:
- Promtail — агент для сбора логов и отправки их в Loki
- Loki — сервер, который хранит и обрабатывает логи
- Grafana — интерфейс для просмотра и анализа логов
2. Установка Loki
2.1. Установка через Docker (простой способ)
Создайте docker-compose.yml
:
version: '3'
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.expand-env
environment:
- LOKI_ADDR=:3100
volumes:
- ./config/loki-local-config.yaml:/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:latest
volumes:
- ./config:/etc/promtail
- /var/log:/var/log
command: -config.expand-env
ports:
- "1514:1514"
networks:
- loki
networks:
loki:
Конфигурационный файл ./config/loki-local-config.yaml
:
auth_enabled: false
server:
http_listen_port: 3100
storage_config:
boltdb_shipper:
active_index_directory: /loki/index
cache_location: /loki/cache
cache_retention_seconds: 3600
shared_store: filesystem
schema_config:
configs:
- from: 2023-01-01
store: boltdb-shipper
object_store_id: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
Конфигурация Promtail (./config/promtail-config.yaml
):
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
Запуск:
docker-compose up -d
После этого Loki будет доступен на порту 3100
, а Grafana можно подключить отдельно.
3. Интеграция с Grafana
Шаги:
- Установите и запустите Grafana
- Перейдите в Web UI: http://localhost:3000
- Добавьте новый datasource:
- Type: Loki
- URL:
http://<your-loki-host>:3100
- Перейдите в Explore → Выберите источник Loki
- Пишите запросы, например:
{job="varlogs"} |~ "ERROR"
4. Язык запросов LogQL
LogQL — это язык запросов Loki, похожий на PromQL.
Примеры:
Фильтрация по метке:
{job="varlogs"}
Поиск по содержимому:
{job="varlogs"} |~ "ERROR"
Исключение:
{job="varlogs"} != "DEBUG"
С ограничением времени:
{job="varlogs"} [5m]
Агрегация:
count_over_time({job="varlogs"} [1h])
Комбинирование:
{job="varlogs"} |~ "error" | json | status = 500
5. Расширенная настройка
5.1. Метки (Labels)
Loki использует метки (key=value) для группировки логов. Пример:
scrape_configs:
- job_name: app_logs
static_configs:
- targets: [localhost]
labels:
job: backend
env: production
__path__: /var/log/backend/*.log
5.2. Парсинг JSON-логов
Если у вас JSON-логи, вы можете использовать:
{job="backend"} | json | field > 100
или:
{job="backend"} | json | method = "POST" and status >= 400
6. Работа с Kubernetes
Для Kubernetes рекомендуется использовать Helm чарт:
helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack --set promtail.enabled=true
Это установит Loki + Promtail как DaemonSet, собирающий логи со всех нод.
7. Безопасность
- Используйте HTTPS и Basic Auth при необходимости
- Настройте RBAC (в enterprise версии или с внешним reverse proxy)
- Изолируйте Loki от публичного доступа
8. Хранение данных
Loki может хранить данные: - Локально - В S3 / GCS / Azure Blob Storage - Через Thanos (для долгосрочного хранения)
Пример конфигурации для S3:
storage_config:
aws:
s3: s3://access_key:secret@region/bucket-name