Monit: servicio si hay enlace

Por distintos temas de arquitectura se planteó la necesidad de disponer de un servicio solamente si el enlace (a Internet) estaba activo, o sea que cuando el enlace estuviera caído el servicio debería estar apagado, o lo contrario.

Perfectamente podría haber creado un simple script que periódicamente (mediante cron) revisara el enlace y actuara como se requiere, y creo que habría solucionado en unas pocas líneas de bash, aunque luego con notificaciones por correo y registros podría ser algo más complejo.

Así que preferí encarar la tarea con monit, por ser un daemon especialmente pensado para monitoreo y acción.

Monit dispone de una funcionalidad de monitoreo de networking y la regla de monit quedó así:

check host ConexionInternet with address 10.0.2.3
    if failed icmp type echo count 3 with timeout 3 seconds
         then exec "/usr/bin/service nginx stop"
    else if succeeded
         then exec "/usr/bin/service nginx start"
    alert monitor@gcorreo.com

y así quedan los registros, cuando baja y sube el servicio:

error    : ICMP echo request for 10.0.2.3 1/3 failed -- Operation not permitted
error    : ICMP echo request for 10.0.2.3 2/3 failed -- Operation not permitted
error    : ICMP echo request for 10.0.2.3 3/3 failed -- Operation not permitted
error    : 'ConexionInternet' failed ICMP test [Echo Request]
info     : 'ConexionInternet' exec: /usr/bin/service

info     : 'ConexionInternet' succeeded ICMP test [Echo Request]
info     : 'ConexionInternet' exec: /usr/bin/service

Luego analizando vimos que el servicio era de capa aplicación, por que decidimos cambiar a monitoreo de conexión, quedando así:

check host ConexionInternet with address www.google.com
    if failed url http://www.google.com/
        then exec "/etc/init.d/nginx stop"
    else if succeeded
        then exec "/etc/init.d/nginx start"
    alert monitor@gcorreo.com

Muy simple y confiable con la tarea delegada en el daemon monit.

Leave a Reply

  

  

  

Anti-Spam by WP-SpamShield