Fazendo o logrotate remover logs antigos depois de reduzir o valor 'rotate'

2

Estou tentando reduzir o número de arquivos de log mantidos para o Apache, reduzindo 'rotate 52' em /etc/logrotate.d/apache2 para 'rotate 8'. Com rotação semanal, isso deve manter dois meses de logs em vez de um ano inteiro.

Eu implantei a nova configuração via Puppet para nossos servidores e notei que ela funciona de forma diferente do que eu esperava. Eu esperava que ele removesse o erro do Apache e acessasse logs de logs com mais de 8 semanas, ou seja, 9-52. Em vez disso, manteve todos os logs antigos e simplesmente não cria nenhum novo que exceda o limite de 8 semanas! A rotação 9 está faltando, mas 10-52 ainda existe.

A pesquisa no arquivo mostrou que esse comportamento é conhecido, por exemplo Logrotate não remove logs antigos

Como posso me livrar dos registros antigos facilmente? Eu quero evitar excluí-los manualmente em cada servidor. Ainda não tenho nenhum software de orquestração implantado, então o Puppet terá que fazer isso.

Meu arquivo /etc/logrotate.d/apache2 lê:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 8
    compress
    delaycompress
    notifempty
    create 644 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}
    
por Martijn Heemels 14.10.2014 / 11:50

1 resposta

4

Você pode adicionar um script postrotate ao seu bloco atual para excluir arquivos com mais de n dias com o seguinte:

find /var/log/apache2 -maxdepth 1 -mtime +<n> -name "*.log.*.gz" -delete &>/dev/null

Espere pela próxima rotação, em seguida, remova-a e deixe o logrotate fazer seu trabalho normal novamente.

    
por 14.10.2014 / 13:26