Skip to content

📄 Использование 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

Шаги:

  1. Установите и запустите Grafana
  2. Перейдите в Web UI: http://localhost:3000
  3. Добавьте новый datasource:
  4. Type: Loki
  5. URL: http://<your-loki-host>:3100
  6. Перейдите в Explore → Выберите источник Loki
  7. Пишите запросы, например:
{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

9. Полезные ссылки