У меня есть CentOS, на котором запущены rsyslog и logrotate в качестве моего сервера syslog для целой группы сетевых устройств. Я некоторое время играл с этим, часть logrotate / сжатия работает нормально, но я не могу заставить ее удалить старые сжатые журналы .gz. Вот базовая настройка:
Журналы хранятся в: / var / log / syslog, и каждый хост создает новую подпапку на основе своего IP-адреса или имени хоста. У меня есть два конкретных хоста, которые действительно болтливы, поэтому у меня есть особые правила для их усечения после 5 ГБ. Идея состоит в том, чтобы сжимать и запускать новый журнал каждый день и хранить журналы за 60 дней.
Вот мои конфигурации (большинство из них были созданы не мной, но я сохранил и изменил некоторые из них):
кошка /etc/cron.hourly/logrotate
#!/bin/sh`enter code here`
/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
кот /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
compress
daily
#delaycompress
dateext
missingok
rotate 60
maxage 60
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
кот /etc/logrotate.conf
/var/log/syslog/*/*.log {
daily
rotate 60
maxage 60
compress
}
daily
rotate 60
create
dateext
compress
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
}
# system-specific logs may be also be configured here.
# Specific rule for HOST_A
/var/log/syslog/HOST_A/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}
# Specific rule for HOST_B
/var/log/syslog/HOST_B/*.log {
daily
size 5G
rotate 30
maxage 30
compress
}
А вот пример того, что у меня есть в папке \ var \ log \ syslog \ host_a:
ls / var / log / syslog / HOST_A / | wc -l
104
лс / вар / журнал / системный журнал / HOST_A / -lh
-rw------- 1 root root 416M Jun 20 23:59 HOST_A_2018_06_20.log.1.gz
-rw------- 1 root root 64M Jun 20 16:18 HOST_A_2018_06_20.log.2.gz
-rw------- 1 root root 1.5G Jun 21 23:59 HOST_A_2018_06_21.log.1.gz
<many files redacted>
-rw------- 1 root root 1.6G Sep 4 23:59 HOST_A_2018_09_04.log.1.gz
-rw------- 1 root root 1.5G Sep 5 23:59 HOST_A_2018_09_05.log.1.gz
-rw------- 1 root root 7.7G Sep 6 10:58 HOST_A_2018_09_06.log
Итак, как вы видите выше, старые архивные журналы .gz не удаляются через 60 дней. Это держит их на неопределенный срок. Мне приходилось периодически заходить и вручную удалять старые файлы, чтобы уменьшить размер. Эти файлы идут с 20 июня по 6 сентября (сегодня), что составляет 104 дня. Я уверен, что он неправильно настроен, но не совсем уверен, что мне не хватает. Любая помощь будет оценена.
Вы используете два механизма для ежедневных файлов журнала, и они не взаимодействуют друг с другом.
С одной стороны, вы позволяете syslog генерировать ежедневные файлы, с другой - позволяете logrotate вращать файлы. Logrotate будет обрабатывать каждый ежедневный файл как отдельный уникальный набор файлов (он не считает, что HOST_A_2018_09_05.log связан с HOST_A_2018_09_06.log) для ротации, поэтому он никогда не достигает пяти файлов файлов на шаблон.
Лучше либо не включать дату в имя файла, либо позволить системному журналу самостоятельно обрезать старые файлы.