Как настроить автоматическую ротацию логов с помощью logrotate в Linux, чтобы файлы не переполняли системный диск?
Logrotate — стандартный инструмент Linux для автоматической ротации, сжатия и удаления лог-файлов. Он предотвращает переполнение диска, регулярно обрабатывая накопленные журналы.
## Как работает logrotate
Logrotate запускается через cron (обычно ежедневно через `/etc/cron.daily/logrotate`) и читает конфигурационные файлы из `/etc/logrotate.conf` и директории `/etc/logrotate.d/`.
## Основные директивы конфигурации
— **daily / weekly / monthly** — частота ротации
— **rotate N** — количество хранимых архивов (например, `rotate 7` хранит 7 файлов)
— **compress** — сжимать старые логи (gzip)
— **delaycompress** — сжимать не сразу, а при следующей ротации
— **missingok** — не выдавать ошибку, если файл отсутствует
— **notifempty** — не ротировать пустые файлы
— **create 0640 root adm** — создавать новый файл с заданными правами
— **postrotate / endscript** — команды, выполняемые после ротации
— **size 100M** — ротировать при достижении указанного размера
— **maxage 30** — удалять файлы старше 30 дней
## Пример конфигурации для nginx
Создайте файл `/etc/logrotate.d/nginx`:
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}
## Ротация по размеру файла
Если важен не период, а объём:
/var/log/myapp/*.log {
size 50M
rotate 5
compress
missingok
notifempty
}
## Проверка конфигурации
Перед применением проверьте конфигурацию без реального выполнения:
bash
logrotate -d /etc/logrotate.d/nginx
Флаг `-d` запускает режим отладки (dry run).
Принудительный запуск ротации:
bash
logrotate -f /etc/logrotate.conf
## Глобальные настройки
В `/etc/logrotate.conf` задаются параметры по умолчанию для всех конфигураций:
weekly
rotate 4
create
compress
include /etc/logrotate.d
## Советы по предотвращению переполнения диска
1. **Мониторьте диск** командой `df -h` и настройте алерты при заполнении более 80%.
2. **Используйте `maxsize`** совместно с `daily` — ротация произойдёт раньше, если файл вырастет до лимита.
3. **Для высоконагруженных сервисов** устанавливайте `size` вместо временного интервала.
4. **Проверяйте статус** выполнения logrotate в `/var/lib/logrotate/status`.
5. **Разделяйте разделы**: вынесите `/var/log` на отдельный раздел, чтобы переполнение логов не затронуло корневую файловую систему.
Правильно настроенный logrotate полностью автоматизирует управление логами и исключает ситуацию, когда журналы занимают всё свободное место на диске.
