[Objetivo]
========
Instalar Monit y configurarlo para monitorear los servicios básicos de un servidor web http, dns, MySQL, mail, carga y memoria del servidor
[A quien va dirigido]
===============
Administradores de sistema, propietarios de servidores dedicados que desean monitorear servicios y ejecutar acciones si el servicio no responde (como recibir alertas o reiniciar el servicio)
[Introducción - Que es Monit ]
=======================
Monit es una excelente herramienta para administradores de sistemas, permite monitorear diferentes servicios y reaccionar en caso de fallas, desde simples alertas por email hasta complejas ordenes, monit es altamente configurable, incluye una interfaz web desde donde podemos ver el status de los servicios e incluso reiniciarlos (opcional)
[Como funciona]
============
Una vez instalado, Monit verifica el status de los servicios configurados (por ejemplo cada 60 segundos) en caso de detectar una anomalía, reacionará tal como lo programamos, ya sea enviando un alerta al administrador o intentando corregir la situación de manera automática, todo depende de la configuración particular que realicemos, puede ser usado para monitorear una vasta variedad de servicios, los test se realizan localmente, sin embargo es posible configurarlo para que realice test en servidores remotos.
[Requerimientos]
============
Monit no tiene requerimientos, más allá de perl, make (incluidos en casi todo servidor Linux)
[Instalación]
=========
Para instalar monit, como root en el servidor ejecutemos los siguientes comandos:
Código:
cd /usr/local/src
wget http://www.tildeslash.com/monit/dist/monit-4.9.tar.gz
tar zxvf monit-*
cd monit*
./configure --without-ssl
make && make install
Ya tenemos instalado monit, ahora vamos a instalar una pequeña utilidad para arrancar monit como demonio (daemon), para ello ejecutamos los siguientes comandos desde el mismo directorio donde descomprimimos monit
Código:
cp contrib/rc.monit /etc/init.d/monit
chmod 755 /etc/init.d/monit
ln -s /usr/local/bin/monit /usr/bin/monit
Un último paso en la instalación antes de pasar a la configuración (solo aplica si tienes apache instalado y deseas monitorearlo con monit):
Localiza el directorio root document de apache, normalmente lleva el nombre de htdocs dentro de el crear una carpeta llamada monit y dentro de monit crear un archivo llamado token, el contenido de este archivo es irrelevante
ahora visita
http://0.0.0.0/monit/token (cambia 0.0.0.0) por la ip de tu servidor (la usada por apache) 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 monit]
Monit incluye un archivo de configuración ubicado en /etc, sin embargo en este artículo, crearemos una configuración jerárquica de monit para ello crearemos el directorio monit en /etc
Código:
touch /etc/monitrc
mkdir /etc/monit
Ahora editaremos el archivo de configuración, copia y pega todo el siguiente bloque y luego edita /etc/monitrc para que cambies los valores necesarios.
Código:
cat<<EOF >> /etc/monitrc
# Monit control file
# ==================
# Monit global settings:
# ----------------------
set daemon 60
set logfile syslog facility log_daemon
set mailserver localhot
set mail-format {
from: root@localhost
subject: $SERVICE $EVENT at $DATE
message: Monit $ACTION $SERVICE at $DATE on $HOST: $DESCRIPTION.
}
set alert yo@micorreo.com
set httpd port 2812 and
# SSL ENABLE
# PEMFILE /var/certs/monit.pem
allow admin:password #[cambiar]
# Configuration Files:
# --------------------
#include /etc/monit/server.monit
#include /etc/monit/httpd.monit
#include /etc/monit/mysqld.monit
#include /etc/monit/named.monit
EOF
Ya hemos configurado monit, ahora solo basta decirle que es lo que debe monitorear y que hacer en caso de anomalías.
Observe que he establecido algunos "include" esto es para tener todo mejor organizado y fácilmente poder activar o desactivar algún monitor solo comentando o descomentando la linea include /etc/monit/servicio.monit
Procedemos a crear los archivos para cada servicio (Luego podrás crear tus propios archivos para otros servicios adicionales)
Código:
touch /etc/monit/server.monit
touch /etc/monit/httpd.monit
touch /etc/monit/mysqld.monit
touch /etc/monit/named.monit
Abrimos /etc/monit/server.monit y le copiamos el siguiente contenido, adaptando los valores para su servidor:
Código:
# Monit Server settings:
# ----------------------
check system hostname # cambiar por el nombre de su servidor
if loadavg (1min) > 2 for 3 cycles then alert
if loadavg (5min) > 4 for 2 cycles then alert
if memory usage > 75% then alert
if cpu usage (user) > 70% then alert
if cpu usage (system) > 30% then alert
if cpu usage (wait) > 20% then alert
Grabar los cambios
Abrimos /etc/monit/httpd.monit y copiamos:
Código:
check process httpd # cambiar por el nombre del proceso
with pidfile "/ruta_al_archivo_pid/httpd.pid" # cambiar por el archivo del servidor apache
start program = "/etc/init.d/httpd start" # cambiar si es necesario
stop program = "/etc/init.d/httpd stop" # cambiar si es necesario
if failed host localhost port 80 protocol HTTP request "/monit/token" then restart
if cpu > 60% for 2 cycles then alert
if cpu > 80% for 5 cycles then alert
if totalmem > 75% for 5 cycles then alert
if children > 250 then alert
if 5 restarts within 5 cycles then timeout
Realizamos ahora la misma operación con /etc/monit/mysqld.monit e incluimos:
Código:
check process mysql # cambiar por el nombre del proceso
with pidfile "/var/run/mysqld/mysqld.pid" #cambiar por la ruta y archivo pid
start program = "/etc/init.d/mysqld start" #cambiar de ser necesario
stop program = "/etc/init.d/mysqld stop" #cambiar de ser necesario
if failed host localhost port 3306 protocol MYSQL then restart
if 5 restarts within 5 cycles then timeout
y por último hacemos lo mismo con el archivo named.monit e incluimos:
Código:
check process named # cambiar por el nombre del proceso
with pidfile "/hsphere/local/var/named/named.pid" #cambiar por la ruta y archivo pid
start program = "/etc/init.d/named start" #cambiar de ser necesario
stop program = "/etc/init.d/named stop" #cambiar de ser necesario
if failed host 127.0.0.1 port 53 type tcp protocol dns then restart
if failed host 127.0.0.1 port 53 type udp protocol dns then restart
if 5 restarts within 5 cycles then timeout
Ahora solo nos resta verificar la instalación y arrancar el servicio:
Código:
chkconfig --level 345 monit on # configura monit para que arranque con el servidor
/etc/init.d/monit start # arrancamos monit
monit status # muestra el status de los servicios monitoreados
La página oficial de monit es
http://www.tildeslash.com/monit/ incluye muchos ejemplos prácticos de configuración.
[Advertencia]
==========
El autor no toma ninguna responsabilidad por cualquier efecto indeseado que la aplicación de los comandos aquí descritos puedan ocasionar, el manejo de servidores de producción requiere de un
administrador de sistemas experimentado Novatos: utilicen un sistema de pruebas para aprender NO sus servidores de producción.
Se agradece reportar al autor cualquier error encontrado o actualizaciones necesarias.
Autor: Guillermo Calvo