Skip to content

Monitorizar servidores con Munin

by Gonzalo on 22 noviembre, 2011

En el siguiente post voy a hablar de como monitorizar nuestros servidores con Munin.
Munin nos muestra gráficos con estadísticas de nuestro servidor (CPU, load average, RAM usada, tráfico de red, etc).
Monit nos muestra la disponibilidad y el uso de diferentes servicios (Apache, MySQL, Postfix, etc) y acciones a tomar bajo determinadas circustancias.
La conbinación de los dos nos permite detectar en nuestros servidores cuando necesitamos dimensionar o que acciones debemos tomar cuando ciertos servicios no funcionan o rinden como se esperaba.
Aunque en este post solo voy a explicar munin y monit quizás lo deje para otro post.

Servidor Munin

Funciona con arquitectura cliente/servidor. Hay dos paquetes ‘munin’ y ‘munin-node’. El primero lo instalaremos en el servidor y el segundo en los diferentes nodos/servers que queremos que monitorice.
Instalamos munin en el que va a hacer de servidor:

# apt-get install munin

Editamos /etc/munin/munin.conf y ponemos:

dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
#
# Where to look for the HTML template
tmpldir /etc/munin/templates

# a simple host tree
[services.loquesea.com]
address 127.0.0.1
use_node_name yes

En htmldir definimos que el dir de apache va a ir en /var/cache/munin/www y definimos también el nombre de dominio de nodo (porque el server va a hacer como nodo y servidor) dentro del servicdor de munin [services.loquesea.com]

También deberíamos editar el propio archivo del servidor para que cuando actúe como nodo (de si mismo) solo escuche de si mismo (loopback) y no en todas las interfaces de red. Editamos el archivo munin-node.conf y ponemos y cambiamos el valor ‘host’ a:

host 127.0.0.1

A continuación editamos el archivo apache.conf para definir el alias que le vamos a dar y darle protección para que nos pida usuario y contraseña:

Alias /munin /var/cache/munin/www

Order allow,deny
# Allow from localhost 127.0.0.0/8 ::1
Allow from all
Options None

# This file can be used as a .htaccess file, or a part of your apache
# config file.
#
# For the .htaccess file option to work the munin www directory
# (/var/cache/munin/www) must have "AllowOverride all" or something
# close to that set.
#

AuthUserFile /etc/munin/munin-htpasswd
AuthName "admin"
AuthType Basic
require valid-user

# This next part requires mod_expires to be enabled.
#

# Set the default expiration time for files to 5 minutes 10 seconds from
# their creation (modification) time. There are probably new files by
# that time.
#
ExpiresActive On
ExpiresDefault M310

Yo he definido que el username sea ‘admin’, así que creamos este usuario con htpasswd:

# htpasswd -c munin-htpasswd admin

Otro parámetro que queramos definir es el acceso. Yo he puesto:

# Allow from localhost 127.0.0.0/8 ::1
Allow from all

Que permite acceder desde cualquier sitio. Si solo quisiésemos acceder desde uestra red local podríamos poner algo así:

Allow from localhost 192.168.1.0/24 ::1

Por último reiniciamos munin y apache:

# service munin-node restart
# service apache2 restart

Ahora ya podemos acceder a las estadísticas en services.loquesea.com/munin
Tardarán un tiempo en estar llenas.

Cliente Munin

Ya tenemos el servidor corriendo con si mismo como el primer cliente. Para añadir nuevos clientes instalmos tan solo el paquete munin-node en otro servidor:

# apt-get install munin-node

Ahora tan solo tenemos que editar el archivo munin-node.conf y definir:

#
# Example config-file for munin-node
#

log_level 4
log_file /var/log/munin/munin-node.log
pid_file /var/run/munin/munin-node.pid

background 1
setsid 1

user root
group root

# Regexps for files to ignore

ignore_file ~$
#ignore_file [#~]$ # FIX doesn't work. '#' starts a comment
ignore_file DEADJOE$
ignore_file \.bak$
ignore_file %$
ignore_file \.dpkg-(tmp|new|old|dist)$
ignore_file \.rpm(save|new)$
ignore_file \.pod$

# Set this if the client doesn't report the correct hostname when
# telnetting to localhost, port 4949
#
host_name maquina1.loquesea.com

# A list of addresses that are allowed to connect. This must be a
# regular expression, since Net::Server does not understand CIDR-style
# network notation unless the perl module Net::CIDR is installed. You
# may repeat the allow line as many times as you'd like

#allow ^127\.0\.0\.1$
allow ^192\.168\.XX\.XXX$

# If you have installed the Net::CIDR perl module, you can use
# multiple cidr_allow and cidr_deny address/mask patterns. A
# connecting client must match any cidr_allow, and not match any
# cidr_deny. Example:

# cidr_allow 127.0.0.1/32
# cidr_allow 192.0.2.0/24
# cidr_deny 192.0.2.42/32

# Which address to bind to;
#host *
host 192.168.XX.XXX

# And which port
port 4949

Descomentamos ‘host_name’ y ponemos el nombre de dominio de este nodo.
En ‘allow’ ponemos la ip del servidor munin
En ‘host’ ponemos la ip de este nodo

Ahora vamos de vuelta otra vez al servidor y definimos en el archivo munin.conf este nodo:

[nombre.loquesea.com]
address 192.168.XX.XXX
use_node_name yes

Reiniciamos munin en el servidor y en el nodo:

# service munin-node restart

Y ya nos aparecerá en unos segundos en el interfaz web.

Es extensible con plugins y demás.
Los plugins se activan mediante enlaces en el dir /etc/munin/plugins a /usr/share/munin/plugins
Si vemos que es demasiada información y tan solo nos interesa el espacio en disco, red y dos cosas mas, podemos borrar los enlaces que queramos de /etc/munin/plugins y reiniciar el nodo (siempre tarda unos secs en actualizarse).

Como véis es un poco cutre y minimalista, pero muy útil si administras unas decenas de servidores.

From → sistemas, ubuntu

Comments are closed.