Como posso fazer com que o syslogd envie certas mensagens de log para mim?

12

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.

  • Isso pode ser feito?
  • Devo usar um pipe nomeado para um script de shell?
  • Que outras soluções possíveis existem?
por jason 26.06.2009 / 20:02

4 respostas

5

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.

    
por 26.06.2009 / 20:41
4

Notificações via syslogd (8)

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.

Notificações via newsyslog (8)

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.

    
por 20.05.2014 / 09:46
3

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.

    
por 26.06.2009 / 20:40
1

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

    
por 29.06.2009 / 04:02