Monitoreo Servidores · 6 min read · Oct 16, 2025

Monitoreo de Servidores con Munin y Monit en Debian 8 (Jessie) - Página 2

5 Instalar y Configurar Monit

Para instalar Monit, hacemos esto:

apt-get install monit

Ahora debemos editar /etc/monit/monitrc. El /etc/monit/monitrc por defecto tiene muchos ejemplos, y puedes encontrar más ejemplos de configuración en http://mmonit.com/monit/documentation/. Sin embargo, en mi caso quiero monitorear proftpd, sshd, mysql, apache y postfix, quiero habilitar la interfaz web de Monit en el puerto 2812, quiero una interfaz web https, quiero iniciar sesión en la interfaz web con el nombre de usuario admin y la contraseña howtoforge, y quiero que Monit envíe alertas por correo electrónico a root@localhost, así que mi archivo se ve así (he añadido ejemplos para otros demonios a la configuración para que puedas ajustar el archivo a tus necesidades):

cp /etc/monit/monitrc /etc/monit/monitrc_orig  
cat /dev/null > /etc/monit/monitrc  
nano /etc/monit/monitrc
set daemon 60  
set logfile syslog facility log_daemon  
set mailserver localhost  
set mail-format { from: [email protected] }  
set alert root@localhost  
set httpd port 2812 and  
 SSL ENABLE  
 PEMFILE /var/certs/monit.pem  
 allow admin:howtoforge  
  
check process sshd with pidfile /var/run/sshd.pid  
 start program "/usr/sbin/service ssh start"  
 stop program "/usr/sbin/service ssh stop"  
 if failed port 22 protocol ssh then restart  
 if 5 restarts within 5 cycles then timeout  
  
check process apache with pidfile /var/run/apache2/apache2.pid  
 group www  
 start program = "/usr/sbin/service apache2 start"  
 stop program = "/usr/sbin/service apache2 stop"  
 if failed host localhost port 80 protocol http  
 and request "/monit/token" then restart  
 if cpu is greater than 60% for 2 cycles then alert  
 if cpu > 80% for 5 cycles then restart  
 if totalmem > 500 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 timeout  
   
# ---------------------------------------------------------------------------------------------  
# NOTA: Reemplaza example.pid con el nombre pid de tu servidor, el nombre depende del hostname  
# ---------------------------------------------------------------------------------------------  
#check process mysql with pidfile /var/lib/mysql/example.pid  
# group database  
# start program = "/usr/sbin/service mysql start"  
# stop program = "/usr/sbin/service mysql stop"  
# if failed host 127.0.0.1 port 3306 then restart  
# if 5 restarts within 5 cycles then timeout  
  
#check process proftpd with pidfile /var/run/proftpd.pid  
# start program = "/usr/sbin/service proftpd start"  
# stop program = "/usr/sbin/service proftpd stop"  
# if failed port 21 protocol ftp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process postfix with pidfile /var/spool/postfix/pid/master.pid  
# group mail  
# start program = "/usr/sbin/service postfix start"  
# stop program = "/usr/sbin/service postfix stop"  
# if failed port 25 protocol smtp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process nginx with pidfile /var/run/nginx.pid  
# start program = "/usr/sbin/service nginx start"  
# stop program = "/usr/sbin/service nginx stop"  
# if failed host 127.0.0.1 port 80 then restart  
#  
#check process memcached with pidfile /var/run/memcached.pid  
# start program = "/usr/sbin/service memcached start"  
# stop program = "/usr/sbin/service memcached stop"  
# if failed host 127.0.0.1 port 11211 then restart  
#  
#check process pureftpd with pidfile /var/run/pure-ftpd/pure-ftpd.pid  
# start program = "/usr/sbin/service pure-ftpd-mysql start"  
# stop program = "/usr/sbin/service pure-ftpd-mysql stop"  
# if failed port 21 protocol ftp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process named with pidfile /var/run/named/named.pid  
# start program = "/usr/sbin/service bind9 start"  
# stop program = "/usr/sbin/service bind9 stop"  
# 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  
#  
#check process ntpd with pidfile /var/run/ntpd.pid  
# start program = "/usr/sbin/service ntp start"  
# stop program = "/usr/sbin/service ntp stop"  
# if failed host 127.0.0.1 port 123 type udp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process mailman with pidfile /var/run/mailman/mailman.pid  
# group mail  
# start program = "/usr/sbin/service mailman start"  
# stop program = "/usr/sbin/service mailman stop"  
#  
#check process amavisd with pidfile /var/run/amavis/amavisd.pid  
# group mail  
# start program = "/usr/sbin/service amavis start"  
# stop program = "/usr/sbin/service amavis stop"  
# if failed port 10024 protocol smtp then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-imap with pidfile /var/run/courier/imapd.pid  
# group mail  
# start program = "/usr/sbin/service courier-imap start"  
# stop program = "/usr/sbin/service courier-imap stop"  
# if failed host localhost port 143 type tcp protocol imap then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-imap-ssl with pidfile /var/run/courier/imapd-ssl.pid  
# group mail  
# start program = "/usr/sbin/service courier-imap-ssl start"  
# stop program = "/usr/sbin/service courier-imap-ssl stop"  
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-pop3 with pidfile /var/run/courier/pop3d.pid  
# group mail  
# start program = "/usr/sbin/service courier-pop start"  
# stop program = "/usr/sbin/service courier-pop stop"  
# if failed host localhost port 110 type tcp protocol pop then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process courier-pop3-ssl with pidfile /var/run/courier/pop3d-ssl.pid  
# group mail  
# start program = "/usr/sbin/service courier-pop-ssl start"  
# stop program = "/usr/sbin/service courier-pop-ssl stop"  
# if failed host localhost port 995 type tcpssl sslauto protocol pop then restart  
# if 5 restarts within 5 cycles then timeout  
#  
#check process dovecot with pidfile /var/run/dovecot/master.pid  
# group mail  
# start program = "/usr/sbin/service dovecot start"  
# stop program = "/usr/sbin/service dovecot stop"  
# if failed host localhost port 993 type tcpssl sslauto protocol imap then restart  
# if 5 restarts within 5 cycles then timeout

El archivo de configuración es bastante autoexplicativo; si no estás seguro sobre una opción, echa un vistazo a la documentación de Monit: http://mmonit.com/monit/documentation/monit.html

En la parte de apache de la configuración de Monit encuentras esto:

   if failed host localhost port 80 protocol http
      and request "/monit/token" then restart

lo que significa que Monit intenta conectarse a localhost en el puerto 80 y trata de acceder al archivo /monit/token que es /var/www/html/monit/token porque la raíz del documento de nuestro sitio web es /var/www/html. Si Monit no tiene éxito, significa que Apache no está en funcionamiento, y Monit lo reiniciará. Ahora debemos crear el archivo /var/www/html/monit/token y escribir alguna cadena aleatoria en él:

mkdir /var/www/html/monit  
echo "hello" > /var/www/html/monit/token

A continuación, creamos el certificado pem ( /var/certs/monit.pem) que necesitamos para la interfaz web de Monit cifrada con SSL:

mkdir /var/certs  
cd /var/certs

Necesitamos un archivo de configuración de OpenSSL para crear nuestro certificado. Puede verse así:

nano /var/certs/monit.cnf
# crear certificados RSA - Servidor

RANDFILE = ./openssl.rnd

[ req ]
default_bits = 2048
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type

[ req_dn ]
countryName = Nombre del País (código de 2 letras)
countryName_default = MO

stateOrProvinceName             = Nombre del Estado o Provincia (nombre completo)
stateOrProvinceName_default     = Monitoria

localityName                    = Nombre de la Localidad (por ejemplo, ciudad)
localityName_default            = Monittown

organizationName                = Nombre de la Organización (por ejemplo, empresa)
organizationName_default        = Monit Inc.

organizationalUnitName          = Nombre de la Unidad Organizativa (por ejemplo, sección)
organizationalUnitName_default  = Dept. de Tecnologías de Monitoreo

commonName                      = Nombre Común (FQDN de tu servidor)
commonName_default              = server.monit.mo

emailAddress                    = Dirección de Correo Electrónico
emailAddress_default            = [email protected]

[ cert_type ]
nsCertType = server

Ahora creamos el certificado de esta manera:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem
openssl gendh 1024 >> /var/certs/monit.pem
openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem
chmod 600 /var/certs/monit.pem

Finalmente, podemos iniciar Monit:

service monit start

Ahora apunta tu navegador a https://www.example.com:2812/ (asegúrate de que el puerto 2812 no esté bloqueado por tu firewall), inicia sesión con admin y howtoforge, y deberías ver la interfaz web de Monit. Debería verse así:

Administrador de servicios Monit - pantalla principal.

(Pantalla Principal)

Estado de sshd de Monit.

(Página de Estado de SSHd)

Dependiendo de tu configuración en /etc/monit/monitrc, Monit reiniciará tus servicios si fallan y enviará correos electrónicos de notificación si los IDs de proceso de los servicios cambian, etc.

Para obtener el estado de Monit en la terminal, ejecuta el comando “monit status”:

monit status

El comando mostrará el estado de todos los servicios monitoreados.

Estado de Monit en la terminal.

6 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.