lunes, 20 de julio de 2009

Notificaciones de Sistema en el Mail (Parte 2)

La anterior entrada explicaba como habilitar el correo y hacer que Cron notifique sus actividades.
Ahora vamos a explicar como hacer par que los mensajes de syslog sean notificados en nuestra cuenta de correo.

Creamos un named-pipe

# mkdir /etc/syslog.pipes
# mknod /etc/syslog.pipes/criticalMessages p
# chmod 600 /etc/syslog.pipes/criticalMessages

Un named-pipe es un tipo de archivo que implementa un fifo stream, permitiendo a dos procesos diferentes halaer entre ellos Utilizaremos named-pipes para implementar mensajes en tiempo real entre syslog y nuestro mailer.

Editamos /etc/syslog.conf y añadimos la entrada para mensajes criticos

*.crit |/etc/syslog.pipes/criticalMessages


Enviar los mensajes por correo:
Creamos un script shell que lea los mensajes de la fifo y los envie por email:

/usr/bin/syslogMailer


#!/bin/bash

# syslogMailer: a script to read stdin and turn each line into an alert
# email typically this is used to read a named-pipe written to by syslog
#
# example usage: syslogMailer < /etc/syslog.pipes/criticalMessages
#

alertRecipient="fireman@example.com" # the mail recipient for alerts
TMOUT=1 # don't wait > 1 second for input

# process each line of input and produce an alert email
while read line
do
# remove any repeated messages
echo ${line} | grep "message repeated" > /dev/null 2>&1
if test $? -eq 1
then
# send the alert
echo "${line}" | mail -s "critical error on syslog" ${alertRecipient}
fi
done


chmod u+x /usr/bin/syslogMailer

Ejecutamos el script cada 5 minutos con una regla de cron como la siguiente:

# m h dom mon dow command
0-59/5 * * * * /usr/bin/syslogMailer < /etc/syslog.pipes/criticalMessages > /dev/null 2>&1

Alternativamente podemos ampliar el tipo de mensajes que deseasmos recibir en la cuenta de correos:

# Email root on crit, err, emerg
*.crit |/etc/syslog.pipes/logMessages
*.emerg |/etc/syslog.pipes/logMessages
*.err |/etc/syslog.pipes/logMessages
*.alert |/etc/syslog.pipes/logMessages
*.warn |/etc/syslog.pipes/logMessages

Nota: Crear un pipe con /etc/syslog.pipes/logMessages y modificar la entrada del Cron hacia /etc/syslog.pipes/logMessages

No hay comentarios:

Publicar un comentario