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.