Eu quero meus logs enviados para o meu email com logrotate

5

Não é estritamente uma questão sobre programação como tal, mais uma questão de controle de log.

De qualquer forma. Minha empresa tem vários clientes, e cada um desses clientes tem um conjunto de logs que eu gostaria de receber por e-mail para mim.

Agora, outro pré-requisito é que eles fiquem cheios de HTML simples.

Tudo isso está muito bem, eu consegui fazer um hilighter para os tipos de log fornecidos. Então, o que eu faço é usar logrotate prerotate stuff para enviar os logs como uma mensagem de e-mail. Exemplo:

/var/log/a.log /var/log/b.log {
  daily
  missingok
  copytruncate

  prerotate
    /usr/bin/python /home/foo/hilight_logs /var/log/{a,b}.log | /usr/sbin/sendmail -FLog\ mailer [email protected] [email protected]
  endscript
}

O problema com essa abordagem é basicamente que logrotate é uma porcaria: ele executará o comando para cada arquivo de log especificado no especificador e, até onde eu saiba, não há como saber qual dos arquivos de log está sendo manipulado. (O que realmente não ajudaria de qualquer maneira.)

Antes de repetir exatamente o mesmo logrotate até 10 vezes em máquinas diferentes, a única coisa que posso fazer é ficar atolado com o spam de registro todas as noites. E eu me cansei disso hoje, então eu pergunto.

    
por lericson 11.04.2010 / 08:33

1 resposta

3

tente substituir prerotate por firstaction . Desta forma, o seu comando de correio só será executado uma vez para todos os registros definidos em um bloco.

este é o texto da página man:

firstaction/endscript
          The lines between firstaction and endscript (both of which must appear on lines by themselves) are executed once before all log files that match the
          wildcarded pattern are rotated, before prerotate script is run and only if at least one log will actually be  rotated.  These  directives  may  only
          appear inside a log file definition. If the script exits with error, no further processing is done. See also lastaction.
    
por 11.04.2010 / 14:30