Я запускаю 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
}