Linux как настроить logrotate.

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

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