Logrotate — это утилита командной строки в Linux и других Unix-подобных операционных системах, которая автоматизирует процесс управления лог-файлами.
Утилита позволяет автоматически ротировать, сжимать, удалять, и пересылать журналы. Каждый файл журнала может обрабатываться ежедневно, еженедельно, ежемесячно или при достижении определённого размера.
Поскольку размер журналов постоянно растет, правильно настроенная Logrotate гарантирует, что ваши лог-файлы не займут слишком много места на диске и не помешают нормальной работе системы. В итоге мы экономим дисковое пространство, удаляя или архивируя старые лог-файлы тем самым предотвращая их накопление и переполнения диска.
Установка пакета производится следующей командой:
# RedHat-based Linux distributions
sudo yum install logrotate
# Ubuntu-based Linux distributions
sudo apt install logrotate
Если при запуске logrotate в командной строке не указать аргументы, будет отображена версия, информация об авторских правах и короткая справка по использованию.
ubuntu@host:~$ logrotate
logrotate 3.14.0 - Copyright (C) 1995-2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU General Public License
Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command] [-s|--state=statefile] [-v|--verbose] [-l|--log=logfile] [--version] [-?|--help] [--usage]
[OPTION...] <configfile>
Все основные параметры утилиты находятся в файле /etc/logrotate.conf.
Также поддерживается подключение дополнительных конфигурационных файлов, размещённых в каталоге /etc/logroate.d/, для этого в основном файле /etc/logrotate.conf должна присутствовать строка:
include /etc/logrotate.d
Таким образом, для создания нового задания ротации достаточно создать конфигурационный файл и поместить его в каталог /etc/logroate.d/.
Файлы конфигурации содержат правила для управления лог-файлами.
Пример:
/var/log/apache2/access.log {
rotate 5
size 100M
compress
delaycompress
notifempty
missingok
copytruncate
postrotate
systemctl reload apache2 > /dev/null 2>&1
endscript
}
где:
/var/log/apache2/access.log
— указание на имя или шаблон имени лог-файлов, которые необходимо обрабатывать;rotate 5
— количество хранимых архивов;size 100M
— максимальный размер файла, при превышении которого журнал будет ротирован;compress
— опция сжатия файлов. По умолчанию для сжатия используется gzip;delaycompress
— параметр указывает на сжатие только после ротации;notifempty
— указание на то, что уведомления не будут отправляться, если файл пуст;missingok
— игнорирование, если файл отсутствует;postrotate
— перезагрузка Apache после ротации;copytruncate
— предписание при ротации создать копию журнала, а затем его обнулить. Таким образом, сам файл журнала не удаляется.После настройки какого-либо файла конфигурации проверьте его корректность. Для этого запустите утилиту logrotate с параметром -d, она выведет всё, что планируется сделать, но не будет изменять файлы на диске.
logrotate -d /etc/logrotate.d/bootlog
По умолчанию logrotate запускается автоматически ежедневно через систему cron. Она проверяет условия ротации для каждого файла журнала — например, наступил ли срок daily или достигнут ли заданный размер size 100M. Если условия выполнены, logrotate создаёт новый лог-файл, а старый архивирует, сжимает или удаляет — в зависимости от настроек.
Иногда требуется запустить ротацию вручную — например, чтобы протестировать новую конфигурацию или освободить место на диске. Для этого используется команда:
logrotate -f <путь_к_конфигурационному_файлу>
Пример:
logrotate -f /etc/logrotate.conf
Опция -f (--force) заставляет logrotate выполнить ротацию всех логов, указанных в конфигурации, даже если условия ротации ещё не выполнены (например, файл не достиг нужного размера или не прошёл день с последней ротации).
Полезные параметры запуска:
По умолчанию, logrotate запускается раз в сутки, задание на запуск создается в файле /etc/cron.daily/logrotate. Если необходимо запускать logrotate каждый час, можно сделать символическую ссылку:
ln -s /etc/cron.daily/logrotate /etc/cron.hourly/logrotate
Для более частой проверки, добавьте задание в cron с нужным интервалом запуска. Например, для запуска ротации раз в 5 минут:
*/5 * * * * /etc/cron.daily/logrotate
Запуск ротации раз в 5 минут, с указанием файла конфигурации:
*/5 * * * * /usr/sbin/logrotate -f /etc/logrotate.conf
Пример конфигурационного файла /etc/logrotate.d/dion для ротации журналов DION:
/var/log/dion/*.log { # Указывает, что правило будет применяться ко всем файлам с расширением .log в директории /var/log/dion/.
size 1G # Ротация при достижении 1 ГБ
daily # Пытаться выполнять ротацию каждый день (но size имеет приоритет)
missingok # Не выдавать ошибку, если файл лога отсутствует
compress # Сжимать старые логи
delaycompress # Отложить сжатие до следующей ротации (чтобы .1 оставался несжатым)
rotate 5 # Хранить 5 архивных копий логов
copytruncate # Копировать файл и затем очищать оригинал (без переоткрытия)
maxage 14 # Удалять архивы старше 14 дней
}
Параметры ротации настраиваются в соответствии с требованиями к журналированию событий в вашей организации.
Для получения дополнительной информации о программе обратитесь к man-страницам.
man logrotate