Monitorización de servidores con MUNIN en DEBIAN

Publicado por Manuel García el Lun, 11/06/2012 - 12:29 in
Monitorización de servidores con MUNIN en DEBIAN

28/6/2012 - Actualización tras el comentario de jonhattan vemos que el paquete munin-libvirt-plugins sólo es necesario si nuestra máquina es virtualizada.

Munin es una aplicación, escrita en perl, de monitorización red/sistema que nos muestra gráficos a través de una interfaz web, con cerca de 500 plugins disponibles. Podremos supervisar el rendimiento de servidores, redes SAN y aplicaciones.

En este artículo voy a tratar de relatar cómo instalar y configurar Munin. Y digo tratar pues es mi primera toma de contacto con esta herramienta.

Empezamos con la instalación, munin y sus plugins:

$ aptitude -V install munin munin-node munin-plugins-extra

Si nuestra máquina fuera virtual:

$ aptitude -V install munin munin-node munin-libvirt-plugins

También sus dependencias:

$ aptitude install liblwp-useragent-determined-perl libvirt-bin libcache-cache-perl

A continuación deberemos de editar el fichero de configuración de munin para especificar el directorio de salida (asegurándonos de que el usuario munin tenga permisos de escritura sobre el) y el nombre del servidor a usar:

$ nano /etc/munin/munin.conf
dbdir /var/lib/munin
htmldir /var/www/stats.facine.es/web/
logdir /var/log/munin
rundir /var/run/munin

tmpldir /etc/munin/templates

includedir /etc/munin/munin-conf.d

[facine.es]
address 127.0.0.1
use_node_name yes

Si nuestra máquina fuera virtual, instalamos plugins virtualizados:

$ munin-libvirt-plugins-detect

Pedimos sugerencias de plugins (los prueba todos y es normal de que nos informe de que algunos pueden producir errores):

$ munin-node-configure --suggest

Aceptamos las sugerencias y las autoconfiguramos:

$ munin-node-configure --shell

Por defecto los plugins de munin se instalan en /usr/share/munin/plugins/ y para activarlos sólo tenemos que crear un enlace simbólico al plugin deseado en /etc/munin/plugins/, lugar donde iremos para revisar qué plugins se han auto instalado y configurado:

$ cd /etc/munin/plugins

Plugin para munin:

$ ln -s /usr/share/munin/plugins/munin_stats

Plugins para Apache:

$ ln -s /usr/share/munin/plugins/apache_accesses
$ ln -s /usr/share/munin/plugins/apache_processes
$ ln -s /usr/share/munin/plugins/apache_volume

Plugins para MySQL:

$ ln -s /usr/share/munin/plugins/mysql_bytes
$ ln -s /usr/share/munin/plugins/mysql_queries
$ ln -s /usr/share/munin/plugins/mysql_slowqueries
$ ln -s /usr/share/munin/plugins/mysql_threads
$ ln -s /usr/share/munin/plugins/mysql_ mysql_bin_relay_log
$ ln -s /usr/share/munin/plugins/mysql_ mysql_commands
$ ln -s /usr/share/munin/plugins/mysql_ mysql_connections
$ ln -s /usr/share/munin/plugins/mysql_ mysql_files_tables
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_bpool
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_bpool_act
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_insert_buf
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_io
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_io_pend
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_log
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_rows
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_semaphores
$ ln -s /usr/share/munin/plugins/mysql_ mysql_innodb_tnx
$ ln -s /usr/share/munin/plugins/mysql_ mysql_myisam_indexes
$ ln -s /usr/share/munin/plugins/mysql_ mysql_network_traffic
$ ln -s /usr/share/munin/plugins/mysql_ mysql_qcache

Plugins para Memcached (Si lo tenemos instalado):

$ ln -s /usr/share/munin/plugins/memcached_ memcached_rates
$ ln -s /usr/share/munin/plugins/memcached_ memcached_bytes
$ ln -s /usr/share/munin/plugins/memcached_ memcached_counters

Plugins para Varnish (Si lo tenemos instalado):

$ ln -s /usr/share/munin/plugins/varnish_ varnish_backend_traffic
$ ln -s /usr/share/munin/plugins/varnish_ varnish_expunge
$ ln -s /usr/share/munin/plugins/varnish_ varnish_hit_rate
$ ln -s /usr/share/munin/plugins/varnish_ varnish_memory_usage
$ ln -s /usr/share/munin/plugins/varnish_ varnish_objects
$ ln -s /usr/share/munin/plugins/varnish_ varnish_request_rate
$ ln -s /usr/share/munin/plugins/varnish_ varnish_threads
$ ln -s /usr/share/munin/plugins/varnish_ varnish_transfer_rates
$ ln -s /usr/share/munin/plugins/varnish_ varnish_uptime

Si tenemos instalado Fail2Ban sería buena idea monitorizarlo, para ello lo configuramos:

$ echo "[fail2ban*]
user root
" > /etc/munin/plugin-conf.d/fail2ban

Y lo activamos:

$ ln -s /usr/share/munin/plugins/fail2ban /etc/munin/plugins/

Si tenemos APC y queremos monitorizarlo tendremos que realizar un paso extra, la creación de un nuevo sitio, y activación, para colocar un fichero php necesario por el plugin y el cual incluye. Sitio que no será accesible.

$ nano /etc/apache2/sites-available/monitorizacion
ExtendedStatus On
<VirtualHost 127.0.0.1:80>
  ServerName monitorizacion
  ServerAlias 127.0.0.1
  <Directory />
    Order Deny,Allow
    Deny from All
  </Directory>
  DocumentRoot /var/www/monitorizacion/web/
  <Location />
    Options +FollowSymLinks
    Allow from all
  </Location>
  <Location /server-status>
    SetHandler server-status
  </Location>
  <Location /server-info>
    SetHandler server-info
  </Location>
  LogLevel error
  ServerSignature Off
</VirtualHost>
$ mkdir -p /var/www/monitorizacion/web/
$ ln -s /etc/apache2/sites-available/monitorizacion /etc/apache2/sites-enabled/zzz-monitorizacion

Importante que este nuevo sitio lo activemos con el prefijo "zzz-" para asegurarnos de que se ejecuta en último lugar.

Descargamos el plugin de http://code.google.com/p/munin-php-apc/downloads/list, colocamos el fichero php en el sitio creado en el paso anterior y lo configuramos y activamos:

$ cd /tmp
$ wget http://munin-php-apc.googlecode.com/files/munin_plugin_php_apc-0.1.zip
$ unzip munin_plugin_php_apc-0.1.zip
$ cp -p php_apc/apc_info.php /var/www/monitorizacion/web/
$ mkdir -p /usr/local/share/munin/plugins/
$ cp -p php_apc/php_apc_ /usr/local/share/munin/plugins/
$ rm -R munin_plugin_php_apc-0.1.zip php_apc
$ echo "[php_apc_*]
user root
env.url http://localhost/apc_info.php?auto
" >> /etc/munin/plugin-conf.d/munin-node
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_usage
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_hit_miss
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_purge
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_fragmentation
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_files
$ ln -s /usr/local/share/munin/plugins/php_apc_ /etc/munin/plugins/php_apc_rates

Antes de reiniciar apache y munin, debemos de revisar que los plugins tienen permisos de ejecución:

$ chmod -R 755 /usr/share/munin/plugins
$ service apache2 restart
$ service munin-node restart

Por último nos faltaría proteger el directorio con contraseña para que nadie pueda acceder a nuestras estadísticas, si no existiera el fichero: /var/www/stats.facine.es/web/.htaccess, con munin-cron forzamos que se genere el árbol de ficheros y ya podremos editarlo:

$ su - munin --shell=/bin/bash
$ munin-cron
$ exit
$ nano /var/www/stats.facine.es/web/.htaccess
AuthType Basic
AuthName "Acceso Privado"
AuthUserFile /var/www/stats.facine.es/.htpasswd
AuthGroupFile /dev/null
<limit GET PUT POST>
    require valid-user
</limit>
$ htpasswd -c /var/www/stats.facine.es/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin

Al cabo de un rato obtendremos algo así:

Fuente de la sabiduría: Pedro González (@NITEMAN_es).

AdjuntoTamaño
PDF icon Captura completa de munin2.78 MB

Comentarios

Imagen de NITEMAN

Al menos gracias a ti la información le servirá a más gente ;)

Imagen de jonhattan

Buenas,

mola el artículo, me ha servido para revisar mi instalación de munin y pillar media docena de plugins que no tenía activos (no conocía el munin-node-configure --suggest).

Te hago un par de sugerencias / correcciones:

1/ no comentas que versión de debian estás usando, o si tiras de otros repositorios. AFAIK los paquetes munin-libvirt-plugins* sólo están disponibles en sid.

2/ para los plugins de apache también hace falta acceso al /server-status que has definido en el vhost para apc. Osea que si alguien sigue el artículo y no hace la parte de apc no le va a rular la de apache.

3/ para server-status y server-info hay que activar los módulos status e info respectivamente (a2enmod status info). Estos módulos ya traen directivas para que sólo se pueda acceder desde 127.0.0.1, ver:

/etc/apache2/mods-enabled/status.conf
/etc/apache2/mods-available/info.conf

.. por lo que las directivas en el vhost se pueden quitar. De manera análoga podrías restringir el acceso al script de apc sólo para localhost, sin necesidad de un vhost dedicado a ello.

4/ La restricción de acceso a munin la puedes poner en apache en vez de un .htaccess (siempre es mejor poner las directivas en la config de apache que en un .htaccess)

5/ Por último, y esto es más bien cuestión de gustos, yo prefiero munin.example.com que example.com/munin

y recuerda, a2ensite es tu amigo :)

Imagen de Manuel García

Transcribo respuesta de NITEMAN:

Los libvirt estan en squeeze o dotdeb:

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

Respecto a la restricción de vhost... Cuando tienes un Varnish en la misma máquina, el acceso desde 127.0.0.1 no es suficiente, tienes que separar a un virtualhost que se cargue el último, al menos yo no he encontrado otra manera de hacerlo.

Imagen de jonhattan

Algunos plugins requieren algún paquete del sistema para poder funcionar. Si está instalado, en la página de gráficas de ese plugin sale un mensaje al pie. Por ejemplo el plugin iostat require del paquete systats.

Imagen de Manuel García

Muchas gracias :)

Añadir nuevo comentario