Como posso enviar para syslogd algumas mensagens de log para mim?

13

Gostaria de receber uma notificação por e-mail sempre que o syslogd registrar algo como, por exemplo, errprioridade ou superior. Suponha que este é um daemon syslog compatível com BSD.

  • Isso pode ser realizado?
  • Devo usar um pipe nomeado para um script de shell?
  • Que outras soluções possíveis existem?
Jason
fonte

Respostas:

6

Aqui está uma solução que usa pipes nomeados. Está configurado para o Debian, mas você deve poder modificá-lo para o BSD.

Pausado até novo aviso.
fonte
Acabei baseando minha solução nisso para que eu pudesse daemonizar o email. Obrigado pelo link.
jason
Isso parece muito um hack. Por que você gastaria tempo criando scripts quando existem aplicativos estáveis ​​de código aberto para fazer isso por você? (em tempo real também). * veja minha resposta.
Sucuri
2
Nem um hack. É assim que esse tipo de coisa costuma ser feito.
Pausado até novo aviso.
6

Notificações via syslogd (8)

No meu servidor OpenBSD, eu registro e envio por e-mail mensagens importantes de meus aplicativos da web, que usam o recurso local1 . Aqui está o meu /etc/syslog.conf para fazer isso acontecer:

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 a envia para o correio via eco. Isso é importante. Depois que o eco sai de sua linha, ele termina o canal, enviando um EOF para que ele possa enviar a mensagem de log por email.

Em outras palavras, você não pode canalizar diretamente para o correio via syslogd da seguinte maneira:

local1.err    |/usr/bin/mail -s SYSLOG [email protected]

porque o syslogd continuará gravando no canal até que ele próprio seja finalizado ou envie um sinal HUP; nesse momento, o correio enviaria todo o conjunto de mensagens de log em um grande email.

Notificações via newsyslog (8)

Agendar newsyslog no cron é outra maneira de obter mensagens em uma taxa mais lenta ou em massa.

Por exemplo, se você deseja um resumo diário das mensagens de log, defina o sinalizador M e especifique um endereço de email de 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:

Modo de monitoramento; apenas as entradas marcadas com um `M 'nos sinalizadores são processadas. Para cada arquivo de log que está sendo monitorado, qualquer saída de log desde a última vez que o newsyslog foi executado com o sinalizador -m é enviada ao usuário listado na seção de notificação do monitor.

Clint Pachl
fonte
3

Você pode querer verificar logcheck ou logwatch. O Logcheck enviará um e-mail a cada 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 frequência. Não conheço nenhuma ferramenta que faça isso assistindo os arquivos de log, mas tenho certeza de que há algo por aí que faz isso.

David Pashley
fonte
Sim, eu prefiro não monitorar e analisar os arquivos de log depois que eles são gravados, mas apenas conecte-me ao processo de log para que eu possa receber notificações instantâneas.
jason
1

Eu usaria o OSSEC. Ele monitora seus registros em tempo real e permite que você facilmente alerte por email (ou outros meios) quando eventos específicos são correspondidos. Simples de usar, escalável e de código aberto.

link: http://www.ossec.net

sucuri
fonte
Isso pode ser um exagero para o aplicativo. No entanto, o pacote faz muito e, se houver necessidade, pode ser adequado.
Pausado até novo aviso.