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