Cómo instalar y configurar Monit para vigilar y monitorizar sus servidores

Este artículo asume que utilizará el Servidor Ubuntu 20.04 o 24.04.

Motivación

Monit es una herramienta sencilla y ligera para monitorizar y gestionar servicios, procesos, archivos y sistemas de archivos en su servidor Linux. Sus capacidades proactivas lo convierten en una gran opción para la automatización de servidores. A continuación se detallan los pasos para instalar, configurar y utilizar Monit en Ubuntu Server 20.04 y 24.04.

Alternativas

Netdata viene con WordOps y hace un gran trabajo mostrando las estadísticas de su servidor. Pero no tiene las características de monitoreo proactivo que ofrece Monit. Otras herramientas como Kibana, Zabbix y Nagios también son populares, pero son más difíciles de configurar y consumen más recursos del sistema.

Instalar Monit

Por suerte, Monit está incluido en el repositorio del Ubuntu, así que vamos a instalarlo:

sudo apt update
sudo apt install monit

Configuración básica

El archivo de configuración principal de Monit se encuentra en /etc/monit/monitrc. Antes de editar, es una buena idea crear una copia de seguridad:

sudo cp /etc/monit/monitrc /etc/monit/monitrc.backup

Por defecto, Monit comprueba los servicios cada 2 minutos (120 segundos). Puede modificar este valor en el archivo editando la línea siguiente. Preferimos que las comprobaciones se realicen cada 1 minuto:

set daemon 60

Monit viene con su propio servidor de correo, pero como necesitamos algo más robusto y ya hemos configurado Sendmail, vamos a usarlo como nuestro MTA, apuntando la configuración a localhost (este parámetro está comentado por defecto, así que puedes simplemente pegar encima):

set mailserver localhost

En formato de correo definen todos los aspectos de la estructura de su correo electrónico, por lo que tendrá que descomentar todas sus líneas, y la configuración mínima es sólo cambiar su dirección de correo electrónico FROM:

de: Monit <mo************@*****le.com>

Establezca un correo electrónico que recibirá todas las alertas de Monit, normalmente el correo electrónico de su propia empresa:

establecer alerta al****@*****le.com

Monit utiliza su interfaz HTTP integrada tanto para proporcionar una página de estado basada en web como para manejar comandos de línea de comandos. Incluso si no desea habilitar la interfaz web, debe proporcionar un bloque de configuración válido y completo para establecer un punto final y gestionar Monit correctamente.

establezca el puerto httpd 2812 y utilice la dirección localhost
 permitir localhost
 allow admin:monit # require user 'admin' with password 'monit'

Para permitir el acceso remoto, cambie localhost a la IP o dominio del servidor apropiado, y establezca las credenciales de autenticación segura.

Incluir archivos de configuración adicionales:

Aparte de su archivo de configuración principal, Monit puede incluir archivos de configuración adicionales de /etc/monit/conf-enabled/. Añadiremos varios monitores dentro de este directorio, cubriendo la mayoría de los servicios que utilizamos en nuestro servidor, pero empecemos por el más importante, la seguridad.

Supervisar los inicios de sesión SSH correctos

Esta es una primera alerta crucial, ya que necesitamos saber cada vez que alguien hace un inicio de sesión con éxito en nuestro servidor a través de SSH. Esta alerta fue proporcionada por Shireesh en Elitmus y lo llamaremos ssh_logins.conf:

comprobar archivo ssh_logins con ruta /var/log/auth.log
  ignorar coincidencia "/etc/monit/whitelist_ips.regex"
  si coincide con "Accepted publickey" entonces alerta

Añade una IP por línea en el archivo /etc/monit/whitelist_ips.regex o coméntalo/elimínalo si quieres recibir todas las alertas.

Supervisar la pila LEMP

Acertadamente llamado lemp.conf este monitor cubre los recursos de nuestros sistemas, como almacenamiento, CPU y RAM, NGINX, PHP y MySQL, que en nuestro caso es MariaDB. La fórmula para loadavg es 1,5 * número de núcleos de CPU:

# Comprueba el uso del sistema de archivos raíz
comprueba el sistema de archivos rootfs con la ruta /
    si el uso de espacio > 90% entonces alerta # Alerta si el uso de espacio en disco excede 90%

# Comprueba las métricas de rendimiento del sistema en localhost
comprobar sistema localhost
    if loadavg (1min) > 6 then alert # Alerta si la media de carga de 1 minuto supera 6
    if loadavg (5min) > 4 then alert # Alerta si la media de carga de 5 minutos supera el 4
    si el uso de memoria > 90% entonces alerta # Alerta si el uso de memoria excede 90%
    # Alerta si el uso de la CPU supera 80% durante 15 comprobaciones consecutivas
    si el uso de cpu > 80% durante 15 ciclos entonces alerta # Uso total de CPU
    si uso CPU (usuario) > 70% entonces alerta # Uso CPU Usuario
    si uso cpu (sistema) > 30% entonces alerta # Uso CPU Sistema
    if cpu usage (wait) > 20% then alert # Uso de CPU en espera de E/S

# Comprueba el proceso del servidor web Nginx (HTTPS)
comprobar proceso nginx con pidfile /var/run/nginx.pid
    start programa = "/usr/sbin/service nginx start"
    stop programa = "/usr/sbin/service nginx stop"
    if cpu > 80% for 2 cycles then alert # Alerta si el uso de la CPU supera los 80% durante 2 comprobaciones consecutivas
    si falla host 127.0.0.1 puerto 443 protocolo https entonces reiniciar # Reiniciar si Nginx no responde en HTTPS

# Compruebe el proceso del servidor de base de datos MySQL
compruebe el proceso mysqld con pidfile /var/run/mysqld/mysqld.pid
    start programa = "/usr/sbin/service mysql start"
    stop programa = "/usr/sbin/service mysql stop"
    if cpu > 80% for 2 cycles then alert # Alerta si el uso de la CPU supera los 80% durante 2 comprobaciones consecutivas
    if failed unixsocket /var/run/mysqld/mysqld.sock then restart # Reinicie MySQL si el socket Unix no responde

# Comprueba el proceso PHP-FPM para PHP 8.3
revise el proceso php8.3-fpm con el archivo pid /var/run/php/php8.3-fpm.pid
    iniciar programa = "/usr/sbin/service php8.3-fpm start"
    stop programa = "/usr/sbin/service php8.3-fpm stop"
    si cpu > 80% durante 2 ciclos entonces alerta # Alerta si el uso de CPU excede 80% durante 2 comprobaciones consecutivas

Supervisar Redis

Vamos a añadir la monitorización de Redis en un archivo separado, redis.confya que no es crucial para el funcionamiento de WordPress y puede desactivarse si es necesario:

# Monitorización de Redis (usando socket Unix)
comprobar proceso redis con pidfile /var/run/redis/redis-server.pid
    start programa = "/usr/sbin/service redis-server start"
    stop programa = "/usr/sbin/service redis-server stop"
    
    # Monitorización de los recursos del proceso
    si el uso de cpu > 80% durante 5 ciclos entonces alerta
    si uso de memoria > 75% entonces alerta
    si children > 255 durante 5 ciclos entonces alerta
    
    grupo redis

# Comprueba si hay errores en el archivo de registro de Redis
comprueba el archivo redis_log con la ruta /var/log/redis/redis-server.log
    si coincide con "ERROR" entonces alerta
    si coincide "CRITICAL" entonces alerta
    grupo redis

Monitor Fail2Ban

Utilizando la misma metodología, añadamos fail2ban.conf:

comprobar proceso fail2ban con pidfile /var/run/fail2ban/fail2ban.pid
    grupo servicios
    start programa = "/etc/init.d/fail2ban force-start"
    stop programa = "/etc/init.d/fail2ban stop"
    si falla unixsocket /var/run/fail2ban/fail2ban.sock entonces reiniciar
    si 5 reinicios en 5 ciclos entonces timeout

comprueba el archivo fail2ban_log con la ruta /var/log/fail2ban.log
    si coincide con "ERROR|WARNING" entonces alerta

Supervisar ClamAV

Necesitamos saber si ClamAV, que instalamos anteriormente, encuentra algún virus o malware en nuestro servidor, por lo que nuestro clamav.conf mira esto:

# Observe el archivo de registro de ClamAV en busca de cambios que indiquen una detección
comprueba el archivo clamav_log con la ruta /var/log/clamav/clamav.log
  if match "FOUND" then alert

Supervisar la integridad de los archivos sensibles

Monit puede vigilar los archivos importantes o aquellos que probablemente no deberían cambiar tan a menudo y nos alerta cada vez que eso ocurre. Esta actividad se suele llamar "monitorización de la integridad de los archivos", así que nuestro archivo conf se llama fim.conf y dentro de él puedes listar tus archivos así:

# Comprobación de cambios en el archivo de configuración de WordPress
comprueba el archivo wp_config con la ruta /var/www/ejemplo.com/wp-config.php
    si se cambia la suma de comprobación entonces alerta

compruebe el archivo whitelist_ips con la ruta /etc/monit/whitelist_ips.regex
    si cambia la suma de comprobación, alerta

Activar e iniciar el servicio Monit

Permite que Monit se inicie automáticamente al arrancar:

sudo systemctl enable monit

A continuación, inicie el servicio Monit:

sudo systemctl start monit

Puede comprobar el estado del servicio Monit con:

sudo systemctl status monit

Probar la configuración de Monit

Antes de poner su configuración de Monit en producción, pruébela:

sudo monit -t
sudo monit reload
sudo monit status

En estado del monitor listará todos los servicios y procesos actualmente monitorizados por Monit.

Si hay errores de configuración, Monit los mostrará y usted podrá corregirlos en consecuencia.

¿Te ha resultado útil esta página?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *