Monit para monitorear sistemas, procesos, sistemas de archivos y servicios de red

Estuve probando varios monitores de servicios para implementar en servidores de misión critica y todos me parecieron muy pesados y dependientes de N cantidad de librerías, incluso me aventure a escribir mi propio monitor con un cliente servidor basado en webservices y clientes móviles para android , pero en medio del camino me encontré con monit , asi que desisti en el desarrollo y mejor implementare monit

Monit es un pequeño pero muy efectivo monitor de servicios, puede lanzar alertas o intentar restablecer el servicio. Tiene una interface integrada web aunque yo se la desactivo, los hombres que son hombres y escriben sus propios drivers solo escriben en archivos de texto con vim = )

Prácticamente puede monitorear cualquier servicio aunque en este articulo solo mostrare como implementarlo en servicios TCP, más específicamente en Mysql, http y https.

Un video demostrativo

Configuración.

Monit se obtiene de aquí http://mmonit.com/monit/ en su código fuente, yo prefiero compilarlo e instalarlo en su propio directorio en /usr

Una vez compilado la configuración es muy sencilla.

Se requiere de una archivo de configuración raíz desde el cual se ponen las reglas básicas y se llaman por medio de includes en modulos de configuración para los servicios a monitorear

El archivo raíz va en /etc y es monitrc

/etc/monitrc y su contenido para este ejemplo es el siguiente.

set daemon 30
set logfile syslog facility log_daemon
set mailserver localhost
set alert monit@lastdragon.net # direccion a donde enviaremos las alertas del sistema
set mail-format {
from: monit@localhost
subject: $SERVICE $EVENT
message: $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}

#set httpd
# port 2812
# use address 192.168.1.2
# allow usuario:clave

include /etc/monit/host
include /etc/monit/apache
include /etc/monit/mysql

No es difícil entender , la primera línea especifica que el proceso será del tipo demonio y que estará revisando los servicios cada 30 segundos para saber si aun están vivos, la tercera línea es el método de alerta, en este caso se trata de enviar un correo usando el servicio local de correo en la mayoría de las instalaciones será postfix o sendmail, la siguiente línea especifica a que correo electrónico enviara las alertas de eventos, el último bloque es un arreglo de código que indica en que formato se envía el correo electrónico.

Lo siguiente que esta comentado hace referencia a la interface web y el puerto por el que se puede conectar usando un navegador, yo lo mantengo comentado por qué no requiero apoyo web

Las ultimas 3 líneas son los 3 archivos de configuración de servicios a monitorear, en /etc/ se crea el directorio monit y adentro van los archivos host, apache, mysql y todos los demás que quieran agregar para monitorear en mi caso solo son 3

Contenido de host
/etc/monit/host

check system 127.0.0.1 #IP de tu host
if loadavg (1min) > 5 then alert
if loadavg (5min) > 10 for then alert
if memory usage > 90% then alert
if cpu usage (user) > 70% for 3 cycles then alert
if cpu usage (system) > 30% for 3 cycles then alert
if cpu usage (wait) > 20% for 3 cycles then alert

el archive host es para auditar el sistema operativo, por lo que la ip a auditar debería ser la de localhost, le siguen las condiciones, cada condición permite hacer algo si se cumple, en este caso solo manda alertas por cualquier condición verdadera, esta configuración nos puede indicar si el sistema operativo está muy estresado ya sea por un proceso fuera de control o un ataque lamer de DDoS

Contenido de apache
/etc/monit/apache

check process apache with pidfile /usr/apache2.4.7/logs/httpd.pid
start program = "/usr/apache2.4.7/bin/apachectl start" with timeout 60 seconds
stop program = "/usr/apache2.4.7/bin/apachectl stop" with timeout 60 seconds
if totalcpu > 90% for 3 cycles then alert
if totalmem > 95% for 3 cycles then alert
if children > 250 for 3 cycles then alert
if cpu > 70% for 3 cycles then alert
if failed host 192.168.1.2 port 443 type TCPSSL then restart #IP de tu host
if failed host 192.168.1.2 port 80 protocol http then restart #IP de tu host

Básicamente es la misma configuración pero se agregan unas líneas reiniciar o apagar el servicio dependiendo de si las condiciones se cumplen. Es muy importante la línea check process seguida del nombre que le damos al servicio, yo lo llamo apache en este modulo de configuracion , además de darle nombre al servicio a monitorear le indicamos la ruta del archivo pid, sin este archivo monit no podría saber si el servicio está en memoria ram o no

Las siguientes condiciones son muy similares a la de host, manda alertas si el proceso de apache se estresa, las ultimas 2 condiciones son pruebas directas al puerto de conexión

Se especifica el ip donde debe escuchar el puerto en el caso de 443 se especifica que es un TCP del tipo SSL y en caso de que falle la prueba en lugar de alert es restart, significa que intentara reiniciar el servicio y además mandara una alerta del evento por correo.

La última línea hace referencia similar pero al ser un puerto bien conocido el 80 se indica que se trate como protocolo http de igual forma si falla debe intentar reiniciar el servicio y mandar una alerta del evento.

Contenido del archivo mysql

/etc/monit/mysql

check process mysql with pidfile /var/run/mysqld/mysqld.pid
start program = "/sbin/service mysqld start" with timeout 60 seconds
stop program = "/sbin/service mysqld stop" with timeout 60 seconds
if cpu > 95% for 2 cycles then alert
if memory usage > 75% then alert
if failed host 192.168.1.2 port 3306 protocol mysql then restart #IP de tu host

Es prácticamente la misma configuración de apache, la última línea revisa directamente el puerto de conexión de mysql , al ser un puerto bien conocido se le indica que se trata del protocolo mysql y que si no encuentra el servicio activo debe intentar reiniciarlo y mandar la alerta del evento.

Notas adicionales, las líneas start program y stop program requieren la ruta exacta del programa que se encarga de arrancar y parar el servicio e ignoran la variable de entorno PATH, así que en el caso de mysql no funciona correctamente si solo se da la instrucción.

Service mysqld start

Requiere saber donde está almacenado services en mi caso en /sbin

Monit puede auditar prácticamente todo lo importante de un servicio de misión critica como el sistema de archivos para avisar que esta por agotarse el espacio o ser vigilante de archivos que se supone nunca deberían cambiar ya sean programas o certificados para cifrado de datos, si cambian podrían haber sido manipulados por un intruso y monit avisa y toma acciones , por lo que debes visitar y leer todo lo que ofrece en su respectivo sitio web, esa es la dirección de ejemplos de configuración.

http://mmonit.com/wiki/Monit/ConfigurationExamples

4 Comments

Add a Comment

Comment spam protected by SpamBam