Как управлять файлами журналов с помощью Logrotate в Linux
Настройка и управление ротацией журналов с помощью Logrotate в Linux
Мы уже опубликовали руководство, в котором описано, как настроить централизованный сервер Rsyslog в системе CentOS. Сегодня в этом руководстве мы обсудим что такое Logrotate, как установить Logrotate и как управлять файлами журналов с помощью Logrotate в Linux. .
Что такое Логротат?
Как следует из названия, 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 zypper install logrotate
Скомпилируйте и установите Logrotate из исходного кода.
Убедитесь, что вы установили инструменты разработки в своей системе Linux. Перейдите по следующей ссылке, чтобы узнать, как установить инструменты разработки в различных дистрибутивах Linux.
Как установить инструменты разработки в Linux
Загрузите последнюю версию архива logrotate со страницы релизов. На момент написания этого руководства последней версией была 3.21.0. Давайте загрузим его с помощью программы wget в текущий каталог:
wget https://github.com/logrotate/logrotate/releases/download/3.21.0/logrotate-3.21.0.tar.gz
Давайте распакуем загруженный архив:
tar xvzf logrotate-3.21.0.tar.gz
Содержимое архива будет извлечено в каталог с именем logrotate-3.21.0
. Перейдите в этот каталог:
cd logrotate-3.21.0
Далее выполните следующую команду:
./configure
Если вы столкнулись со следующей ошибкой:
configure: error: libpopt required but not found
Установите libpopt-dev в системах на базе Debian:
sudo apt install libpopt-dev
В системах на базе RPM установите пакет popt-devel.
sudo dnf install popt-devel
Затем повторно запустите команду ./configure
.
./configure
Наконец, установите logrotate с помощью команд:
make
sudo make install
Управление файлами журналов с помощью 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.
В других дистрибутивах Linux вывод может выглядеть немного иначе. Например, файл logrotate.conf
моего старого Arch Linux имеет другое содержимое.
$ cat /etc/logrotate.conf
see "man logrotate" for details
rotate log files weekly
weekly
keep 4 weeks worth of backlogs
rotate 4
restrict maximum size of log files
#size 20M
create new (empty) log files after rotating old ones
create
uncomment this if you want your log files compressed
#compress
Logs are moved into directory for rotation
olddir /var/log/archive
Ignore pacman saved files
tabooext + .pacorig .pacnew .pacsave
Arch packages drop log rotation information into this directory
include /etc/logrotate.d
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
Давайте посмотрим, что делает каждый параметр в приведенном выше файле конфигурации.
- еженедельно — журналы меняются каждую неделю.
- rotate 4 – по умолчанию LogRotate сохраняет файлы журналов за четыре недели (очевидно, за один месяц). Поскольку он чередует все файлы журналов через определенный период времени, вам может потребоваться сохранить резервную копию важных файлов журналов, если вы не хотите их потерять.
- размер 20 МБ — ротирует файлы журналов, если они достигли размера 20 МБ. По умолчанию эта опция отключена. Чтобы включить его, просто раскомментируйте его.
- create — создает новые файлы журналов один раз после ротации старых файлов журналов. Эта опция включена по умолчанию.
- сжать — сжимает файлы журналов. Кроме того, по умолчанию он не сжимает журналы. Если вы хотите сжать журналы, раскомментируйте эту строку.
- /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 ежедневно запускает утилиту 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 --help
Также обратитесь к справочным страницам:
man logrotate
Заключение
Logrotate — простой, но полезный инструмент ротации журналов, упрощающий управление журналами. Вам не нужно усложнять себе сложные этапы настройки и установки. Все говорит само за себя. Если вы управляете системой, которая создает большое количество файлов журналов, вы можете периодически менять журналы с помощью Logrotate на своем сервере Linux.
Ресурс:
- Войти в репозиторий GitHub