oscarmlage.com

djangonaut, sysadmin and father x2

User Tools

Site Tools


temp

This is an old revision of the document!


Munin Server

Proveniente de la mitología nórdica, Muninn era uno de los dos cuervos que proveía al Dios Odín con información diaria de lo sucedido en todo el mundo. Nombre que ni pintado para un sistema de monitorización. La idea principal es montar el servicio de monitorización en un servidor central que consulte al resto de máquinas su estado, siguiendo un esquema cliente-servidor tenemos que:

  • Munin server → Servidor de monitorización.
  • Munin node → Máquina monitorizada (o cliente) por Munin.

La elección del servidor depende de cada infraestructura, pero sería interesante que esa máquina no tuviera ningún servicio asociado que monitorizar, puesto que si esa máquina fallara, los servicios asociados no podrían alertar del fallo.

Instalación

Basamos toda nuestra instalación en servidores Debian (o Debian like) así que la instalación no es demasiado complicada (nota, se requiere Apache o similar puesto que los datos que ofrece Munin son vía web):

(server)$ apt-get install munin munin-node munin-plugins-extra

Configuración

Para configurar el servicio abrimos su principal archivo de configuración, /etc/munin/munin.conf, aunque nunca está de más hacerle una copia de seguridad antes de toquetearlo:

(server)$ cp /etc/munin/munin.conf /etc/munin/munin.conf.dist
(server)$ mkdir -p /home/www/munin/{logs,www,conf}
(server)$ chown munin:munin /home/www/munin/*
/etc/munin/munin.conf
# The next three variables specifies where the location of the RRD
dbdir /var/lib/munin
htmldir /home/www/munin/www
logdir /home/www/munin/logs
rundir /var/run/munin

# Where to look for the HTML template
tmpldir /etc/munin/templates

# (Exactly one) directory to include all files from.
includedir /etc/munin/munin-conf.d

# Make graphs show values per minute instead of per second
#graph_period minute

# a simple host tree
[localhost.localdomain]
    address 127.0.0.1
    use_node_name yes

OJO: Los directorios que acabamos de indicar deben existir y ser propiedad de munin:munin.

Ahora tocaría configurar Apache para crear un VirtualHost para munin y/o poner una contraseña .htpasswd de acceso a los datos, eso ya va con cada forma de configurar, en mi ejemplo será un VirtualHost con contraseña y con mod_expire activo:

(server)$ a2enmod expires
/etc/apache2/sites-available/default
        Alias /munin /home/www/munin/www/
        <Directory /home/www/munin/www/>
                Order allow,deny
                Allow from all
                Options None
                AuthUserFile /home/www/munin/conf/users.conf
                AuthName "admin"
                AuthType Basic
                require valid-user
                <IfModule mod_expires.c>
                        ExpiresActive On
                        ExpiresDefault M310
                </IfModule>
        </Directory>

Creamos el fichero de configuración con usuarios/contraseñas al que nos referimos como AuthUserFile en la configuración del VirtualHost:

(server)$ cd /home/www/munin/conf
(server)$ htpasswd -c users.conf admin
New password: 
Re-type new password: 
Adding password for user admin

Ejecución manual del cron

$ su - munin --shell=/bin/bash
$ munin-cron

Notificaciones

Para configurar las notificaciones lo hacemos directamente en munin.conf con las siguientes lineas:

munin.conf
contact.me.command mail -s "Munin Notification ${var:host} ${var:graph_title}" r0sk10@gmail.com
contact.me.always_send warning critical
...

Y más abajo en el mismo archivo deberemos definir qué es warning y qué es critical para cada uno de nuestros hosts monitorizados. Por ejemplo, para este host (dina01) configuro como warning que el load llegue a 10, y critical que llegue a 20, en ambos casos debería enviarme un email:

munin.conf
...
[dina01.servers]
    address 82.98.141.94
    use_node_name yes
    load.load.warning 10
    load.load.critical 20

El formato para estas notificaciones es plugin.fieldname.{critical,warning}. Se pueden encontrar los fieldnames en las gráficas HTML o también ejecutando el script correspondiente en el servidor que tenga el munin-node instalado y que nos interese monitorizar con una alerta, y viendo los valores que saca, por ejemplo:

$ ssh dina01
# cd /etc/munin/plugins
# munin-run load
  load.value 0.15
# munin-run df
  _dev_sdb1.value 67.2829535189925
  _dev_sda1.value 0.0444435818537712
...

Ahora que ya tenemos el fieldname, vamos a la configuración del servidor de munin y a agregamos su entrada correspondiente:

/etc/munin/munin.conf
...
[dina01.servers]
    address 82.98.141.94
    use_node_name yes
    load.load.warning 10
    load.load.critical 20
    df._dev_sdb1.warning 60
    df._dev_sdb1.critical 90

Referencias:

Envío de gráficas por Email

Munin no dispone de ninguna opción que nos permita enviar las gráficas por correo de una forma automática en una tarea programada o algo así. Estaría bien crear algún script en python que se loguease contra el interfaz web e hiciese un “snapshot” (vía wget o algo así) de las gráficas para enviarlas por correo cada cierto tiempo, una vez al día estaría bien.

Mejor todavía, como las imágenes las tenemos generadas en disco, casi sería crear un html con lo que interese y enviarlo vía cron, sin complicaciones.

Referencias:

Templates

La plantilla original de Munin no es que sea demasiado bonita, así que vamos a intentar instalar alguna que otra plantilla que sea un poco más vistosa. Empezamos probando la que nos recomienda Fran Dieguez en su post:

# cd /etc/munin/&
# mv templates templates_old
# wget http://mabishu.com/downloads/munin-alternative-template.tbz
# bunzip2 munin-alternative-template.tbz
# tar xfvvz munin-alternative-template.tar

Una vez tenemos disponible el nuevo directorio “templates” debemos esperar 5 minutos o así a que se vuelva a ejecutar munin y que reemplace en /home/wwww/munin/www/ los archivos estáticos (logo.png, styles.css y favicon.ico si mal no recuerdo).

Referencias:

En el caso de Menus no se ha instalado Munin puesto que han creado un RRD customizado para los servidores f1, db1 y mng directamente corriendo en un cron Symfony2. La administración de ese cron es accesible a través de la web de menús con un user/pass que tenga privilegios. El cron (por si fuera necesario en algún momento) es el siguiente:

*/1 * * * * php /home/menus/site/app/console admin:rrd --env prod --host f1 --cpu --ram --net --net-interface eth0 --io --nginx > /dev/null

Munin Node

El Munin node es el nodo o agente que recopila datos y se los envía al servidor para poder pintar las gráficas.

Instalación

La instalación es muy sencilla, en la instalación del propio servidor ya lo hemos hecho de forma implícita, pero para instalar en cualquier otra máquina sería sencillo:

(client)$ apt-get install munin-node munin-plugins-extra
(client)$ apt-get install liblwp-useragent-determined-perl libvirt-bin libcache-cache-perl

La segunda linea es para instalar todas las dependencias que más adelante harán falta para activar los sensores de distintos servicios (Apache, MySQL, Postfix…). Muy recomendable su instalación en prácticamente todas las máquinas.

Configuración

La configuración se centra en el fichero /etc/munin/munin-node.conf, si es en el propio servidor le ponemos como host 127.0.0.1 para que no escuche en todas las interfaces, y el puerto:

/etc/munin/munin-node.conf
host 127.0.0.1
port 4949

Si es en otros equipos clientes que van a ser monitorizados por el servidor debemos ajustar más parámetros, host_name para dar nombre al aquiop, allow con la ip del servidor para indicarle que puede acceder a los datos, host con la ip del cliente y puerto en el que se ejecutará:

/etc/munin/munin-node.conf
host_name maquina1.loquesea.com
allow ^87\.98\.219\.108$
host *
port 4949

Y tenemos que ir al servidor, al fichero /etc/munin/munin.conf a agregar este nuevo host cliente:

/etc/munin/munin-node.conf
[maquina.loquesea.com]
address 192.168.0.2
use_node_name yes

Como paso final, reiniciaríamos el servicio (munin-node). El propio munin-node hace de servidor y de cliente en el servidor, con lo que llegaría con reiniciar el munin-node, comprobamos que el puerto esté abierto:

(server)$ /etc/init.d/munin-node restart
(server)$ nmap localhost -p 4949
4949/tcp open  unknown

Plugins

Una vez llegados a este punto tendríamos las gráficas básicas activadas (cpu, load, ram, disco…), pero si queremos agregar más gráficas necesitamos hacer uso de otros plugins. Para una comprobación automática de los plugins que podemos monitorizar (siempre que previamente hayamos instalado el paquete munin-plugins-extra y las dependencias antes mencionadas) podremos ver lo que el propio munin nos aconseja:

(client)$ munin-node-configure --suggest

OJO: Si aquí obtenemos muchos mensajes “no” (por ejemplo Apache, MySQL, etc…) es que tenemos las dependencias sin instalar:

(client)$ munin-node-configure --suggest
acpi                       | no   | [ACPI program not found]               
apache_accesses            | no   | [LWP::UserAgent not found]             
apache_processes           | no   | [LWP::UserAgent not found]             
apache_volume              | no   | [LWP::UserAgent not found]             
courier_mta_mailqueue      | no   | [spooldir not found]                   
...
slapd_                     | no   | no [Net::LDAP not found]               

Una vez hemos resuelto estos problemas y estamos de acuerdo con las sugerencias, podemos aceptarlas directamente para que se instalen esos sensores en la monitorización de ese host:

(cliente)$ munin-node-configure --shell
ln -s '/usr/share/munin/plugins/apache_accesses' '/etc/munin/plugins/apache_accesses'
ln -s '/usr/share/munin/plugins/apache_processes' '/etc/munin/plugins/apache_processes'
ln -s '/usr/share/munin/plugins/apache_volume' '/etc/munin/plugins/apache_volume'
ln -s '/usr/share/munin/plugins/mysql_' '/etc/munin/plugins/mysql_bin_relay_log'
...

OJO: normalmente no salen los ln en pantalla, si salen es que algo ha fallado. La última vez que ejecuté el –shell no funcionó, no creó los enlaces simbólicos adecuadamente, así que tuve que copiar/pegar toda la salida del comando para que funcionase. Si no salen los ln por pantalla teóricamente todo funcionó adecuadamente, comprobarlo con un ls /etc/munin/plugins/

Y para finalizar reiniciamos el nodo de Munin:

(client)$ /etc/init.d/munin-node restart

Problemas con algunos plugins

Muchas veces algún plugin en concreto da problemas y notifica cada 5 minutos el problema, es el caso del plugin smart (S.M.A.R.T), que no deja de dar el coñazo, un ejemplo:

menus :: backup.menus :: S.M.A.R.T values for drive sda
	WARNINGs: smartctl_exit_status is 96.00 (outside range [:1]).

Para deshabilitar el plugin nos vamos a /etc/munin/plugins y simplemente eliminamos el enlace simbólico, reiniciamos el servicio (/etc/init.d/munin-node restart) y nos olvidamos del problema.

Problemas con notificaciones (2016.10.24)

Cuando manejas una cantidad de servidores superior a 10 (aprox.) empiezan a llegar notificaciones de todo tipo. Puestos en esta situación lo importante es saber diferenciar las críticas del resto así que he hecho un par de cambios a esta configuración:

  • Ya no recibo los correos de munin ni los de monit en su correspondiente carpeta, van directamente a la INBOX para no perderme nada, a riesgo de recibir un montón de correos al día. Para eso la segunda medida:
  • Borrar los plugins de munin que son innecesarios o no me ofrecen información relevante (o simplemente, paso de ellos, temperaturas y demás):
    $ cd /etc/munin/plugins/
    $ rm if_* df_inode forks fw_* interrupts vmstat bonding_* entropy threads iosta* irqst* open_* hddtemp* ntp* smart*
temp.1494451552.txt.gz · Last modified: 2017/05/10 21:25 by Oscar M.