Monitoreo Servidores · 6 min read · Oct 08, 2025

El Clúster Web Perfecto Balanceado y de Alta Disponibilidad Con 2 Servidores Ejecutando Xen En Ubuntu 8.04 Hardy Heron - Página 7

13. Monitoreo de Servidores Con munin Y monit (web1, web2)

En este capítulo describiré cómo puedes monitorear tu nodo de servidores web con munin y monit. Munin produce gráficos útiles sobre casi todos los aspectos de tu servidor (promedio de carga, uso de memoria, uso de CPU, rendimiento de MySQL, tráfico de eth0, etc.) sin mucha configuración, mientras que monit verifica la disponibilidad de servicios como Apache, MySQL, Postfix y toma la acción apropiada como un reinicio si encuentra que un servicio no se comporta como se esperaba. La combinación de ambos te brinda un monitoreo completo: gráficos que te permiten reconocer problemas actuales o futuros (como “Necesitamos un servidor más grande pronto, nuestro promedio de carga está aumentando rápidamente.”), y un watchdog que asegura la disponibilidad de los servicios monitoreados.

Aunque munin te permite monitorear más de un servidor, solo discutiremos el monitoreo del sistema donde está instalado aquí.

13.1 Instalar Y Configurar munin

apt-get install munin munin-node

A continuación, debemos editar el archivo de configuración de munin /etc/munin/munin.conf.

mv /etc/munin/munin.conf /etc/munin/munin.conf.bak
vi /etc/munin/munin.conf

En web1.example.com

dbdir   /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir  /var/log/munin
rundir  /var/run/munin
tmpldir /etc/munin/templates
[web1.example.com]
    address 127.0.0.1
    use_node_name yes

En web2.example.com

dbdir   /var/lib/munin
htmldir /var/www/example/web/monitoring
logdir  /var/log/munin
rundir  /var/run/munin
tmpldir /etc/munin/templates
[web2.example.com]
    address 127.0.0.1
    use_node_name yes

En web1 Y web2

A continuación, creamos el directorio /var/www/example/web/monitoring y cambiamos su propiedad al usuario y grupo munin, de lo contrario, munin no podrá colocar su salida en ese directorio. Luego reiniciamos munin:

mkdir -p /var/www/example/web/monitoring
chown munin:munin /var/www/example/web/monitoring
/etc/init.d/munin-node restart

Ahora es una buena idea proteger con contraseña el directorio /var/www/example/web/monitoring a menos que desees que todos puedan ver cada pequeña estadística sobre tu servidor.

Para hacer esto, creamos un archivo .htaccess en /var/www/example/web/monitoring:

vi /var/www/example/web/monitoring/.htaccess

AuthType Basic
AuthName "Solo para Miembros"
AuthUserFile /var/www/example/monitoring/.htpasswd

require valid-user

Luego debemos crear el archivo de contraseñas /var/www/example/.htpasswd. Queremos iniciar sesión con el nombre de usuario admin, así que hacemos esto:

htpasswd -c /var/www/example/web/monitoring/.htpasswd admin

Ingresa una contraseña para admin, ¡y ya está!

Ahora puedes acceder a los informes (tomará unos minutos recopilar datos) en estas direcciones:

http://www.example.com:10001/monitoring para web1.example.com

y

http://www.example.com:20001/monitoring para web2.example.com.

13.2 Instalar Y Configurar monit

Para instalar monit, hacemos esto:

apt-get install monit

Ahora debemos editar /etc/monit/monitrc. El /etc/monit/monitrc predeterminado tiene muchos ejemplos, y puedes encontrar más ejemplos de configuración en http://www.tildeslash.com/monit/doc/examples.php. Sin embargo, en mi caso quiero monitorear proftpd, 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 test, y quiero que monit envíe alertas por correo electrónico a root@localhost, así que mi archivo se ve así:

En web1.example.com

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
#   start program = "/etc/init.d/vsftpd start"
#   stop program  = "/etc/init.d/vsftpd stop"
#   if failed host 192.168.1.104 port 21 protocol ftp then restart
#   if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
   group database
   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 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2.pid
   group www
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host 192.168.1.104 port 80  protocol http
      and request "/example/web/monit/token" then restart
   if cpu is greater than 60% for 2 cycles then alert
   if cpu > 80% 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
check process postfix with pidfile /var/spool/postfix/pid/master.pid
   group mail
   start program = "/etc/init.d/postfix start"
   stop  program = "/etc/init.d/postfix stop"
   if failed port 25 protocol smtp then restart
   if 5 restarts within 5 cycles then timeout
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
   group bind
   start program = "/etc/init.d/bind9 start"
   stop  program = "/etc/init.d/bind9 stop"
   if failed port 53 then restart
   if 5 restarts within 5 cycles then timeout

En web2.example.com

cp /etc/monit/monitrc /etc/monit/monitrc_orig
cat /dev/null > /etc/monit/monitrc
vi /etc/monit/monitrc

set daemon  60
set logfile syslog facility log_daemon
set mailserver localhost
set mail-format { from: [email protected] }
set alert [email protected]
set httpd port 2812 and
     SSL ENABLE
     PEMFILE  /var/certs/monit.pem
     allow admin:test
#check process vsftpd with pidfile /var/run/vsftpd/vsftpd.pid
#   start program = "/etc/init.d/vsftpd start"
#   stop program  = "/etc/init.d/vsftpd stop"
#   if failed host 192.168.1.105 port 21 protocol ftp then restart
#   if 5 restarts within 5 cycles then timeout
check process mysql with pidfile /var/run/mysqld/mysqld.pid
   group database
   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 5 restarts within 5 cycles then timeout
check process apache with pidfile /var/run/apache2.pid
   group www
   start program = "/etc/init.d/apache2 start"
   stop program  = "/etc/init.d/apache2 stop"
   if failed host 192.168.1.105 port 80  protocol http
      and request "/example/web/monit/token" then restart
   if cpu is greater than 60% for 2 cycles then alert
   if cpu > 80% 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
check process postfix with pidfile /var/spool/postfix/pid/master.pid
   group mail
   start program = "/etc/init.d/postfix start"
   stop  program = "/etc/init.d/postfix stop"
   if failed port 25 protocol smtp then restart
   if 5 restarts within 5 cycles then timeout
check process named with pidfile /var/lib/named/var/run/bind/run/named.pid
   group bind
   start program = "/etc/init.d/bind9 start"
   stop  program = "/etc/init.d/bind9 stop"
   if failed port 53 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://www.tildeslash.com/monit/doc/manual.php

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

if failed host www.example.com port 80 protocol http
      and request "/example/web/monit/token" then restart

lo que significa que monit intenta conectarse a www.example.com en el puerto 80 e intenta acceder al archivo /monit/token que es /var/www/example/web/monit/token porque la raíz del documento de nuestro sitio web es /var/www/example/web. Si monit no tiene éxito, significa que Apache no está en funcionamiento, y monit va a reiniciarlo.

En web1 Y web2

Ahora debemos crear el archivo /var/www/example/web/monit/token y escribir alguna cadena aleatoria en él:

mkdir /var/www/example/web/monit
echo “hello” > /var/www/example/web/monit/token

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

mkdir /var/certs
cd /var/certs

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

vi /var/certs/monit.cnf

# create RSA certs - Server
RANDFILE = ./openssl.rnd
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
[ req_dn ]
countryName = Country Name (2 letter code)
countryName_default = MO
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Monitoria
localityName                    = Locality Name (eg, city)
localityName_default            = Monittown
organizationName                = Organization Name (eg, company)
organizationName_default        = Monit Inc.
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = Dept. of Monitoring Technologies
commonName                      = Common Name (FQDN of your server)
commonName_default              = server.monit.mo
emailAddress                    = Email Address
emailAddress_default            = [email protected]
[ cert_type ]
nsCertType = server

Ahora creamos el certificado así:

openssl req -new -x509 -days 365 -nodes -config ./monit.cnf -out /var/certs/monit.pem -keyout /var/certs/monit.pem

openssl gendh 512 >> /var/certs/monit.pem

openssl x509 -subject -dates -fingerprint -noout -in /var/certs/monit.pem

chmod 700 /var/certs/monit.pem

Después editamos /etc/default/monit para habilitar el demonio monit. Cambia startup a 1 y establece CHECK_INTERVALS al intervalo en segundos que deseas que monit revise tu sistema. Elijo 60 (segundos) así que mi archivo se ve así:

vi /etc/default/monit

# Defaults for monit initscript
# sourced by /etc/init.d/monit
# installed at /etc/default/monit by maintainer scripts
# Fredrik Steen 
# You must set this variable to for monit to start
startup=1
# To change the intervals which monit should run uncomment
# and change this variable.
CHECK_INTERVALS=60

Finalmente, podemos iniciar monit:

/etc/init.d/monit start

Ahora apunta tu navegador a https://192.168.1.104:2812/ o https://192.168.1.105:2812/, inicia sesión con admin y test, y deberías ver la interfaz web de monit.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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