Ротация системных логов logrotate в Linux для экономии места

Как настроить ротацию системных логов logrotate в Linux для экономии места

Logrotate — встроенный инструмент Linux, который автоматически архивирует и удаляет старые логи, освобождая дисковое пространство. Настройка ротации логов предотвращает переполнение диска и организует хранение информации о работе системы. Процесс займёт 15–20 минут и не требует перезагрузки сервера.

Зачем нужна ротация логов

  • Логи приложений и системы растут непрерывно и могут занять весь объём диска
  • Старые логи (свыше месяца) редко требуются для диагностики текущих проблем
  • Без ротации одного файла лога может быть несколько гигабайт, что замедляет чтение и поиск ошибок
  • Архивирование (сжатие) логов экономит 70–90 % дискового пространства
  • Организованное хранение упрощает соответствие требованиям аудита и compliance

Пошаговая инструкция по настройке logrotate

  1. Откройте терминал и введите команду sudo nano /etc/logrotate.conf для редактирования главного конфига logrotate.
  2. Проверьте параметр rotate — он указывает количество сохраняемых архивов логов (по умолчанию 4 недели).
  3. Установите rotate 12, если хотите хранить логи за 12 недель; измените значение в зависимости от требований.
  4. Убедитесь, что строка compress присутствует — она включает сжатие архивов.
  5. Добавьте строку delaycompress ниже compress, чтобы архив сжимался на следующий день после создания.
  6. Проверьте наличие missingok — эта опция не вызывает ошибку, если лог отсутствует.
  7. Сохраните файл: нажмите Ctrl+O, затем Enter, потом Ctrl+X.
  8. Для отдельного приложения создайте файл конфига: sudo nano /etc/logrotate.d/myapp.
  9. Вставьте в файл конфиг вида: /var/log/myapp.log { daily rotate 7 compress delaycompress missingok notifempty }
  10. Сохраните файл (Ctrl+OEnterCtrl+X).
  11. Протестируйте конфиг командой sudo logrotate -d /etc/logrotate.conf (режим отладки, без фактического выполнения).
  12. Выполните ротацию вручную: sudo logrotate -f /etc/logrotate.conf (флаг -f форсирует выполнение).
  13. Проверьте результат в папке лога: ls -lah /var/log/myapp* — вы должны увидеть архивные файлы .gz.
  14. Убедитесь, что cron-задача logrotate запущена: sudo systemctl status cron (для Debian/Ubuntu) или crond (для CentOS).
  15. Проверьте расписание ротации в файле /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 дней.

Похожие материалы

В Linux заблокирован менеджер пакетов файл lock
Лог системных ошибок Linux через утилиту journalctl
Ошибка apt-get update при сбое репозиториев в Debian