Aqui está uma solução que usa pipes nomeados. Ele está configurado para o Debian, mas você deve ser capaz de modificá-lo para o BSD.
Eu gostaria de receber uma notificação por e-mail sempre que o syslogd registra algo como, digamos, err
priority ou superior. Suponha que este seja um daemon syslog compatível com BSD.
Aqui está uma solução que usa pipes nomeados. Ele está configurado para o Debian, mas você deve ser capaz de modificá-lo para o BSD.
No meu servidor OpenBSD, eu registro e envio por email mensagens importantes de meus aplicativos da web, que usam o recurso local1 . Aqui está o meu /etc/syslog.conf para que isso aconteça:
local1.err /var/log/example.com
local1.err |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG [email protected]; done
Observe que o loop while lê infinitamente cada linha do syslogd e depois canaliza para o mail via echo. Isso é importante. Uma vez que o eco envia sua linha, ele finaliza o canal, enviando um e-mail para o EOF para que ele possa enviar a mensagem de log por e-mail.
Em outras palavras, você não pode canalizar diretamente para o correio via syslogd da seguinte forma:
local1.err |/usr/bin/mail -s SYSLOG [email protected]
porque o syslogd continuará escrevendo no pipe até que ele próprio seja terminado ou envie um sinal HUP, no qual o correio enviaria todo o conjunto de mensagens de log em um grande e-mail.
Agendar o newsyslog no cron é outra maneira de obter mensagens em uma taxa mais lenta ou em massa.
Por exemplo, se você quiser um resumo diário de e-mail das mensagens de log, defina o sinalizador M e especifique um endereço de e-mail do monitor em /etc/newsyslog.conf :
# logfile_name owner:group mode count size when flags monitor
/var/log/example.com root:wheel 640 7 * 24 M [email protected]
Em seguida, agende newsyslog no crontab:
# minute hour mday month wday command
0 * * * * /usr/bin/newsyslog
1-59 * * * * /usr/bin/newsyslog -m
A opção -m para newsyslog (8) afirma:
Monitoring mode; only entries marked with an 'M' in flags are processed. For each log file being monitored, any log output since the last time newsyslog was run with the -m flag is mailed to the user listed in the monitor notification section.
Você pode querer ver o logcheck ou logwatch. O Logcheck enviará um e-mail por hora com linhas de log que não correspondem a um conjunto de padrões. Eu suspeito que você provavelmente poderia fazê-lo com mais freqüência. Eu não conheço nenhuma ferramenta que faça isso observando os arquivos de log, mas tenho certeza de que há algo lá fora que faz isso.
Eu usaria o OSSEC. Ele monitora seus logs em tempo real e permite que você alerte facilmente por email (ou outros meios) quando eventos específicos são correspondidos. Simples de usar, escalável e de código aberto.
link: link