A rotação de log não remove os logs antigos

14

por algum motivo, os arquivos de log antigos não são excluídos. Exemplo com apache

O que o arquivo conf diz:

$ cat /etc/logrotate.d/apache2
/var/log/apache2/*.log {
    weekly
    missingok
    rotate 2
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            /etc/init.d/apache2 reload > /dev/null
    endscript
}

O conteúdo (recortado) da pasta de log:

# ls /var/log/apache2/
access.log       error.log.26.gz                other_vhosts_access.log.20.gz  access-ssl.log.14.gz
access.log.1     error.log.27.gz                other_vhosts_access.log.21.gz  access-ssl.log.15.gz
access.log.2.gz  error.log.28.gz                other_vhosts_access.log.22.gz  access-ssl.log.16.gz
access.log.3.gz  error.log.2.gz                 other_vhosts_access.log.23.gz  access-ssl.log.17.gz
[...]

Na verdade, existem muitos deles:

# ls /var/log/apache2/ | wc -l
85

O comando logrotate com --verbose me fornece o seguinte:

# /usr/sbin/logrotate --verbose  /etc/logrotate.conf
[...]
reading config file apache2
reading config info for /var/log/apache2/*.log
[...]
rotating pattern: /var/log/apache2/*.log  weekly (2 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
  log does not need rotating
considering log /var/log/apache2/error.log
  log does not need rotating
considering log /var/log/apache2/other_vhosts_access.log
  log does not need rotating
considering log /var/log/apache2/pbpdhg-ssl.log
  log does not need rotating
not running postrotate script, since no logs were rotated
[...]

O que há de errado aqui? Os logs são girados, mas não removidos? o que estou perdendo?

SamK
fonte

Respostas:

17

sua configuração diz: gire 2

isso significa que os arquivos de log são rotacionados duas vezes antes de serem removidos; portanto, a rotação do log requer apenas 2 arquivos.

meu palpite é que a configuração foi alterada em algum momento, porque anteriormente eram mantidos mais arquivos de log, talvez fosse algo como rodar 28. esses arquivos mais antigos que você precisa remover manualmente.

johnshen64
fonte
Não posso provar a resposta, então acho que está certo. No entanto, eu não entendo por que access.log.3.gzainda está presente.
SamK
2
Porque rotate 2 lida apenas com 2 arquivos, ou seja, .1.gz e .2.gz, e ignora outros arquivos.
precisa saber é o seguinte
1
Alterei o rotate 365 para rotacionar 90 e o access.log.90.gz é o mais recente alterado até agora. O access.log.91.gz foi removido (como logrotate mantém apenas 90), mas não a> 91. Então johnshen64 está certo, você tem que remover qualquer coisa> 2.
Yvan
Aqui vai uma dica sobre como lidar com isso automaticamente, gestão ou seja, através de configuração em vários servidores: serverfault.com/a/636883/9082
Martijn Heemels
-3

Os logs com o sufixo .gz não são considerados porque você especificou: /var/log/apache2/*.log

Portanto, 2 .log e todos os arquivos .gz permanecem.

Para mudar isso coloque ai

/ var / log / apache2 / ** log * ou alguma expressão regular.

Neg88
fonte
Desculpe, apenas um asterisco antes do log.
Neg88
2
Para o problema do asterisco, você pode editar sua postagem. De maneira mais geral, por que você acha que a resposta aceita está errada? O logrotate deseja os arquivos de nome base e lida com adições .gz, conforme necessário.
precisa
Essa resposta é realmente prejudicial, pois existe o risco de que os arquivos sejam rotacionados repetidamente, pelo menos em algumas versões de logrotate. Ele comprimirá os arquivos primeiro, depois corresponderá aos arquivos compactados e continuará girando-os.
Richlv