Как управлять файлами журнала с помощью Logrotate в Linux

Обсудим что такое Logrotate, как установить Logrotate и как управлять файлами журнала с помощью Logrotate в Linux.

Что такое Logrotate?

Как следует из названия, Logrotate полностью удаляет журналы из вашей системы через регулярные промежутки времени. Он также позволяет автоматически перезаписывать, сжимать, удалять и рассылать файлы журналов.

Утилита logrotate обрабатывает каждый файл журнала ежечасно, ежедневно, еженедельно, ежемесячно, или когда он становится слишком большим или файл журнала достигает определенного размера.

Эта утилита logrotate упрощает администрирование файлов журнала, и особенно полезна для систем, которые ежедневно пополняются большим объемом данных.

Установка Logrotate в Linux

Logrotate доступен в стандартных репозиториях большинства дистрибутивов Linux.

Для установки logrotate в Alpine Linux, выполните:

sudo apk add logrotate

Для установки logrotate в Arch Linux и его разновидностях, таких как EndeavourOS и Manjaro Linux, выполните следующую команду:

sudo pacman -S logrotate

Для установки logrotate в системах на базе RPM, таких как Fedora, RHEL, CentOS, CentOS Stream, AlmaLinux и Rocky Linux, выполните:

sudo dnf install logrotate

На старых системах RHEL, CentOS используйте yum вместо dnf для установки logrotate.

sudo yum install logrotate

Для установки logrotate в Debian, Ubuntu и производных Ubuntu, таких как Elementary OS, Linux Mint и Pop!_OS, выполните следующую команду:

sudo apt install logrotate

Для установки logrotate в системах SUSE и openSUSE используйте следующую команду:

sudo znf install logrotate

Управление файлами журнала с помощью Logrotate

Главный конфигурационный файл LogRotate – /etc/logrotate.conf.

Здесь показано содержимое этого файла по умолчанию в моей системе Fedora Linux.

# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# 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.

Давайте посмотрим, что делает каждая опция в приведенном выше конфигурационном файле.

  • weekly – Дополняет и удаляет старые данные в журналыах каждую неделю.
  • rotate 4 – По умолчанию LogRotate хранит журналы за четыре недели. Так как он ротирует все файлы журнала через определенный период времени, вам может понадобиться сохранить резервные копии важных файлов журнала, если вы не хотите их потерять.
  • size 20M – Ротирует файлы журнала, если их размер достиг 20 Мб. По умолчанию эта опция отключена. Чтобы включить ее, просто откомментируйте ее.
  • create – Создает новые файлы журналов после ротации старых. Эта опция включена по умолчанию.
  • compress – Сжимает файлы журнала. По умолчанию журналы не сжимаются. Если вы хотите сжать журналы, откомментируйте эту строку.
  • /etc/logrotate.d/ – Этот каталог содержит файлы правил ведения журналов, специфичных для конкретного приложения.
  • missing ok – Если файл журнала отсутствует, Logrotate перейдет к следующему, не выдавая сообщения об ошибке.

Logrotate сегментирует файлы журналов и сжимает их на основе правил, заданных в каталоге /etc/logrotate.d/.

Посмотрим на содержимое этого каталога.

ls /etc/logrotate.d/

Пример вывода:

bootlog  chrony  firewalld  httpd libvirtd numad  psacct  sssd wtmp
btmp dnf glusterfs  iscsiuiolog  libvirtd.qemu  ppp samba wpa_supplicant

Как видно из приведенного выше вывода, он содержит различные файлы правил для всех журналов, управляемых Logrotate.

Чтобы просмотреть правило журнала конкретного приложения, например, samba, выполните:

cat /etc/logrotate.d/samba
/var/log/samba/log.smbd /var/log/samba/log.nmbd /var/log/samba/*.log {
notifempty
missingok
sharedscripts
copytruncate
postrotate
/bin/kill -HUP "cat /var/run/samba/*.pid 2>/dev/null" 2>/dev/null || true
endscript
}

Здесь,

  • notifempty – Указывает, что файлы журнала не будут ротироваться, если они пусты.
  • copytruncate – Усечение оригинального файла журнала на месте после создания копии.
  • sharedscript – Сценарии запускаются только один раз, независимо от того, сколько журналов соответствует шаблону.
  • postrotate/endscript – Строки между postrotate и endscript выполняются после поворота файла журнала.

Вы также можете создать свои собственные файлы правил журнала в директории /etc/logrotate.d/ и определить свои собственные правила.

Конфигурация Cron

Cron ежедневно запускает утилиту logroate в поисках файлов журналов для ротации. Вы можете указать правила автоматической ротации журналов в файле /etc/cron.daily/logrotate, чтобы избежать ручного вмешательства пользователя.

cat /etc/cron.daily/logrotate 
#!/bin/sh
# skip in favour of systemd timer
if [ -d /run/systemd/system ]; then exit 0
fi
# this cronjob persists removals (but not purges)
if [ ! -x /usr/sbin/logrotate ]; then exit 0
fi
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

Он будет выполнять ротацию журналов каждый день в определенное время.

Проверка состояния Logrotate

Чтобы проверить, ротируется ли файлы журналов или нет, проверьте logrotate.status файл:

sudo cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/glusterfs/snaps/*/*.log" 2022-11-29-14:0:0
"/var/log/firewalld" 2022-11-29-14:0:0
"/var/log/boot.log" 2023-4-7-16:10:29
"/var/log/hawkey.log" 2023-4-7-16:10:29
"/var/log/glusterfs/*.log" 2022-11-29-14:0:0
"/var/log/httpd/*log" 2022-11-29-14:0:0
"/var/log/chrony/*.log" 2022-11-29-14:0:0
"/var/log/wtmp" 2022-11-29-14:0:0
"/var/log/btmp" 2023-4-7-16:10:29
"/var/log/glusterfs/samples/*.samp" 2022-11-29-14:0:0
"/var/log/iscsiuio.log" 2022-11-29-14:0:0
"/var/log/libvirt/libvirtd.log" 2022-11-29-14:0:0
"/var/log/libvirt/qemu/*.log" 2022-11-29-14:0:0
"/var/log/sssd/sssd_kcm.log" 2023-4-7-16:10:29
"/var/log/wpa_supplicant.log" 2022-11-29-14:0:0
"/var/log/glusterfs/bricks/*.log" 2022-11-29-14:0:0
"/var/log/numad.log" 2022-11-29-14:0:0
"/var/log/ppp/connect-errors" 2022-11-29-14:0:0
"/var/log/samba/log.*" 2022-11-29-14:0:0
"/var/account/pacct" 2022-11-29-14:0:0

В некоторых старых дистрибутивах Linux расположение этого файла может быть другим.

cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/samba/log.smbd" 2022-5-12-11:0:0
"/var/log/lircd" 2022-6-15-10:0:0
"/var/log/httpd/*log" 2022-5-12-11:0:0
"/var/log/wtmp" 2022-5-6-10:0:0
"/var/log/samba/*.log" 2022-5-12-11:0:0
"/var/log/btmp" 2023-4-1-11:36:53
"/var/log/samba/log.nmbd" 2023-4-1-11:0:0

Заключение

Logrotate – это простой, но полезный инструмент ротации логов, который упрощает управление логами. Вам не нужно усложнять себе жизнь сложными шагами по настройке и установке. Все просто и понятно. Если вы управляете системой, которая производит большое количество файлов журналов, вы можете периодически ротировать журналы с помощью Logrotate на вашем Linux сервере.

Зарубин Иван Эксперт по Linux и Windows

Парашютист со стажем. Много читаю и слушаю подкасты. Люблю посиделки у костра, песни под гитару и приближающиеся дедлайны. Люблю путешествовать.

Вдохновлен ostechnix.com

Похожие статьи

Комментарии (0)