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

Logrotate отдельных политик в том же каталоге

Я запускаю rsyslog на CentOS и logrotate для ротации моих журналов. Все хосты записывают свои журналы в / var / log / syslog / в свой отдельный каталог следующим образом:

/var/log/syslog/host1
/var/log/syslog/host2
/var/log/syslog/host3
/var/log/syslog/host4
/var/log/syslog/host5
/var/log/syslog/host6
/var/log/syslog/host7
/var/log/syslog/host8

В каждом из этих каталогов есть файл типа host1.log, который необходимо повернуть. Единственная проблема заключается в том, что у меня есть два хоста, журналы которых ДЕЙСТВИТЕЛЬНО большие (host3 и host7), и их нужно чередовать с другим графиком хранения. Я хочу хранить журналы в течение 45 дней на этих двух конкретных хостах, но все остальные хосты должны храниться в течение 120 дней. Проблема в том, что они расположены в алфавитном порядке и обрабатываются неправильно. Я пробовал создавать отдельные политики, подобные этой, в моем файле /etc/logrotate.conf:

/var/log/syslog/host3/*.log {
daily
rotate 45
maxage 45
compress
dateext
dateyesterday
}

/var/log/syslog/host7/*.log {
daily
rotate 45
maxage 45
compress
dateext
dateyesterday
}

# Everything else
/var/log/syslog/*/*.log {
daily
rotate 120
maxage 120
compress
dateext
dateyesterday
}

Когда я запускаю это, он меняет host3 и host7 через 45 дней, как и положено. Затем, когда он попадает в / var / log / syslog //Раздел .log обрабатывается только до host3, а затем останавливается. Таким образом, host4, host5, host6 и host8 никогда не рассматриваются для ротации.

Я попытался изменить порядок в файле /etc/logrotate.conf, чтобы правило «все» помещалось вверху, например:

# Everything else
/var/log/syslog/*/*.log {
daily
rotate 120
maxage 120
compress
dateext
dateyesterday
}

/var/log/syslog/host3/*.log {
daily
rotate 45
maxage 45
compress
dateext
dateyesterday
}

/var/log/syslog/host7/*.log {
daily
rotate 45
maxage 45
compress
dateext
dateyesterday
}

Когда я запускаю его таким образом, он устанавливает для всех моих хостов 120-дневную ротацию с использованием первого правила, а затем игнорирует мои конкретные правила для host3 и host7. Когда он попадает в эти каталоги, он говорит:

rotating pattern: /var/log/syslog/host3/*.log  after 1 days (45 rotations)
empty log files are rotated, old logs are removed
No logs found. Rotation not needed.

Итак, мой вопрос: как мне настроить мой файл /etc/logrotate.conf, чтобы разрешить отдельные правила для отдельных каталогов? Это вообще возможно?

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

/var/log/syslog/host3/*.log  var/log/syslog/host7/*.log {
    daily
    rotate 45
    maxage 45
    compress
    dateext
    dateyesterday
}

# Everything else
/var/log/syslog/*/*.log {
    daily
    rotate 120
    maxage 120
    compress
    dateext
    dateyesterday
    prerotate
        bash -c "[[ ! $1 =~ host3 ]] && [ ! $1 =~ host7 ]]"
    endscript
}