Monit es un sistema de monitorización de procesos en Linux/Unix, que además de monitorizar también puede realizar acciones automáticamente si estas las configuramos antes una determinada alerta.
Monit se configura de una manera sencilla y muy intuitiva, posee una web de visualización de todo aquello que hayamos configurado, mediante un servidor web que viene incluido en el programa.
Podremos parar, relanzar o arrancar servicios desde la web de monit, montar unidades, desmontarlas, monitorizar los recursos de nuestro pc, memoria, disco,... . Controla cambios en ficheros, permisos, ... .Podemos controlar todo tipo de servicios locales o remotos por los protocolos TCP, UDP y sockets Unix.
Podemos definir protocolos para monitorizar distintos servicios , monit simula una conexión para comprobar su estado. Monit tiene ya configurados los protocolos mas importantes, como HTTP, HTTPS, SMTP, FTP, POP, IMAP, MYSQL, NNTP, NTP3, LDAP, LDAP2, LDAP3, DNS, RSYNC, FTPS, SLL,... entre otros.
Instalación
En la pagina de monit
monit podemos encontrar tanto el código fuente, como paquetes precompilados para las distribuciones mas usadas.
Al estar el programa escrito en C, necesitares para su funcionamiento tener instalado el libc. Si instalamos monit desde las fuentes, además debemos de instalar un servidor web tipo Apache para que monit lo use, si lo instalamos desde los paquetes precompilados, no nos hace falta nada mas.
SI lo instalamos desde código fuente, con un simple
./configure
./make
./make install
estará instalado
Una vez instalado, tenemos, primero el archivo de configuracion de monit, el monitrc, que sera en donde configuraremos nuestro monit.
Para lanzar monit, bastara con poner en consola
monit
Y para salir
monit quit
Podemos querer que se ejecute automáticamente al inicio del sistema, entonces deberemos decirselo al inittab, editandolo
vi /etc/inittab
añadiremos la siguiente linea
mo:2345:respawn:ejecutable_monit -Ic archivo_conf_moit
Tenemos que tener cuidado, ya que despendiendo de la distribución, el ejecutable del programa y el archivo de configuracion pueden estar en otro sitio, en mi caso, con Debian Sid
mo:2345:respawn:/bin/monit -Ic /etc/monit/monitrc
Ejecutamos
telinitq
Y ya tendremos el el monit cargado por el inittab.
Configurando monit
Voy a indicar distinto ejemplos y explicarlos. El sistema de monit es muy simple, además en su arcivo de configuración trae ejemplos de casi todo.
Cuando configuremos algo en monitrc, al guardar podemos ejecutar
monit -t
Si algo esta mal, este nos lo indicara.
Empezamos editando el archivo monitrc
Tenemos dos tipos de entradas, globales y servicios:
Globales: empiezan por set y el parámetro a configurar, aquí configuramos cosas de monitorio
Servicio: empiezan por check y el servicio a monitorizar. Nos permite el uso de if, osea de la condicion.
Entradas Globales
tenemos
set damenon 120
Aquí le decimos a monit que cada 120 segundos, osea 2 minutos, realice la comprobación de todos los procesos que monitoriza.
set logfiles syslog facility LOG_daemon
Monit escribirá sus errores y comprobaciones vía syslog.
set mailserver mail@mail.com
Le decimos a Monit el servidor SMTP por el que enviara correos.
set alert direccionmail@ccc.com
Le decimos a Monit a que cuenta de correo enviara los mensajes de alerta.
set httpd port 4567 address localhost
Le decimos en que puerto el servidor web de monit funcionará, y desde que res o equipo vamos a entrar. En este caso solo podremos acceder a la web de monit desde la propia maquina, si queremos aceder desde fuera seria
set httpd port 4567
accederemos a la web de monit, poniendo
http://nuestra_ip:puerto
en este caso
http://localhost:4567 ---> si estamos en nuestro pc
http://ip:4567 --> si estamos en otro pc
allow localhost
allow admi:monit
Con allow damos permisos de entrada a la web de monit. En este caso damos permiso a la maquina localhost, osea nosotros mismo, y si estamos accediendo desde otro sitio, le decimos que con la segunda linea el usuario y el password para acceder, en esta caso admin y pass monit.
allow 10.1.1.2
allow 192.168.0.1/255.255.255.240
allow maquina.dominio.es
Podemos en allow, desde poner 1 maquina, a un dominio completo, a unos ragos de ip
allow md5 /etc/apache2/ftpasswd paco manuel
también asi añadimos a los usuarios paco y manuel, con sus claves de apache2.
allow manilo:pass read-only
Definimos un usuario de solo lectura, no podrá en la web de monit ni parar ni reiniciar... servicios, solo vera su estado.
Podemos activar el servicio SSL, para mayor seguridad para acceder a la web mediante HTTPS .
set httpd 2812
ssl enable
pemfile /etc/certs/monit.pem
Así, primero decimos el puerto del servidor web. Luego activamos el ssl, y por ultimo, le decimos donde esta el archivo pem, que contiene la clave privada y el certificado.
Entradas de servicio:
Tipo proceso;
check process apache with pidfile /run/var/apache2/apache2.pid
start =/etc/init.d/apache2 start
stop =/etc/init.d/apache2 stop
if failes port 80 and protocol http then restrart
if cpu usage is greater than 60 percent for 2 cycles then alert
if cpu usage > 98 percent for 2 cycles then restart
if 2 restarts within 3 cycles then timeout
Esto es una configuración típica para monitorizar un apache.
check process apache2 with pidfile /run/var/apache2/apache2.pid
le decimos que chequee el proceso apache2 y le indicamos donde esta el archivo que le diga cual es ele pid de este proceso. Este archivo lo tienen todos los demonios.
start =/etc/init.d/apache2 start
stop =/etc/init.d/apache2 stop
Como se para y arranca el demonio.
if failes port 80 and protocol http then restrart
Si falla el puerto 80, o el que sea del servidor web, y el protocolo http, que reinicie el servidor
if cpu usage is greater than 60 percent for 2 cycles then alert
if cpu usage > 98 percent for 2 cycles then restar
Si el uso es mayor al 60% que avise, si es mayr al 98 % que restaure
if 2 restarts within 3 cycles then timeout
Si ha restaurado el servicio 2 en 3 ciclos, le decimos que deje pasar un tiempo sin hacer nada, para que no nos sature el servidor.
Tipo host
check host tal.cual.pascual.com witch address tal.cual.pascual.com
if failes port 80 protocol http and resquest “/index.htm”
then alert with the mail-format {subject:tal.cual.pascual.com caido}
if failed port 21 protocol ftp with 15 seconds then alert and exec “/ftp/iniciarftp.sh”
alert mail@mail.com
configuración típica del un servidor en el que tememos un apache y un ftp. Si fueran otros protocolos seria igual, indicando el protocolo y el puerto que usa.
check host tal.cual.pascual.com witch address tal.cual.pascual.com
Le decimos que chequee este hots
if failes port 80 protocol http and resquest “/index.htm”
then alert with the mail-format {subject:tal.cual.pascual.com caido}
si falla el protocolo http por el puerto 80 y no hay respuesta de index.html, que alerte y además envie un mail al que se especifico en las entradas globales con el subject tal.cual.pascual.com caido y además alerte.
if failed port 21 protocol ftp with 15 seconds then alert and exec “/ftp/iniciarftp.sh”
Si falla el ftp por el puerto 21, pasados 15 segundos, que alerte y ejecutara el escritp que estar en la ruta
“/ftp/iniciarftp.sh”, en vez de un escrip, podemos decirle que ejecute cualquier programa de nuesto Linux, indicandole la ruta y los parametor ejemplo:
exec “/bin/ls -l”
alert mail@mail.com
Las alertas las mandara a esta mail.
Dependencias entre dos procesos:
Puede darse el caso que un proceso dependa de otro para su correcto funcionamiento, podemos representar estas dependencias en monit
check process apache2 with pidfile “/usr/local/apache2.pif”
......
depends on httpd
check file httpd witch path /etc/init.d/httpd
...
Así decimos que el proceso apache2 depende de otro llamado httpd y ejecutaremos la acccion que queramos..
Tipo Fichero
check file http.conf with paht /etc/httpd/http.conf
if change checksum then exec “/bin/apachectl grafeful”
Aquí estamos monitorizando el archivo de configuración de httpd.
if change checksum alert
Le decimos que utilice el comando graceful, que hace que apache recoja los cambios
check file access_log with paht /etc/apache/access_log
if size > 100 Mb then exec “/sbin/logratate -f rotate_apache_now”
Estamos monitorizando el archivo que guarda los datos de la gente que entra a navegar a nuestra web.
if size > 100 Mb then exec “/sbin/logratate -f rotate_apache_now”
Si el tamaño es mayor a 100 megas, use el comando logratate -f rotate_apache_now que rote el archivo.
Tipo directorio
check directory sbin with path /sbin
if changed timestamp then alert
Comprueba el directorio /sbin
Si se poduce un cambio nos da una alerta.
Esto nos puede ser necesario si cada z tiempo tiene que producirse un cambio en un directorio, ya sea por un backup o lo que sea, sabremos que si el cambio no se produce que ha habido un error.
check directory bakup with path /bakup_hora
if timestamp >1 hour ten alert
comprueba que cada hora se produzca un cambio del directorio bakup_hora, sino, avisa con alerta.
Tipo dispositivo.
Podemos monitorizar los dispositivos de /dev/, como discos duros...
check device home with path /dev/hda2
start = “/bin/mount /dev/hda2”
stop = “/bin/umount /dev/hda2”
if space usage > 90% then alert
if space usage > 99% then stop
if inode usage > 90% then alert
if inode usage > 99% then stop
Le decimos que el dispositivo hda2, que es el home, le este monitorizando, si pasa del 90 de uso de espacio o inodos, nos avisa, si nos pasamos del 99% lo desmonta.
Podemos añadir a cada monitorización la siguiente clausula a cualquiera monitorización
group normbre.
Donde nombre es el que queramos. Esto nos sirve para agrupar procesos monitorizados.
Para que queremos esto?
Si queremos parar todos los procesos de un grupo, prodremos hacerlo desde consola
monit -g web stop all
Así todos los procesos del grupo web los paramos o
monit -g web restart
monit -g web start
Reiniciando o iniciando los servicios a su vez.
monit stop all
monit start all
monir restart all
Podremos para, iniciar o reiniciar todo los procesos.