Если система записывает слишком много файлов логов, то поиск нужной информации может стать довольно проблематичным. В качестве решения этой проблемы можно настроить службу logrotate. Служба logrotate запускается как задача cron один раз в день и проверяет файлы конфигурации на предмет необходимости ротации. В этих файлах конфигурации можно настроить, когда должен быть открыт новый файл лога и, если это произойдет, что именно должно произойти со старым файлом: например, следует ли его сжимать или просто удалить, и если он сжимается, сколько версий старого файла следует сохранить.
Служба logrotate работает с двумя разными типами файлов конфигурации. Основной файл конфигурации — /etc/logrotate.conf. В этом файле определены общие настройки для настройки того, как logrotate должен выполнять свою работу:
eugene@Eugene:~$ cat /etc/logrotate.conf # see "man logrotate" for details # global options do not affect preceding include directives # rotate log files weekly weekly # use the adm group by default, since this is the owning group # of /var/log/. su root adm # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file #dateext # uncomment this if you want your log files compressed #compress # packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may also be configured here. eugene@Eugene:~$
Этот файл конфигурации определяет следующий набор опций:
weekly
: указывает, что файлы лога должны создаваться еженедельно.
rotate 4
: гарантирует сохранение четырех старых версий файла. Если эта опция не используется, старые файлы удаляются.
create
: старый файл сохраняется под новым именем и создается новый файл.
compress
: сжимает старые файлы логов.
include
: добавляет к файлу конфигурации также конфигурацию из определенных файлов и папок. Так, по умолчанию добавляет содержимое каталога
/etc/logrotate.d. В этом каталоге существуют файлы, которые определяют, как обрабатывать некоторые отдельные файлы логов.
Каталог /etc/logrotate.d содержит конфигурацию управления логов, специфичную для различных сервисов. Например:
eugene@Eugene:~$ ls -l /etc/logrotate.d total 68 -rw-r--r-- 1 root root 120 Jul 7 2023 alternatives -rw-r--r-- 1 root root 397 Jul 21 2023 apache2 -rw-r--r-- 1 root root 126 Oct 9 16:45 apport -rw-r--r-- 1 root root 173 Aug 2 2023 apt -rw-r--r-- 1 root root 91 Mar 24 2023 bootlog -rw-r--r-- 1 root root 130 Oct 14 2019 btmp -rw-r--r-- 1 root root 181 Mar 26 2023 cups-daemon -rw-r--r-- 1 root root 112 Jul 7 2023 dpkg -rw-r--r-- 1 root root 94 Aug 18 2022 ppp -rw-r--r-- 1 root root 248 Sep 4 2023 rsyslog -rw-r--r-- 1 root root 132 Sep 10 2020 sane-utils -rw-r--r-- 1 root root 174 May 18 2022 sssd-common -rw-r--r-- 1 root root 209 May 16 2023 ufw -rw-r--r-- 1 root root 145 Oct 14 2019 wtmp eugene@Eugene:~$
Например, посмотрим на файл /etc/logrotate.d/rsyslog, который задает конфигурацию для логов сервиса rsyslog:
/var/log/syslog /var/log/mail.log /var/log/kern.log /var/log/auth.log /var/log/user.log /var/log/cron.log { rotate 4 weekly missingok notifempty compress delaycompress sharedscripts postrotate /usr/lib/rsyslog/rsyslog-rotate endscript }
Здесь мы видим, что правила ротации логов задаются для целого набора файлов. При этом для описания правил применяются как выше рассмотренные опции типа weekly
или rotate 4
,
так и ряд специфических, из которых отмечу основные:
notifempty
: не меняет файл лога, если он пуст.
missingok
: если файл лога не существует, переходит к следующему без генерации сообщения об ошибке.
postrotate
: определяет некоторые команды, которые должны быть выполнены после выполнения logrotate для файла.
endscript
: определяет конец файла конфигурации.
Причем стоит отметить, что можно создавать файлы logrotate для файлов, которые вообще не являются файлами логов, и таким же образом настраивать из ротацию.