¿Cómo puedo hacer que el correo electrónico syslogd me envíe ciertos mensajes de registro?

13

Me gustaría poder recibir una notificación por correo electrónico cada vez que syslogd registre algo, por ejemplo, errprioridad o superior. Suponga que este es un demonio syslog compatible con BSD.

  • ¿Se puede lograr esto?
  • ¿Debo usar una tubería con nombre para un script de shell?
  • ¿Qué otras posibles soluciones hay?
jason
fuente

Respuestas:

6

Aquí hay una solución que usa tuberías con nombre. Está configurado para Debian, pero debería poder modificarlo para BSD.

Pausado hasta nuevo aviso.
fuente
Terminé basando mi solución en esto para poder demonizar el correo electrónico. Gracias por el enlace.
jason
Esto parece demasiado hack. ¿Por qué pasarías tiempo haciendo scripts cuando hay aplicaciones de código abierto estables para hacer eso por ti? (en tiempo real también). * mira mi respuesta.
sucuri
2
No es un truco en absoluto. Es la forma en que a menudo se hace este tipo de cosas.
Pausado hasta nuevo aviso.
6

Notificaciones a través de syslogd (8)

En mi servidor OpenBSD, registro y envío mensajes importantes por correo electrónico desde mis aplicaciones web, que utilizan la función local1 . Aquí está mi /etc/syslog.conf para que esto suceda:

local1.err    /var/log/example.com
local1.err    |while read log; do echo "$log" | /usr/bin/mail -s SYSLOG [email protected]; done

Observe que el ciclo while lee infinitamente cada línea de syslogd y luego la canaliza al correo a través de echo. Esto es importante. Una vez que echo emite su línea, termina la tubería, enviando un correo electrónico EOF para que pueda enviar el mensaje de registro por correo electrónico.

En otras palabras, no puede canalizar directamente al correo a través de syslogd así:

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

porque syslogd continuará escribiendo en la tubería hasta que finalice o envíe una señal HUP, momento en el cual el correo enviaría todo el conjunto de mensajes de registro en un gran correo electrónico.

Notificaciones a través de newsyslog (8)

Programar el registro de noticias en cron es otra forma de obtener mensajes a un ritmo más lento o masivo.

Por ejemplo, si desea un resumen diario por correo electrónico de los mensajes de registro, configure el indicador M y especifique una dirección de correo electrónico del monitor en /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]

Luego programe newsyslog en crontab:

# minute hour  mday  month  wday  command
0        *     *     *      *     /usr/bin/newsyslog
1-59     *     *     *      *     /usr/bin/newsyslog -m

La opción -m para newsyslog (8) establece:

Modo de monitoreo; solo se procesan las entradas marcadas con una 'M' en las banderas. Para cada archivo de registro que se supervisa, cualquier salida de registro desde la última vez que se ejecutó newsyslog con el indicador -m se envía por correo al usuario que figura en la sección de notificación del monitor.

Clint Pachl
fuente
3

Es posible que desee mirar logcheck o logwatch. Logcheck le enviará un correo electrónico cada hora con líneas de registro que no coinciden con un conjunto de patrones. Sospecho que probablemente podrías hacerlo hacerlo con más frecuencia. No conozco ninguna herramienta que lo haga mirando los archivos de registro, pero estoy seguro de que hay algo por ahí que lo hace.

David Pashley
fuente
Sí, preferiría no monitorear y analizar los archivos de registro después de que se escriben, sino simplemente conectarme al proceso de registro para que pueda recibir notificaciones instantáneas.
jason
1

Yo usaría OSSEC. Monitorea sus registros en tiempo real y le permite alertar fácilmente por correo electrónico (u otros medios) cuando se coinciden eventos específicos. Fácil de usar, escalable y de código abierto.

enlace: http://www.ossec.net

sucursales
fuente
Esto puede ser excesivo para la aplicación. Sin embargo, el paquete hace mucho y si es necesario, entonces puede ser adecuado.
Pausado hasta nuevo aviso.