Перейти к содержимому

Ротация логов: logrotate

Чтобы логи приложения не заполнили диск: правило logrotate, сжатие и проверка без ожидания.

Уровень
Средний
Время чтения
2 мин чтения
Обновлено
Проверено на
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Содержание
  1. Как он запускается
  2. Правило для своего приложения
  3. Проверьте результат
  4. Частые ошибки

logrotate по расписанию переименовывает текущий лог, сжимает старые и удаляет самые давние. Для системных пакетов (nginx, apt, базы данных) правила уже есть в /etc/logrotate.d. Для своего приложения правило нужно написать самим.

Как он запускается

В Ubuntu и Debian 12 logrotate запускается раз в сутки таймером systemd:

bash
$ systemctl list-timers logrotate.timer

Правило для своего приложения

/etc/logrotate.d/myapp
/var/log/myapp/*.log {    daily    rotate 14    compress    delaycompress    missingok    notifempty    create 0640 deploy deploy    sharedscripts    postrotate        systemctl reload myapp >/dev/null 2>&1 || true    endscript}
  • daily и rotate 14 — ротация раз в день, хранить 14 архивов.
  • compress и delaycompress — сжимать архивы, но последний оставить несжатым: приложение может ещё дописывать в него.
  • missingok и notifempty — не ругаться на отсутствующий файл и не ротировать пустой.
  • create — создать новый файл с указанными правами и владельцем.
  • postrotate — команда, чтобы приложение открыло новый файл. Если приложение этого не умеет, уберите блок и добавьте copytruncate.

Проверьте результат

Режим отладки покажет, что сделал бы logrotate, ничего не меняя. Флаг -f выполнит ротацию сразу:

bash
$ logrotate -d /etc/logrotate.d/myapp$ logrotate -f /etc/logrotate.d/myapp$ ls -lh /var/log/myapp/

Частые ошибки

  • «because parent directory has insecure permissions» — каталог с логами доступен на запись группе или всем. Добавьте в правило строку su deploy deploy или исправьте права каталога.
  • После ротации лог пустой, а приложение пишет в архив — не настроен postrotate и нет copytruncate.
  • Логи Docker-контейнеров logrotate не касаются: для них задают max-size в настройках драйвера логов.

Дочитайте до конца — статья засчитается в обучении автоматически.

  • логи
  • logrotate
  • ротация
  • диск
  • журналы

Статья помогла?