Monitor

Diagrama de estados de Monitor

Diagrama de estados de Monitor

Monitor es un script escrito en puro Bash que permite dejar a la PC monitoreando el resultado de una instrucción. A diferencia de watch, no se trata de estar vigilando la salida de la instrucción, sino de detectar el momento en que ocurre la falla y ejecutar instrucciones cuando el servicio vigilado se cae o se levanta.

Monitor fue escrito para vigilar servicios con fallas de naturaleza aleatoria. En ocasiones el problema dura poco y no es fácil tomar una muestra del sistema justo cuando el problema ocurre.

Además, este tipo de situaciones tiene algunas características:

  • Se quiere saber cuándo se cayó y cuándo se volvió a levantar el servicio para saber en qué sección de las bitácoras buscar.
  • Se quiere tomar acción cuando se detecta otra caída. Estas acciones pueden ser toma de diagnósticos o envío de alertas.
  • Suele necesitarse ser tolerante a oscilaciones pasajeras; por ejemplo, un ping perdido no implica una caída de un equipo.

Si bien este tipo de vigilancia se resuelve fácilmente con un while de Bash, éste puede volverse rápidamente complejo y no es divertido estar depurándolo cada que uno se ve en la necesidad. Además, es posible cometer errores al programar la lógica del while y no darnos cuenta hasta cuando el problema original ya volvió a ocurrir y no obtuvimos la monitorización esperada.

Con Monitor, la lógica está establecida y comprobada. Sólo basta indicar qué instrucción queremos monitorizar.

El código está disponible en Github: https://github.com/alvarezp/monitor

Ejemplo

En un hipotético problema perdemos comunicación con nuestro propio host y no sabemos por qué. Sospechamos que un proceso corriendo en nuestra máquina está insertando reglas de iptables que resultan en el bloqueo de esta comunicación.

Utilicemos monitor.bash para vigilar el resultado de un ping a localhost y que en caso de caída confirmada se tome una muestra de iptables.

# monitor.bash --rest-time 1 --on-down 'iptables-save' 'ping localhost -c 1 -w 1 >/dev/null 2>&1'
       INIT 2015-11-05 15:21:58 PDT lun
         UP 2015-11-05 15:21:58 PDT lun
     ---- el proceso misterioso aplica iptables -A INPUT -i lo -p icmp -j DROP ----
FALLINGDOWN 2015-11-05 15:22:13 PDT lun
# Generated by iptables-save v1.4.21 on Mon May 11 15:22:17 2015
*filter
:INPUT ACCEPT [74:70608]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [67:5781]
-A INPUT -i lo -p icmp -j DROP
COMMIT
# Completed on Mon May 11 15:22:17 2015
       DOWN 2015-11-05 15:22:17 PDT lun
     ---- el proceso misterioso aplica iptables -F INPUT ----
RAISINGBACK 2015-11-05 15:22:32 PDT lun
         UP 2015-11-05 15:22:36 PDT lun

Da la impresión que iptables-save se ejecuta después de quedar en FALLINGDOWN, pero en realidad se ejecuta justo al entrar en DOWN.

Ya tenemos fechas y horas para buscar en bitácoras y algo de evidencia para profundizar en el diagnóstico.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *