Как правильно настроить авто-удаление логов в Grafana/Loki?
Я пытаюсь включить авто-удаление в Grafana/Loki, но опции, указанные в официальной документации (retention., delete..), не работают. Моя система развернута с использованием Docker, и хранилище настроено как filesystem.
Вот моя текущая конфигурация:
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
Как правильно настроить параметры авто-удаления, чтобы старые логи автоматически удалялись? Какие настройки в конфигурации необходимо изменить или добавить?
Ваша конфигурация содержит несколько ключевых ошибок, которые предотвращают работу авто-удаления логов в Loki с filesystem хранилищем. Основные проблемы связаны с неправильным использованием table_manager (устаревший компонент), недостаточными настройками retention и некорректной конфигурацией compactor.
Содержание
- Основные проблемы в текущей конфигурации
- Правильная конфигурация для filesystem хранения
- Обязательные параметры для авто-удаления
- Пошаговая настройка
- Проверка работы авто-удаления
- Типичные ошибки и решения
Основные проблемы в текущей конфигурации
Ваша текущая конфигурация содержит несколько критических ошибок:
-
Использование table_manager - этот компонент устарел и больше не рекомендуется для управления retention. Согласно документации Loki, table_manager был заменен на compactor.
-
Слишком короткие интервалы - вы установили retention_period: 10s и compaction_interval: 10s, что не дает системе достаточно времени для обработки данных.
-
Неправильная структура schema_config - для работы с retention необходимо использовать tsdb или boltdb-shipper storage engine.
Правильная конфигурация для filesystem хранения
Для правильной работы авто-удаления с filesystem хранилищем необходимо следующее:
schema_config:
configs:
- from: 2020-10-24
store: tsdb
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
limits_config:
retention_period: 168h # 7 дней, должно быть в часах
# ... другие настройки
compactor:
working_directory: /tmp/loki/compactor
compaction_interval: 1h
retention_enabled: true
retention_delete_delay: 2h
delete_request_store: filesystem
retention_delete_worker_count: 150
Обязательные параметры для авто-удаления
Для включения авто-удаления в Loki с filesystem хранилищем необходимы следующие параметры:
В секции limits_config:
retention_period: период хранения в часах (например, 168h для 7 дней)- Этот параметр определяет, как долго логи должны храниться перед удалением
В секции compactor:
retention_enabled: true- включает функцию удаления старых логовdelete_request_store: filesystem- указывает, где хранить запросы на удалениеworking_directory- рабочий каталог для компактораcompaction_interval- интервал компакции (должен быть больше retention_period)retention_delete_delay- задержка перед удалением (рекомендуется 2 часа)
В секции schema_config:
store: tsdbилиstore: boltdb-shipper- обязательные storage engines для работы retentionobject_store: filesystem- указывает на использование файловой системы
Пошаговая настройка
1. Удалите table_manager
Удалите полностью секцию table_manager, так как этот компонент устарел:
# УДАЛИТЕ ЭТУ СЕКЦИЮ
table_manager:
retention_deletes_enabled: true
retention_period: 740h
2. Настройте limits_config
Измените retention_period на разумное значение в часах:
limits_config:
retention_period: 168h # 7 дней
# ... другие настройки
3. Корректно настройте compactor
Добавьте все необходимые параметры для compactor:
compactor:
working_directory: /tmp/loki/compactor
compaction_interval: 1h
retention_enabled: true
retention_delete_delay: 2h
delete_request_store: filesystem
retention_delete_worker_count: 150
4. Проверьте schema_config
Убедитесь, что используется правильный storage engine:
schema_config:
configs:
- from: 2020-10-24
store: tsdb # или boltdb-shipper
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
5. Обновите docker-compose
Убедитесь, что все необходимые директории смонтированы:
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
- ./loki-compactor:/tmp/loki/compactor # Добавьте эту строку
ports:
- "3100:3100"
Проверка работы авто-удаления
После применения правильной конфигурации можно проверить работу авто-удаления:
-
Проверьте логи компактора:
bashdocker logs loki | grep -i "compactor\|retention\|delete" -
Проверьте директорию компактора:
bashls -la /tmp/loki/compactor/ -
Проверьте директорию чанков:
bashls -la /tmp/loki/chunks/ -
Используйте Loki API для проверки:
bashcurl "http://localhost:3100/loki/api/v1/status/buildinfo"
Типичные ошибки и решения
Ошибка 1: Компактор не запускается
Проблема: Компактор не запускается из-за отсутствия необходимых директорий.
Решение: Убедитесь, что директория для working_directory существует и имеет правильные права:
mkdir -p /tmp/loki/compactor
chmod 755 /tmp/loki/compactor
Ошибка 2: Данные не удаляются
Проблема: Логи не удаляются несмотря на правильную конфигурацию.
Причина: Как указано в ответе на StackOverflow, Loki не будет удалять старые чанки хранилища. Вместо этого настройте TTLs в хранилище chunk store (для S3/GCS) или используйте lifecycle policies.
Ошибка 3: Слишком короткие интервалы
Проблема: compaction_interval слишком короткий.
Решение: Увеличьте compaction_interval до разумного значения (1-24 часа) и убедитесь, что он больше retention_period.
Ошибка 4: Неправильный storage engine
Проблема: Использование неподдерживаемого storage engine.
Решение: Убедитесь, что в schema_config используется store: tsdb или store: boltdb-shipper.
Источники
- Log retention | Grafana Loki documentation
- Log entry deletion | Grafana Loki documentation
- Why my Loki log retention is not working? - Stack Overflow
- Enabling Log Retention in Loki with Compactor
- Managing Grafana Loki Log Retention and Deletion Delay in Docker
Заключение
Для правильной настройки авто-удаления логов в Loki с filesystem хранилищем необходимо:
- Использовать tsdb или boltdb-shipper storage engine в schema_config
- Настроить compactor с параметрами retention_enabled: true и правильными путями
- Удалить устаревший table_manager
- Установить разумные значения retention_period в часах
- Настроить compaction_interval больше, чем retention_period
- Обеспечить доступ к рабочим директориям с правильными правами
После внесения этих изменений система начнет автоматически удалять старые логи в соответствии с указанным retention period.