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.
Deja una respuesta