Ротация логов — logrotate. В Ubuntu, да и во всех Linux, сама система, сервисы и программы все значимые события записывают в файлы журналов или лог-файлы, которые используются для диагностики ошибок, определения причины сбоев, получения статистики, а иногда и для работы других программ или сервисов. Обычно файлы логов хранятся в директории /var/log.
Включение или отключение функции ведения логов, перечень событий, которые должны записываться в логи, названия лог-файлов и другая информация обычно задается в конфигурационных файлах сервиса или программы.
Некоторые сервисы и программы записывают в лог-файлы достаточно много информации и они распухают на глазах. Для ограничения бесконтрольного роста лог-файлов существует специальный сервис — logrotate, который осуществляет ротацию логов через заданный отрезок времени и удаляет ставшие ненужными старые файлы.
Основная функция logrotate заключается в периодической замене старых логов новыми. Logrotate может быть настроен на ежедневную, еженедельную или ежемесячную ротацию. Кроме того, можно задать размер файла, по достижении которого файл будет ротирован. В зависимости от настроек архив логов может храниться как в сжатом, так и в несжатом виде. Обычно logrotate выполняется в качестве каждодневного задания (cron).
Базовые настройки logrotate хранятся в конфигурационном файле /etc/logrotate.conf. По умолчанию, в Ubuntu 14.04 он выглядит так:
# see "man logrotate" for details # rotate log files weekly weekly # use the syslog group by default, since this is the owning group # of /var/log/syslog. su root syslog # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # uncomment this if you want your log files compressed # compress # packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } /var/log/btmp { missingok monthly create 0660 root utmp rotate 1 } # system-specific logs may be configured here
Обычно устанавливаемые пакеты записывают информацию о ротации своих логов (каким образом Logrotate будет работать с тем или иным лог файлом) в директорию /etc/logrotate.d, но далеко не все и не всегда оптимальную. Иногда получается бесконтрольный рост лог-файлов, который приводит к неприятным последствиям. Особенно это важно при работе с vds/vps с небольшим объемом дисковой памяти.
Например утилита fail2ban при установке формирует конфигурационный файл /etc/logrotate.d/fail2ban с содержимым:
/var/log/fail2ban.log { weekly # ротация раз в неделю. Возможные варианты daily, weekly, monthly, size (например size=1M) rotate 4 # сохраняется последние 4 ротированных файла compress # сжимать ротируемый файл delaycompress # сжимать предыдущий файл при следующей ротации missingok # отсутствие файла не является ошибкой postrotate # скрипт будет выполнен сразу после ротации fail2ban-client set logtarget /var/log/fail2ban.log >/dev/null endscript # If fail2ban runs as non-root it still needs to have write access # to logfiles. # create 640 fail2ban adm create 640 root adm # сразу после ротации создать пустой файл с заданными правами и пользователем }
Русскими комментариями раскрыты все основные директивы. Всего допустимых директив в конфигурационном файле очень много (более 40). Подробнее о них можно узнать из man logrotate.
Для немедленного применения изменений можно выполнить:
$ logrotate /etc/logrotate.conf
Для проверки внесенный изменений можно запустить команду (никаких действий с логами не будет выполнено):
$ logrotate -d /etc/logrotate.conf