Как настроить автоматическое удаление логов в 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 необходимо выполнить следующие настройки:
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
Основные проблемы в вашей конфигурации:
-
Неверный период хранения:
retention_period: 10sменьше минимально возможных 24 часов- Должен быть кратен периоду индексации (24h)
-
Отсутствие необходимых параметров:
- Не хватает
retention_delete_worker_count retention_delete_delayустановлен в 0s (рекомендуется минимум 1-2 часа)
- Не хватает
-
Неправильная структура:
delete_request_storeуказан, но не используется вlimits_configworking_directoryдолжен быть отдельной директорией, не совпадающей с chunks_directory
Исправленная конфигурация:
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:
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
Проверка работы:
- Убедитесь, что директория retention существует и доступна для записи:
mkdir -p ./loki-data/retention
chmod 755 ./loki-data/retention
- Перезапустите контейнер:
docker-compose down && docker-compose up -d
- Проверьте логи на наличие ошибок:
docker-compose logs loki
- После 24 часов наблюдайте за удалением старых логов через Grafana или Loki CLI
Важные замечания:
- Минимальный период хранения: 24 часа
- Кратность периодов:
retention_periodдолжен быть кратенindex.period - Версия Loki: Используйте актуальные версии (v2.8+ или v3.x)
- Дискретность удаления: Логи удаляются пакетами после компакции
Типичные ошибки:
- Отсутствие отдельного тома для retention
- Неправильные разрешения на директориях
- Слишком маленький
retention_delete_delay - Нехватка места для работы компактора
После правильной настройки старые логи будут автоматически удаляться через указанный период хранения. Для мониторинга используйте Grafana с панелями по метрикам Loki (log_entries_total).