Nova entrada de log - notificação de correio

2

Estou procurando um script (bash / perl / python) que, ao ser chamado pelo cron a cada 5 segundos, verificará se novas linhas foram adicionadas aos meus arquivos de log específicos. Se houver novas linhas, o script deverá ser enviado para raiz a notificação que contém o evento de log.

Existe alguma maneira que eu possa conseguir isso?

    
por jon 04.06.2011 / 04:40

4 respostas

3

Você poderia experimentar o Tenshi. Está escrito em Perl, muito fácil de configurar e faz exatamente o que você pediu. A partir da descrição do pacote do Ubuntu:

"Tenshi é um programa de monitoramento de log, projetado para assistir a um ou mais arquivos de log para linhas que combinam expressões regulares definidas pelo usuário e relatar as correspondências. As expressões regulares são atribuídas a filas com um intervalo de alerta e uma lista de destinatários de email "

Pacote do Ubuntu ( Link ), Pacote Debian ( Link ).

    
por 05.06.2011 / 15:21
2

Isso pode ser feito com um script bash que executa as seguintes tarefas:

  1. Ter um processo em segundo plano monitorando cada arquivo de log com tail -f , gravando a saída em um local de buffer.
  2. Colha, age regularmente e trunca o local do buffer.

Eu usaria um único script, talvez lançado como no script de inicialização, em vez de um trabalho cron. Por exemplo:

#!/bin/bash

RECIPIENT=root
SUBJECT="Log monitor"
PERIOD=5    # Harvest log buffer every PERIOD seconds

# Prepare the log buffer and ensure it is empty
LOGBUFFER=/tmp/logbuffer.$$
cp /dev/null $LOGBUFFER

# Monitor the log files in the background.
# More than one log file can be specified on the command line.
for file in "$@"; do
    tail -f -n0 "$file" | while read line;do echo "$file: $line";done >> $LOGBUFFER &
done

# Harvest the log buffer
while :;do
    if [ -s $LOGBUFFER ]; then
        mail -t "$RECIPIENT" -s "$SUBJECT" < $LOGBUFFER
        cp /dev/null $LOGBUFFER
    fi
    sleep $PERIOD
done

O script não é perfeito (por exemplo, ele deixará um arquivo /tmp/logbuffer.123 por perto quando sair), mas você deve começar.

    
por 04.06.2011 / 12:24
1

Se você considerar mudar para o uso do syslog-ng, poderá configurá-lo para iniciar automaticamente um script de shell que pode acionar um email com base no padrão de mensagem do syslog. Eu tenho isso no lugar para o registro de segurança.

    
por 05.06.2011 / 18:07
0

calling by cron every 5 seconds

O Cron não possui granularidade menor que minutos. Se você quiser esse tipo de granularidade, precisará de incremento. Apenas tenha algo como:

/var/log IN_CLOSE_WRITE /usr/local/sbin/notify.sh $@/$#

e um script que envia para você:

tail $1 | mail -s "New lines in: $1" root

Você pode ter que brincar com os tipos certos de eventos. Mas isso tornará desnecessário iniciar o script de maneira cronometrada. Se você tiver o incrontab configurado corretamente, você pode ter certeza de que algo será alterado sempre que o script for iniciado.

    
por 05.06.2011 / 14:32