Admin Libre - Administración de sistemas y redes

Monitorización y notificación de alertas con reed-alert
Por Francisco Gaitán el 16 de Octubre de 2022

reed-alert es una herramienta minimalista de monitorización y notificación de alertas para tu servidor. Se trata de un programa en Common LISP que funciona bajo la línea de comandos.

En base a un fichero de configuración definido por el usuario, reed-alert realiza una serie de pruebas de forma que, en caso de que una falle, el programa envía una alerta previamente configurada y termina su ejecución, sin hacer el resto de comprobaciones. Por ejemplo, si se programa una alerta que compruebe el contenido de una página web, antes de comprobar el contenido de la página se puede comprobar que haya conectividad a internet, o que el certificado SSL del sitio sea válido.

La configuración no tiene mucho misterio: creas un archivo LISP que se le pasa como parámetro a reed-alert y éste se llama periodicamente desde cron(8), por ejemplo:

#
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin
MAILTO=""
# alerts and notifications 
*/5 * * * * ( reed-alert /home/foo/monitor.lisp )

Ejemplos de uso

Tienes un ejemplo completo en el artículo Reed-alert: give years later e información detallada en el repositorio git. Aquí pongo unos ejemplos de código de la documentación para mostrar su sencillez:

Configura la alerta mail que envía un correo electrónico
(alert mail "echo -n '%date% %hostname% had problem on %function% %newline% %params% values %result% %newline%
                      %desc%' | mail -s '[Error] %function% - %hostname%' john.doe@example.com")
Comprueba que los servicios httpd, relayd y smtpd están corriendo
;; check if service is running
(=> mail service :name "httpd") 
(=> mail service :name "relayd")
(=> mail service :name "smtpd")
Comprueba si los hosts 203.0.113.1 y 203.0.113.2 responden a ping
;; check if :host host is reachable
(loop for host in (list "203.0.113.1" "203.0.113.2")
   do
     (=> mail ping :host host))
Comprueba si el certificado SSL de example.com aún no ha expirado
;; check if a certificate is still valid within a time range
(=> mail ssl-expiration :host "example.com" :seconds 1296000)
Define la prueba check-http-patern que busca una cadena de texto en una web
;; we declare a new probe here
(create-probe
 check-http-pattern
 (command-return-code (format nil "curl ~a | grep -i ~a"
                              (getf params :url) (getf params :pattern))))
Usa la prueba configurada anteriormente con dos páginas web
;; check if the web page :url contains the text regex :pattern
(=> mail check-http-pattern :url "https://example.com/" :pattern "Example")
(=> mail check-http-pattern :url "https://example.net/" :pattern "Another\ text")

Destacado

Contacto

Si has encontrado algún error o quieres comentarme algo mándame un correo a webmaster@adminlibre.org