Instalar Monit para monitorizar un servidor Apache, MySQL y OpenSSH

Publicado en Linux el 10 de May de 2009 por Manel Pérez Mata
Tags: , , , ,

Monit LogoPara los que no esteis al caso, según su propia web, Monit es una utilidad gratuita de código abierto para la gestión y vigilancia de procesos, archivos, directorios y sistemas de ficheros en un sistema UNIX.

Configurado correctamente, Monit es capaz de realizar el mantenimiento y la reparación de los servicios, procesos… incluso ejecutar acciones programadas para situaciones de error.

Por poner un ejemplo, un uso común que se le suele dar es que vaya controlando si apache está funcionando correctamente, en caso de estar caido o saturado, Monit lo levantará automáticamente y nos enviará un mail informando del problema solventado.

Instalación de Monit

1) Descargamos la última versión estable de Monit (en mi caso la 5.0.1) de la página oficial, como lo instalaré en una debian, voy a la distribución en concreto, y me descargo el paquete deb para la arquitectura de mi máquina i386:

wget http://ftp.uk.debian.org/debian/pool/main/m/monit/monit_4.10.1-4_i386.deb

2) Y lo instalamos con el comando dpkg:

sudo dpkg -i monit_4.10.1-4_i386.deb

Si todo ha ido bien, obtendremos un resultado como este:

Selecting previously deselected package monit.
(Reading database ... 195390 files and directories currently installed.)
Unpacking monit (from monit_4.10.1-4_i386.deb) ...
Setting up monit (1:4.10.1-4) ...
Starting daemon monitor: monit won't be started/stopped
	unless it it's configured
	please configure monit and then edit /etc/default/monit
	and set the "startup" variable to 1 in order to allow
	monit to start

Llegados a este punto, ya tenemos instalado Monit en nuestro servidor Debian, ¿sencillo no?

Un último paso en la instalación antes de pasar a la configuración (sólo aplica si tienes apache instalado y deseas monitorizarlo con monit):

Localiza el directorio root document del servidor Apache que queramos monitorizar y dentro de él crear una carpeta llamada monit que contenga un archivo llamado token (el contenido de este archivo es irrelevante)

mkdir -p /PATH_TO_ROOT_FOLDER/monit/
touch /PATH_TO_ROOT_FOLDER/monit/token

Comprobaremos que todo ha ido bien visitando http://[IP_SERVER]/monit/token. Si no hay un error, es que apache ha podido leer correctamente el archivo /monit/token, en caso de error asegúrate de que has creado el archivo en la ubicación correcta y que apache puede leerlo.

Configuración de Alertas Monit

El fichero de configuración de Monit se encuentra en la ruta /etc/monit/monitrc, por defecto trae una serie de configuraciones definidas y comentadas que podremos utilizar para tener lista una configuración básica, con un poco de tiempo y paciencia, podeis ir añadiendo diferentes chequeos.

sudo vi /etc/monit/monitrc

Primero modificaremos la información de las alertas vía mail (recordad que debeis tener configurado en vuestro servidor un servidor de correo).

Añadimos la siguiente información en la sección Global Sectio modificando miMail@hotmail.com por el mail en el que queremos recibir las visitas y monit@myServer.com por el mail del que queremos que provenga, por ejemplo, monit@mi-dominio.com:

  1. set alert miMail@hotmail.com
  2.  
  3. set mail-format {
  4.    from: monit@myServer.com
  5.    subject: $SERVICE $EVENT at $DATE
  6.    message:
  7.  
  8.             Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
  9.             Yours sincerely,
  10.             monit
  11. }

Configuración de control de Apache

Añadimos la siguiente información al final de la sección Services

  1. check process apache with pidfile /var/run/apache2.pid
  2.    group www
  3.    start program = "/etc/init.d/apache2 start"
  4.    stop program  = "/etc/init.d/apache2 stop"
  5.    if failed host [IP_SERVER] port 80
  6.         protocol http request /monit/token then restart
  7.    if cpu is greater than 60% for 3 cycles then alert
  8.    if cpu > 80% for 5 cycles then restart
  9.    if totalmem > 400 MB for 5 cycles then restart
  10.    if children > 250 then restart
  11.    if loadavg(5min) greater than 10 for 8 cycles then stop
  12.    if 3 restarts within 5 cycles then timeout

NOTA!! Debemos modificar la ruta del fichero pid de apache a donde lo tengamos alojado. En Debian suele ser /var/run/apache2.pid y los valores que he colocado entre [] por los de nuestro servidor.

Explicado de un modo rápido, le estamos indicando que reinicie el servidor Apache si el servidor presenta uno de los siguientes sintomas:

  • No responde al visitar la url http://[IP_SERVER]/monit/token
  • Apache ocupa más del 80% de la CPU durante 5 ciclos de Monit
  • La memoria utilizada por Apache es superior a 400MB durante 5 ciclos de Monit
  • El proceso tiene más de 250 hijos

Que nos envíe un mail (siempre que tengamos configurado un servidor de correo) en caso de que:

  • Haya detectado uno de los problemas mencionados anteriormente
  • Apache ocupa más del 60% de la CPU durante 3 ciclos de Monit

Y parará el servidor en caso de error crítico avisandonos vía email.

Configuración de control de MySQL

Para configurar un chequeo del servidor MySQL, añadimos la siguiente información después del bloque configurado anteriormente:

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

NOTA!! Debemos modificar la ruta del fichero pid de mysql a donde lo tengamos alojado. En Debian suele ser /var/run/mysqld/mysqld.pid.

Configuración de control de OpenSsh

Para acabar este tutorial, configuraremos un control del servidor SSH, punto importante, pues si no podemos acceder físicamente a nuestro servidor y no podemos acceder mediante SSH porque este servicio ha caido, tenemos un pequeño problema :D .

Añadiremos el siguiente trozo de código acordandonos de cambiar la ruta al fichero sshd.pid a la correspondiente en nuestro servidor:

  1. check process sshd with pidfile /var/run/sshd.pid
  2.    start program  "/etc/init.d/ssh start"
  3.    stop program  "/etc/init.d/ssh stop"
  4.    if failed port 22 protocol ssh then restart
  5.    if 5 restarts within 5 cycles then timeout

Cabe remarcar la importancia de tener monitorizaciones cruzadas desde diferentes servidores, pues si, por poner un ejemplo, se corta la conexión en nuestro servidor de producción monitorizado desde la mísma máquina, a pesar de que monit lo detectará, intentará enviar emails que no llegarán (pues no tiene conexión). Para evitar esto y tenemos la suerte de disponer de varios servidores, podemos indicar al server1 que monitorice los servicios de server2 y en caso de fallar, que nos alerte vía mail para poder actuar en consecuencia.

Compártelo!! These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Meneame
  • BarraPunto
  • Technorati
  • Google Bookmarks
  • Facebook
  • LinkedIn
  • del.icio.us
  • Digg
  • Reddit
  • Live-MSN
  • MySpace
  • TwitThis
1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

Leave a Reply