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, чтобы разрешить отдельные правила для отдельных каталогов? Возможно ли это вообще?

0
задан 10 October 2018 в 18:52
1 ответ

Я бы явно включил пути для хостов, отличных от 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
}
0
ответ дан 5 December 2019 в 05:13

Теги

Похожие вопросы