Monitorizar mi servidor Ubuntu con Monit

En este post os vamos a explicar como instalar y configurar Monit en un servidor Ubuntu. Monit es un sistema de motorización para nuestros servidores que nos permite controlar el uso de recursos y servicios.

Monit está recomendado para monitorizar un servidor, si dispones de varios servidores hay otras alternativas como Zabbix o Nagios.
Al final de todo añadimos un enlace a la web Monit donde está toda la documentación sobre configuraciones.

Instalamos Monit en nuestro servidor

apt-get install monit

Activamos interfaz web Monit

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/web-interface contenido:
set httpd port 2812
use address 46.183.XXX.XXX #IP Pública de nuestro servidor Cloud
allow 0.0.0.0/0.0.0.0
allow admin:monit # usuario:contraseña cambiar estos datos por otros más seguros

Configuramos el Servidor SMTP para envío alertas

Omitir este paso si no queremos recibir avisos por email. Crearemos un fichero ejecutando: vi /etc/monit/conf.d/smtp-server contenido:
set mailserver mail.midominio.com port 587 # cambiar mail.midominio.com por tu servidor
username Usuario password "Contraseña" # cambiar Usuario y Contraseña
using TLSV1 with timeout 30 seconds
set alert alertas@midominio.com #email que recibirá alertas

Configuramos el formato de los emails de alerta

Omitir este paso si no queremos recibir avisos por email. Crearemos un fichero ejecutando: vi /etc/monit/conf.d/mail-format contenido:
set mail-format {
from: monit@midominio.com #indicar remitente válido para evitar que antispam filtren alertas
subject: monit alert -- $EVENT $SERVICE
message: $EVENT Service $SERVICE
Date: $DATE
Action: $ACTION
Host: $HOST
Description: $DESCRIPTION
Monit Clouding
}

Monitorizamos nuestro disco

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/disco contenido:
check filesystem "root" with path /dev/sda1
if space usage > 80% for 8 cycles then alert
if space usage > 99% then stop #para nuestro servidor para evitar que se llene
if inode usage > 80% for 8 cycles then alert
if inode usage > 99% then stop #para nuestro servidor para evitar que se llene

Monitorizamos Servidor Apache

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/apache contenido:
check process apache with pidfile /run/apache2/apache2.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 3 restarts within 5 cycles then unmonitor

Monitorizamos Servidor SSH

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/ssh contenido:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 3 restarts within 5 cycles then unmonitor

Monitorizamos Servidor MariaDB/MySQL

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/mysql contenido:
check process mysqld with pidfile /run/mysqld/mysqld.pid
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 3 restarts within 5 cycles then unmonitor

Monitorizamos el tamaño de un fichero

Crearemos un fichero ejecutando: vi /etc/monit/conf.d/size-log contenido:
check file error.log with path /var/log/mysql/error.log
if size > 100 MB then alert

Abrir Firewall Clouding

Para acceder a Monit vía web deberemos abrir el puerto TCP 2812 en el firewall de Clouding.
Monit-Firewall

Reniciar Monit

Una vez ya hemos configurado todos los servicios/recursos a monitorizar ya podemos reiniciar Monit:
monit reload

Ya podemos visitar la web http://46.183.XXX.XXX:2812 nos pedirá usuario y contraseña, debemos usar los configurados en “Activamos interfaz web Monit”
Aquí puedes ver el aspecto de Monit, hemos simulado un fallo de apache irrecuperable para ver como deja de monitorizar:

Si usas VestaCP

Si usas VestaCP tendrás que acceder a él y abrir también el puerto en el apartado del Firewall:

monit

Otras monitorizaciones

Basándote en los ejemplos anteriores se pueden monitorizar cualquier servicio solo tendremos que localizar el correspondiente pid, por ejemplo nos podemos basar en el ejemplo del SSH para CRON, el pid sería: /run/crond.pid
Puedes consultar la documentación de Monit en su web.

Para comentar sobre este artículo, rellena el formulario. Los campos marcados con un asterisco (*) son obligatorios.