Назад | Перейти на главную страницу

Logrotate не удаляет сжатые журналы

У меня есть 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) для ротации, поэтому он никогда не достигает пяти файлов файлов на шаблон.

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