Qual ferramenta de rotação de logs você prefere?
Qual ferramenta de rotação de logs você prefere?
Respostas:
Na minha experiência, o logrotate é ótimo. É muito flexível e funciona bem com a maioria dos softwares.
No entanto, existem alguns problemas e, como o cronolog é principalmente um recurso de rotação de logs da web, anotarei minha experiência com o logrotate + apache, o que foi problemático:
Ao rotacionar logs, devemos notificar o apache que um log está sendo rotacionado, pois, mesmo que a rotação do log renomeie access.log para access.log.1, o apache continuará gravando em access.log.1, como está gravando no inode, e renomear o arquivo não afeta o número do inode.
No debian etch (e provavelmente em muitas outras distribuições), o logrotate está sendo usado para girar os logs do apache. Agora, o apache tem uma reinicialização simples que aconselha os processos filhos do apache a sair assim que terminarem de servir as conexões existentes, o apache relê sua configuração, gera novos processos filhos, que começam a gravar em um novo arquivo de log (caso o anterior fosse rodado).
Isso soa como uma ótima solução, no entanto, o reinício normal nem sempre funciona em determinadas condições (como carga pesada), então os desenvolvedores debian decidiram usar um reinício do apache em vez de um reinício normal, na configuração do apache logrotate. Infelizmente, isso faz com que todas as conexões sejam descartadas de uma só vez, o que é muito ruim para sites muito carregados. Além disso, a reinicialização do apache também pode causar problemas como o apache parar e não iniciar (também em determinadas situações de carregamento), consulte os links de bug abaixo para obter detalhes.
A linha inferior é, logrotate é ótimo, mas pode levar a certos problemas para certos programas. Eu não tenho muita experiência com o cronolog, mas como ele grava logs através de um pipe, não requer recarregamentos do apache quando está girando arquivos de log, o que basicamente resolve tudo o que é descrito acima.
Bugs relacionados ao logrotate / apache debian:
Eu prefiro o cronolog, mas não é uma preferência muito forte.
logrotate onde é iniciado pelo cron e se um sistema estiver inoperante por algum motivo quando a rotação deveria ter acontecido, seus arquivos de log não serão girados.
Também gosto que os arquivos de log tenham a data (% Y% m.combined.access.log) no nome, porque mantenho esses logs por um longo tempo. Na maioria dos sistemas, por padrão, o apache logrotate nomeará os arquivos access.log, access.log.1, etc. Pode ser possível usar uma data nos arquivos de log com logrotate, mas não consegui descobrir como fazer a última vez que procurei.
Sempre usado logrotate. É o que o Debian usa por padrão e eu nunca tive nenhuma reclamação com ele.
Eu quase usar exclusivamente cronolog
sobre logrotate
.
logrotate
vem com o Debian, e eu permito que continue trabalhando para os serviços do sistema, como os logs do servidor de correio. Mas para Apache e lighttpd
arquivos de log, é tudo cronolog
.
Uma das razões pelas quais eu uso cronolog
é que toda a configuração acontece na linha do arquivo de log da configuração do servidor web
por exemplo, em um lighttpd
arquivo de configuração, você pode colocar:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
E todos recebem um novo arquivo de log toda semana sem nenhuma outra configuração. Ou você pode ser criativo e fazer algo como:
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
E obtenha um arquivo de log que mostre tráfego por dia da semana. por exemplo, todos os domingos, todas as terças-feiras.
O melhor é que, mesmo se o servidor estiver inativo por um período de tempo, o arquivo de log correto será usado na reinicialização.