Munin es un software para monitorizar i graficar que nos permite analizar el estado de nuestros sistemas.

Introducción
Funciona como un Cacti o Graphite pero a diferencia de estos dos Munin funciona con agentes. Esto podría ser un hándicap pero veremos que nos va ayudar mucho en la instalación y mantenimiento del entorno.
Hay dos partes, la cliente “munin-node” y la servidor “munin”
Aquí tenemos una imagen que nos va ayudar a entender cómo funciona.

El munin-master (servidor) se ejecuta cada 5 minutos desde el crond i ejecuta varios scripts;
Munin-update: Este se encarga de leer el fichero /etc/munin/munin.conf y recoger todos los clientes. Posteriormente se conecta por el puerto 4949/tcp i le dice al “munin-node” que ejecute todos los scripts que tiene en /etc/munin/plugins/ y le devuelva el resultado.
Munin-limites: Este analiza los datos obtenidos de los clientes y revisa si algunos de ellos está por encima del umbral marcado en la gráfica. En caso de ser así actualiza el estado de la gráfica a “Warning” o “Critical”.
Munin-html: Se encarga de actualizar la web. Si ponemos nuevos nodos o dominios este actualizara la web. (Este no hace nada ejecutándose desde cron si está configurado como cgi)
Munin-graph: “La joya de la corona”. Usando las librerías de RRD-Tool y con los valores de “munin-update” se encarga de generar las gráficas. (Este no hace nada ejecutándose desde cron si está configurado como cgi)
Para “munin-html” y “munin-graph” los configuraremos como CGI. Las diferencias son;
Cron: Cuando lo configuramos como cron estos scripts generan todas las web y todas las gráficas cada vez que se ejecuta el script. En caso de tener unos 50 nodos en 5 minutos hay tiempo suficiente para realizar la tarea.
CGI: Configuraremos como CGI cuando tengamos muchos nodos. En mi instalación actualmente tengo 300 nodos con un total de 70.000 ficheros rrd y en 5 minutos no hay tiempo para procesarlo todo. Con esto lo que hacemos es que cada vez que entres en la web “munin-html” generará dicha web y cada vez que entres en un nodo “munin-graph” generará las gráficas que quieres visualizar.
Instalación (servidor)
En este caso vamos a realizar una instalación en una RedHat 5.9 64bits utilizando EPEL.
Registramos la maquina en RedHatNetwork, RedHat Satellite o usando un cd. (Basicamente necesitamos poder ejecutar yum)
Instalamos EPEL
cd /tmp/
wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
rpm -Uvh /tmp/epel-release-5-4.noarch.rpm
Instalamos munin y munin-node (asi también monitorizamos en servidor)
yum install httpd mod_fcgid munin munin-node

chkconfig munin on
chkconfig munin-node on
Configuración (servidor)
El fichero principal de configuración es /etc/munin/munin.conf
Lo modificaremos poniendo solo los siguientes datos;
htmldir /var/lib/www/html/munin #### (es el directorio de la web)
logdir /var/log/munin
includedir /etc/munin/conf.d
graph_period minute
graph_strategy cgi ##### Tiene que estar en cgi no en cron
cgiurl_graph /munin-cgi/munin-cgi-graph #### Es la URL donde tiene los scripts de CGI (lo veremos al configurar el apache)
html_strategy cgi ##### Tienen que estar en cgi no en cron
max_processes 100 ##### Por defecto viene en 16. Son los procesos que creara al ejecutar el munin-update. Si tienes mucha maquina pon un valor más alto. Aun así es bueno realizar varias pruebas hasta encontrar un buen valor.
##### Esto es un ejemplo de cómo crear un nodo cliente. Estos nodos son los que el script “munin-update” se conecta
[NODO_CLIENET.TEST]
address 192.168.0.1
use_node_name yes
Para más información de posibles configuraciones (LINK) http://munin-monitoring.org/wiki/munin.conf
Ahora ya tenemos configurado el munin para CGI, pero nos queda el apache…
Configuración APACHE para CGI:
En la configuración del apache tenemos que notificarle donde están los scripts para CGI.
Vamos al fichero /etc/httpd/conf.d/munin.conf
Comentaremos las líneas para entender posibles modificaciones.
<VirtualHost *:443> ### En mi caso uso SSL con certificado
SSLEngine on
SSLCertificateFile /etc/httpd/cert/selfsigned/munin.node.es.crt
SSLCertificateKeyFile /etc/httpd/cert/selfsigned/keys/ munin.node.es.key
ServerName munin.node.es
DocumentRoot /var/lib/www/html ###Importante que sea el mismo que hemos puesto en el fichero /etc/munin/munin.conf
<IfModule !mod_rewrite.c>
Alias /munin-cgi/munin-cgi-html/static /var/lib/www/html/munin/static ## Lo que hacemos en indicarle donde esta la web (parte estatica). Esto se ejecuta cada vez que entramos en la web
RedirectMatch ^/$ /munin-cgi/munin-cgi-html/
</IfModule>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^/favicon.ico /var/lib/www/html/munin/static/favicon.ico [L]
RewriteRule ^/static/(.*) /var/lib/www/html/munin/static/$1 [L]
# HTML (Cada vez que llamemos a una html este llamara al script munin-cgi-html
RewriteRule ^(/.*.html)?$ /munin-cgi/munin-cgi-html/$1 [PT]
# Images (Cada vez que solicitemos una grafica este llamara al script munin-cgi-graph
RewriteRule ^/munin-cgi/munin-cgi-graph/(.*) /$1
RewriteCond %{REQUEST_URI} !^/static
RewriteRule ^/(.*.png)$ /munin-cgi/munin-cgi-graph/$1 [L,PT]
</IfModule>
# Nos tenemos que asegurar que los script que están en /var/lib/www/cgi-bin/ son ejecutables
ScriptAlias /munin-cgi/munin-cgi-graph /var/lib/www/cgi-bin/munin-cgi-graph
<Location /munin-cgi/munin-cgi-graph>
Options +ExecCGI
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule mod_fastcgi.c>
SetHandler fastcgi-script
</IfModule>
<IfModule !mod_fastcgi.c>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</IfModule>
Allow from all
</Location>
ScriptAlias /munin-cgi/munin-cgi-html /var/lib/www/cgi-bin/munin-cgi-html
<Location /munin-cgi/munin-cgi-html>
Options +ExecCGI
<IfModule mod_fcgid.c>
SetHandler fcgid-script
</IfModule>
<IfModule mod_fastcgi.c>
SetHandler fastcgi-script
</IfModule>
<IfModule !mod_fastcgi.c>
<IfModule !mod_fcgid.c>
SetHandler cgi-script
</IfModule>
</IfModule>
Allow from all
</Location>
<IfModule !mod_rewrite.c>
<Location /munin-cgi/munin-cgi-html/static>
Options -ExecCGI
SetHandler None
</Location>
</IfModule>
</VirtualHost>
Configuración (cliente)
Para el cliente editaremos el fichero /etc/munin/munin-node.conf y pondremos la IP del host servidor como una expresión regular;
allow ^192.168.0.2$
Información oficial de configuración de munin-node (LINK) http://munin-monitoring.org/wiki/munin-node.conf