Usando Munin
¿Qué es Munin?
Munin es un programa de monitorización de servidores que genera estadísticas sobre su funcionamiento de los recursos de nuestros servidores, como memoria, disco duro y servicios. Utiliza las herramientas RRDTool para generar gráficas de rendimiento de los parámetros del sistema analizados. Utiliza una interfaz web para mostrar las gráficas generadas, permite trabajar de forma distribuida, mostrando la información de varios servidores. Para ello se instala en una SERVER la parte servidora de Munin y en el resto la parte cliente, que mandará los datos recopilados al servidor para que éste los muestre. Está hecho en perl y permite el uso de plugins, lo cual lo hace realmente versátil.
Instalando munin
Munin está incluido en el depósito oficial de diferentes distribuciones:
root@lolo:~# apt-get install munin # si vamos a emplear el equipo como servidor O root@lolo:~# yum install munin
root@lolo:~# apt-get install munin-node # si vamos a leer datos de él O root@lolo:~# yum install munin-node
Munin puede usarse para monitorizar uno o varios equipos, por lo que munin-node debe instalarse en los equipos de los cuales se recopilarán los datos y munin en el equipo que actuará a modo de servidor y que provee de servicio web.
Ficheros de configuración
Munin cuenta con varios ficheros y directorios que hay que conocer.
- /etc/munin/munin.conf Es el fichero de configuración general y, más concretamente, donde se configura el lado servidor de munin. En este fichero se especifican los directorios a emplear y la configuración de las diferentes máquinas. Debe estar configurado en el servidor.
- /etc/munin/munin-node.conf El fichero de configuración del nodo. Munin ve a cada equipo que monitoriza como el nodo de una red y mediante este fichero se especifica la configuración. Debe existir en cada equipo.
- /etc/munin/plugins/ Es el directorio donde munin lee los plugins a emplear. Éstos son simples enlaces al directorio real de los plugins (/var/lib/munin/plugins/) y se pueden añadir y quitar de la manera más simple, creando o borrando un enlace.
- /var/www/munin/ Directorio donde se vuelca por defecto el código HTML generado con los informes. Se puede cambiar en munin.conf. Debe pertenecer al usuario y grupos munin.
- /var/lib/munin/ Directorio donde se guardan todos los datos de los diferentes nodos y con los que se generan las gráficas.
- /var/log/munin/ Directorio de registros del sistema o logs. En las configuraciones de red es interesante el fichero munin-nodes.log, que detalla la información enviada y transmitida desde el nodo.
- /etc/cron.d/munin Fichero del cron que se ejecuta cada cinco minutos y que actualiza los datos del equipo en la base de datos de munin.
- /etc/cron.d/munin-node Fichero del cron que se ejecuta cada cinco minutos y que actualiza los datos de los nodos que estén dados de alta.
- /etc/init.d/munin-node Script para reiniciar la solicitud de información a los nodos.
Configurando el servidor
Editamos el fichero /etc/munin/munin.conf:
# Example configuration file for Munin, generated by 'make build' dbdir /var/lib/munin ## directorio para guardar los datos y ficheros a emplear htmldir /var/www/munin ## los informes generados logdir /var/log/munin ## los logs rundir /var/run/munin ## los semáforos tmpldir /etc/munin/templates ## las plantillas html #graph_period minute # [server1.etecsa.cu] address la.ip.de.server1 local_address la.ip.de.server1 use_node_name yes # [localhost.etecsa.cu] address 127.0.0.1 local_address 127.0.0.1 use_node_name yes **si no especifico la dirección local (local_address) que tiene el equipo, munin no genera las gráficas, con lo que se incluye la dirección IP por partida doble.
Configurando un nodo
Editamos el fichero /etc/munin/munin-node.conf:
# # Example config-file for munin-node # log_level 4 log_file /var/log/munin/munin-node.log port 4949 pid_file /var/run/munin/munin-node.pid background 1 setseid 1
host * user root group root setsid yes
ignore_file ~$ ignore_file \.bak$ ignore_file %$ ignore_file \.dpkg-(tmp|new|old|dist)$ ignore_file \.rpm(save|new)$
host_name localhost.etecsa.cu ## nombre con que el servidor identifica a esta máquina allow ^127\.0\.0\.1$ ## dirección IP dejaremos que se conecten...pondremos la dirección IP del servidor munin
Configurando el usuario de acceso para la interfaz web
htpasswd -cm /etc/munin/munin-htpasswd muninadmin
Arrancando munin
Munin se ejecuta cada cinco minutos como un trabajo del cron. Los scripts están en /etc/cron.d/ y se pueden modificar para que ejecute lecturas cada minuto y así realizar pruebas.
Iniciar el cliente en todas las máquinas:
root@lolo:~# /etc/init.d/munin-node start
Accediendo a la información
Introducimos en el navegador la dirección de htmldir, en este caso file:///var/www/munin/ ó http://localhost/munin (si contamos con un servidor web).
Plugins para PostgreSQL
El uso de plugins mejora la versatilidad de munin. A partir de la version 1.4 Munin incluye los plugins necesarios para monitorear PostgreSQL.
Instalación de los plugins
A continuacion vamos a describir como instalarlo y configurarlo.
Todo los plugins están programados en perl y necesitan el modulo DBD::Pg Perl.
Para Debian
root@lolo:~# apt-get install libdbd-pg-perl
Para Centos
root@lolo:~# yum install perl-DBD-Pg
Necesitamos activar los parámetros de recolección de estadistica y monitoreo en Postgresql.
Para ello editamos el postgresql.conf:
logging_collector = on
- - Query/Index Statistics Collector -
track_activities = on track_counts = on update_process_title = on
- - Statistics Monitoring -
log_parser_stats = on log_planner_stats = on log_executor_stats = on log_statement_stats = off
Instalar plugins de Munin es muy sencillo. Lo único que tienes que hacer es copiarlos a /usr/share/munin/plugins/
Para Centos
Descompactando el archivo: muninpgplugins-0.2.2.tar.gz
root@lolo:~# tar xvzf muninpgplugins-*.tar.gz root@lolo:~# cd plugins
Para Debian
root@lolo:~# apt-get install munin-plugins-extra
Descripción de los plugins
pg__connections Este plugin muestra el numero de conexiones en idle, espera y conectadas.
pg__db_size Este plugin muestra el tamaño de base de datos suministrado por pg_database_size('my_db');
pg__locks Este plugin muestra todos los posibles bloqueos desde postgresql.
pg__stat_database Este plugin muestra todos datos desde una base de datos para una vista especifica.
pg__stat_tables Este plugin muestra todos las columnas en pg_stat_*_tables (excepto *vacuum y *analyze). Este información es utilizada para agregar gráficos en el munin.conf (like ratio). Con el parametro especial (statscope) especificamos si utilizamos pg_stat_all_tables, pg_stat_user_tables o pg_stat_sys_tables (user es valos por defecto).
pg__statio_tables Este plugin muestra todos las columnas en pg_statio_*_tables. ste información es utilizada para agregar gráficos en el munin.conf (like ratio). Con el parametro especial (statscope) especificamos si utilizamos pg_stat_all_tables, pg_stat_user_tables o pg_stat_sys_tables (user es valos por defecto).
pg__stat_bgwriter Este plugin muestra todos las columnas en pg_stat_bgwriter. Este información es utilizada para agregar gráficos en el munin.conf (like ratio). Como todas las bases de datos tienen algún valor en esta tabla, no es necesario especificar la base de datos.
Para activar los plugins
Tener en cuenta que si el nombre del plugin es por ej. postgres_ significa que cuando crees los enlaces simbólicos en /etc/munin.d/plugins según lo que pongas después va a monitorizar una cosa u otra. Lo mejor es ver el código del plugin en cuestión para ver que parámetros soporta:
Creamos los enlaces simbólicos en /etc/munin/plugins.
ln -s '/usr/share/munin/plugins/postgres_autovacuum' '/etc/munin/plugins/postgres_autovacuum' ln -s '/usr/share/munin/plugins/postgres_bgwriter' '/etc/munin/plugins/postgres_bgwriter' ln -s '/usr/share/munin/plugins/postgres_cache_' '/etc/munin/plugins/postgres_cache_ALL' ln -s '/usr/share/munin/plugins/postgres_checkpoints' '/etc/munin/plugins/postgres_checkpoints' ln -s '/usr/share/munin/plugins/postgres_connections_' '/etc/munin/plugins/postgres_connections_ALL' ln -s '/usr/share/munin/plugins/postgres_connections_db' '/etc/munin/plugins/postgres_connections_db' ln -s '/usr/share/munin/plugins/postgres_locks_' '/etc/munin/plugins/postgres_locks_ALL' ln -s '/usr/share/munin/plugins/postgres_querylength_' '/etc/munin/plugins/postgres_querylength_ALL' ln -s '/usr/share/munin/plugins/postgres_size_' '/etc/munin/plugins/postgres_size_ALL' ln -s '/usr/share/munin/plugins/postgres_transactions_' '/etc/munin/plugins/postgres_transactions_ALL' ln -s '/usr/share/munin/plugins/postgres_users' '/etc/munin/plugins/postgres_users' ln -s '/usr/share/munin/plugins/postgres_xlog' '/etc/munin/plugins/postgres_xlog'
Ejemplos de posibles configuraciones
Para adicionar el llamado a los plugins editamos el fichero /etc/munin/plugin-conf.d/munin-node:
Las varibles a configurar son:
env.PGHOST = cual servidor de base de datos usar. Defaults para 'localhost'. env.PGDATABASE = cual base de datos usar. Defaults para template1. env.PGUSER = cual cuanta de usuario de Postgresql usar. Defaults para 'postgres'. Puede ser el mismo usuario,que ejecuta los plugins de Munin. env.PGPASSWORD = cual es la clave del usario correspondiente. Default para . Guada relación con el tipo de acceso en el pg_hba.conf.
- ejemplo1
[pg_*] user postgres
- ejemplo2--Uso base de datos foobase.
[pg_foobase*] user foouser env.PGDATABASE foobase
- ejemplo3--Uso servidor local, ident autentificación con usuario 'postgres'.
[postgres_*] user postgres
- ejemplo4--Uso servidor, TCP autentificación con usuario y contraseña.
[postgres_*] env.PGHOST localhost env.PGUSER someuser env.PGPASSWORD somepassword
Para probar el funcionamiento de los plugins
Reiniciamos munin
root@lolo:~# /etc/init.d/munin-node restart
y esperamos a que empiece a recopilar información para leer los logs a ver si todo funciona en condiciones, O bien de forma directa,
root@lolo:~# /usr/share/munin/plugins/postgres_activate_lock