Logrotate — встроенный инструмент Linux, который автоматически архивирует и удаляет старые логи, освобождая дисковое пространство. Настройка ротации логов предотвращает переполнение диска и организует хранение информации о работе системы. Процесс займёт 15–20 минут и не требует перезагрузки сервера.
Зачем нужна ротация логов
- Логи приложений и системы растут непрерывно и могут занять весь объём диска
- Старые логи (свыше месяца) редко требуются для диагностики текущих проблем
- Без ротации одного файла лога может быть несколько гигабайт, что замедляет чтение и поиск ошибок
- Архивирование (сжатие) логов экономит 70–90 % дискового пространства
- Организованное хранение упрощает соответствие требованиям аудита и compliance
Пошаговая инструкция по настройке logrotate
- Откройте терминал и введите команду
sudo nano /etc/logrotate.confдля редактирования главного конфига logrotate. - Проверьте параметр
rotate— он указывает количество сохраняемых архивов логов (по умолчанию 4 недели). - Установите
rotate 12, если хотите хранить логи за 12 недель; измените значение в зависимости от требований. - Убедитесь, что строка
compressприсутствует — она включает сжатие архивов. - Добавьте строку
delaycompressнижеcompress, чтобы архив сжимался на следующий день после создания. - Проверьте наличие
missingok— эта опция не вызывает ошибку, если лог отсутствует. - Сохраните файл: нажмите
Ctrl+O, затемEnter, потомCtrl+X. - Для отдельного приложения создайте файл конфига:
sudo nano /etc/logrotate.d/myapp. - Вставьте в файл конфиг вида:
/var/log/myapp.log { daily rotate 7 compress delaycompress missingok notifempty } - Сохраните файл (
Ctrl+O→Enter→Ctrl+X). - Протестируйте конфиг командой
sudo logrotate -d /etc/logrotate.conf(режим отладки, без фактического выполнения). - Выполните ротацию вручную:
sudo logrotate -f /etc/logrotate.conf(флаг-fфорсирует выполнение). - Проверьте результат в папке лога:
ls -lah /var/log/myapp*— вы должны увидеть архивные файлы.gz. - Убедитесь, что cron-задача logrotate запущена:
sudo systemctl status cron(для Debian/Ubuntu) илиcrond(для CentOS). - Проверьте расписание ротации в файле
/etc/cron.daily/logrotate— по умолчанию ротация выполняется ежедневно.
Часто задаваемые вопросы
Как изменить частоту ротации логов с daily на weekly? Замените строку daily на weekly в конфиге /etc/logrotate.d/myapp и выполните sudo logrotate -f /etc/logrotate.conf.
Почему логи не сжимаются в .gz файлы? Убедитесь, что строка compress присутствует в конфиге и не закомментирована (не начинается с #); проверьте прав доступа папки лога командой ls -ld /var/log/.
Как удалить все архивные логи старше 30 дней? Установите rotate 5 и daily, что сохранит логи только за последние 5 дней; используйте maxage 30 для явного удаления файлов старше 30 дней.