Одним из основных инструментов в работе администратора хоста являются логи. В любой нештатной ситуации, первым делом лезем в логи и ищем там подсказки. Поэтому важно настроить логирование всех основных сервисов. Но у логирования есть и обратный эффект, чем больше событий фиксируется тем больше места в итоге занимает файл логов.
И даже если дисковое пространство для вашего хоста не проблема, в одном общем файле гораздо трудней искать интересующую вас информацию. Для того чтобы решить проблему хранения и ротирования логов используется программа logrotate. Скорее всего вам даже не придется ее отдельно устанавливать, так как она идет в сборку по умолчанию подавляющего числа Linux дистрибутивов.
Проверим что logrotate присутствует, если по какой-то причине у вас не установлен — установите через пакетный менеджер.
[root@waky ~]# logrotate --version
logrotate 3.18.0
Default mail command: /bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/logrotate.status
ACL support: yes
SELinux support: yes
Откроем основной файл конфигурации в текстовом редакторе:vi /etc/logrotate.conf
# 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 be also be configured here.
weekly — частота ротирования неделя, возможны hourly, daily, weekly, monthly, yearly соответственно
rotate 4 — количество хранимых лог файлов, при 0 — не хранит старые файлы, при -1 — не удаляет
create — создает новый файл при ротации
dateext — добавляет к названию файла дату
compress — архивация старых логов
include /etc/logrotate.d — директория с файлами конфигурации для отдельных сервисов
Раскомментируем строку #compress убрав #, так наши старые файлы логов будут архивироваться при ротации. Сохраняем файл и закрываем.
Директива include задает директорию, где хранятся файлы с настройками logrotate для отдельных программ и сервисов. Эти настройки имеют приоритет над общими настройками, которые мы рассмотрели выше. Это позволяет выставлять индивидуальные значения для каждой переменной. Проверим, для кого у нас уже есть отдельные файлы конфигурации:
[root@waky ~]# ls /etc/logrotate.d/
btmp certbot chrony dnf firewalld httpd kvm_stat mariadb nginx php-fpm rsyslog sssd wtmp
Добавим исполнение logrotate в крон, для регулярной ротации логов. Создадим с помощью текстового редактора новый файл:vi /etc/cron.hourly/logrotate
#!/bin/bash
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited adnormally with [$EXITVALUE]"
fi
exit $EXITVALUE
Добавим разрешение на исполнение данного файла:chmod +x /etc/cron.hourly/logrotate
Теперь логи будут проверяться и меняться с заданной периодичностью.