Tutorial: Monitorizar un servidor con monit

Posted by alexmoreno on Wed, 25/01/2012 - 13:14

Monit ha sido para mi el descubrimiento del año. Por norma general, un servidor suele tener caidas por diferentes causas. Picos de tráfico, exceso de volumen del mismo, ...

Estas caidas provocan bastante estres a cualquier sysadmin o a alguien que tiene asignado un servidor cuyo tráfico (por suerte) va creciendo paralelamente con el proyecto.

Monit se encarga de monitorizar los servicios o demonios que le indiques, y en caso de que se cumplan determinados requisitos, los reinicia o directamente los arranca.

Instalación en Debian:

apt-get install monit

Facil, verdad? Procedemos a la configuración:

vim /etc/monit/monitrc

lo más importante, estas lineas que definen lo que vamos a monitorizar:

 

  check process apache with pidfile /var/run/apache2.pid  # /usr/local/apache/logs/httpd.pid
    start program = "/etc/init.d/apache2 start" with timeout 60 seconds
    stop program  = "/etc/init.d/apache2 stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if totalmem > 200.0 MB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then stop
    #if failed host localhost port 80 protocol http
       #and request "/somefile.html"
    #   then restart
    #if failed port 443 type tcpssl protocol http
    #   with timeout 15 seconds
    #   then restart
    if 3 restarts within 5 cycles then timeout
    #depends on apache_bin
    group server

 

En este caso, apache. Una vez listo, reiniciamos

sudo service monit  restart

Y tan fácil como que ya está el monitor en marcha. 

Podemos incluir algunas lineas pare enviarnos un email en caso de caida o incidencia y algunas florituras más.

Para tener todo un poco ordenado, podemos añadir la siguiente directiva:

 

include /etc/monit/conf.d/*

 

Con lo que a partir de ahora podemos añadir ficheros de configuración al directorio monit/conf.d/, por ejemplo, mysql.monitrc:

 

check process mysql with pidfile /var/run/mysqld/mysql.pid    # /var/run/mysqld/mysqld.pid
group database
start program = "/etc/init.d/mysql start"
stop program = "/etc/init.d/mysql stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout

 

Error típico, mysql a veces no crea un fichero pid, imprescindible para que monit pueda encontrar el servicio y comprobar que está activo. Solución? Editamos my.conf, /etc/mysql/my.cnf  en el caso de debian, y añadimos el pid-file:

 

pid-file        = /var/run/mysqld/mysqld.pid

 

Es importante que lo incluyamos dentro de [mysqld]

Lo dicho, todos nos vamos más tranquilos de vacaciones sabiendo que un amigo se encarga de vigilar nuestro servidor a nivel de demonios y servicios activos :-)