Monit es un programa cuya finalidad es monitorizar que un proceso está ejecutándose y en caso de detectar la no ejecución del mismo lo inicia de nuevo.

Es capaz de monitorizar cualquier tipo de servicio o demonio, archivos de disco o sistema, vigilar espacios de discos, identificadores de proceso PID, realizar checksum y muchísimas cosas más, su forma de configurar es tan potente que configurarlo casi requiere un lenguaje de programación.
Como complemento de Monit usaremos upstart para iniciar de forma sencilla un proceso. Como ejemplo de proceso a monitorizar usaremos nodejs, una librería de I/O (input/output, entrada/salida) que permite leer y escribir en ficheros, en conexiones de red (sockets), en procesos del Sistema Operativo y  permite gestionar y manipular buffers de datos y los eventos son asíncronos.

Vamos a configurar la monitorización de un servidor nodejs

Como de costumbre  usaremos como distribución base, Ubuntu.

Empezamos por instalar upstart

#!sh sudo apt-get install upstart 

Las últimas dos versiones de Ubuntu ya traen instalado este paquete.

A continuación vamos a configurar el servicio/proceso a monitorizar para arrancarlo mediante el sistema upstart, en nuestro caso un servidor nodejs.

 #!upstart description "node.js server" author      "juanvi" start on startup stop on shutdown script export NODE_ENV=production echo $$ sudo echo $$ > /var/run/node.pid exec sudo -u script /home/script/local/bin/node /home/script/pbsb/pubsub.js 2>&1 >> /var/log/node.log end script 
Guarda este fichero en /etc/init.d o en /etc/event.d dependiendo de tu versión de Ubuntu/Linux con el nombre programa.conf (en nuestro caso sería por ejemplo node.conf)

Ahora podemos arrancar y parar nuestro proceso/servicio con  los comandos

start yourprogram stop yourprogram

en nuestro caso

start node stop node 

A continuación pasamos a instalar el monit:

apt-get install monit 

Tras esto revisamos la configuración básica de monit en /etc/monit/monitrc:

# Monit control file
# ==================

# Monit global settings:
# ----------------------
set daemon  60
set logfile syslog facility log_daemon
set mailserver node
set alert usuario@dominio.com # direccion a donde enviaremos las alertas del sistema
set mail-format {
from: monit@node
subject: $SERVICE $EVENT
message: $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}

set httpd port 2812 and
allow xxx.xxx.xxx.xxx # La IP que tendrá permiso para poder ver la interfaz web
allow usuario:clave #usuario y clave para poder acceder a la interfaz web

include /etc/monit/nodejs.monit ->ficheros de configuración del proceso a monitorizar

A continuación pasamos a definir la configuración de la monitorización y las acciones pertinentes para levantar el proceso node en caso de caida

#!monit
set logfile /var/log/monit.log
check process nodejs  with pidfile /var/run/node.pid
start program = "/sbin/start node"
stop program  = "/sbin/stop node"

De esta manera en caso de no estar el proceso corriendo, no exisitrá el fichero node.pid, monit lo detectará y ejecutará la acción start, usando upstart.

Además con Monit podemos chequear muchos otros parámetros de sistemas, la respuesta de una petición http etc… complementando a la perfección a upstart más limittado en ese sentido.

Anuncios