НейроАгент

Настройка автоудаления логов в Grafana Loki с файловой системой в Docker

Полное руководство по правильной настройке автоматического удаления старых логов в Grafana Loki с файловой системой хранения в Docker. Решение проблем с retention_period и compactor.

Вопрос

Как настроить автоматическое удаление логов в Grafana Loki с файловой системой хранения в Docker?

Я пробовал различные опции из официальной документации Grafana Loki (retention., delete..), но они не работают. Подскажите, как правильно включить авто-удаление старых логов в моей конфигурации:

loki-config.yaml:
auth_enabled: false

server:
http_listen_port: 3100
grpc_listen_port: 9096
log_level: debug
grpc_server_max_concurrent_streams: 1000

common:
instance_addr: 127.0.0.1
path_prefix: /tmp/loki
storage:
filesystem:
chunks_directory: /tmp/loki/chunks
rules_directory: /tmp/loki/rules
replication_factor: 1
ring:
kvstore:
store: inmemory

query_range:
parallelise_shardable_queries: true
align_queries_with_step: true
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100

limits_config:
metric_aggregation_enabled: true
reject_old_samples: true
reject_old_samples_max_age: 10s
retention_period: 10s

compactor:
working_directory: /loki/compactor
compaction_interval: 10s
retention_enabled: true
retention_delete_delay: 0s
delete_request_store: filesystem
delete_request_cancel_period: 10s
delete_max_interval: 10s

table_manager:
retention_deletes_enabled: true

schema_config:
configs:
- from: 2020-10-24
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h

pattern_ingester:
enabled: true
metric_aggregation:
loki_address: localhost:3100
flush_check_period: 1m

ruler:
alertmanager_url: http://localhost:9093

frontend:
encoding: protobuf

docker-compose.yaml:
services:
loki:
image: grafana/loki
container_name: loki
command: -config.file=/etc/loki/config/loki-config.yaml
volumes:
- ./loki-config.yaml:/etc/loki/config/loki-config.yaml
- ./loki-data:/tmp/loki
ports:
- “3100:3100”

grafana:
image: grafana/grafana
container_name: grafana
ports:
- “3000:3000”
volumes:
- ./grafana-data:/var/lib/grafana
depends_on:
- loki

Как правильно настроить период хранения и авто-удаление логов в Grafana Loki с файловой системой в Docker?

НейроАгент

Проблема с автоматическим удалением логов в Grafana Loki с файловой системой хранения в Docker возникает из-за несоответствия в конфигурации. Вот как правильно настроить авто-удаление старых логов:

Для правильной работы автоудаления логов в Grafana Loki с файловой системой хранения в Docker необходимо выполнить следующие настройки:

yaml
limits_config:
  retention_period: 720h  # Минимум 24 часа (например, 30 дней = 720ч)
  # ... другие настройки

compactor:
  working_directory: /tmp/loki/retention  # Вне chunks_directory
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h  # Задержка перед удалением
  retention_delete_worker_count: 150
  delete_request_store: filesystem  # Важно для файловой системы
  # ... другие настройки

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        period: 24h  # Должен быть кратен retention_period

Основные проблемы в вашей конфигурации:

  1. Неверный период хранения:

    • retention_period: 10s меньше минимально возможных 24 часов
    • Должен быть кратен периоду индексации (24h)
  2. Отсутствие необходимых параметров:

    • Не хватает retention_delete_worker_count
    • retention_delete_delay установлен в 0s (рекомендуется минимум 1-2 часа)
  3. Неправильная структура:

    • delete_request_store указан, но не используется в limits_config
    • working_directory должен быть отдельной директорией, не совпадающей с chunks_directory

Исправленная конфигурация:

yaml
loki-config.yaml:
limits_config:
  retention_period: 720h  # 30 дней
  # ... другие настройки

compactor:
  working_directory: /tmp/loki/retention
  compaction_interval: 10m
  retention_enabled: true
  retention_delete_delay: 2h
  retention_delete_worker_count: 150
  delete_request_store: filesystem
  # ... другие настройки

schema_config:
  configs:
    - from: 2020-10-24
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        period: 24h

Настройка Docker для работы с retention:

yaml
docker-compose.yaml:
services:
  loki:
    image: grafana/loki:latest
    volumes:
      - ./loki-config.yaml:/etc/loki/config/loki-config.yaml
      - loki-data:/tmp/loki
      - loki-retention:/tmp/loki/retention  # Отдельный том для компактора
    # ... другие настройки

volumes:
  loki-data:
  loki-retention:  # Обязательно для retention

Проверка работы:

  1. Убедитесь, что директория retention существует и доступна для записи:
bash
mkdir -p ./loki-data/retention
chmod 755 ./loki-data/retention
  1. Перезапустите контейнер:
bash
docker-compose down && docker-compose up -d
  1. Проверьте логи на наличие ошибок:
bash
docker-compose logs loki
  1. После 24 часов наблюдайте за удалением старых логов через Grafana или Loki CLI

Важные замечания:

  • Минимальный период хранения: 24 часа
  • Кратность периодов: retention_period должен быть кратен index.period
  • Версия Loki: Используйте актуальные версии (v2.8+ или v3.x)
  • Дискретность удаления: Логи удаляются пакетами после компакции

Типичные ошибки:

  1. Отсутствие отдельного тома для retention
  2. Неправильные разрешения на директориях
  3. Слишком маленький retention_delete_delay
  4. Нехватка места для работы компактора

После правильной настройки старые логи будут автоматически удаляться через указанный период хранения. Для мониторинга используйте Grafana с панелями по метрикам Loki (log_entries_total).