Сервис logrotate и ротация логов

Последнее обновление: 21.03.2024

Если система записывает слишком много файлов логов, то поиск нужной информации может стать довольно проблематичным. В качестве решения этой проблемы можно настроить службу 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 для файлов, которые вообще не являются файлами логов, и таким же образом настраивать из ротацию.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850