Ziirish's Home :: Blog

Ziirish's Pub

 
 

Ça fait un certain temps que j'ai envie de faire un article sur la mise en place d'outils de monitoring. Ayant passer quelques heures/jours à jouer avec nagios, ninja, centreon, nagios_graph, etc. je me suis dit que j'aurai de quoi remplir quelques pages de ce blog. Mais à vrai dire, sur une infrastructure aussi petite que la mienne, nagios c'est un peu le Bazooka pour descendre la mouche. Surtout qu'à l'heure actuelle, je n'ai pas encore de serveur mail digne de ce nom.

Ce qu'il me fallait en fait, c'est un grapheur. Alors oui, nagios + nagios_graph et centreon répondent à la question, mais leur mise en place est légèrement relou, surtout pour surveiller une petite dizaine de machines.

La solution nous vient encore une fois des pays froids (à croire qu'ils ont vraiment que ça à foutre). Il s'agit de munin , et en plus, il peut s'interfacer avec nagios. Que demande le peuple ?

Son architecture s'articule autour d'un serveur collectant et compilant les données, et de différents "node".

L'installation d'un node sur debian est enfantine :


node1% aptitude install munin-node munin-plugins-extra

Tout comme celle du serveur :


master% aptitude install munin munin-node munin-plugins-extra

Il faut configurer chacun des nodes pour qu'ils acceptent les connexions provenant du master. Si par exemple notre master a l'adresse 192.168.0.10 :


node1% echo "allow ^192\.168\.0\.10$" >>/etc/munin-node.conf
node1% /etc/init.d/munin-node restart

Il faut également que le port 4949 soit ouvert sur chacun des nodes.

La configuration du master se fait dans le fichier /etc/munin/munin.conf. Pour ajouter des nodes, il suffit d'ajouter des entrées comme celles-ci :


[node1.exemple.info]
    address 127.0.0.1

[node2.exemple.info]
    address 192.168.0.20

[node3.exemple.info]
    address 192.168.0.30

Il est inutile de redémarrer le serveur puisqu'il s'agit en réalité de cron lancés à intervalle régulier.

Mais c'est tout ?

Bah, oui, presque :) Lors de l'installation du paquet munin-node, une configuration automatique a été faite, ainsi la plupart des sondes disponibles et utiles sur la machine sont activées. Vous les retrouverez dans /etc/munin/plugins/

Si vous ajoutez par la suite un service à votre serveur et que vous souhaitez le surveiller, il vous suffit de lancer la commande :


node% munin-node-configure --suggest

Munin peut même aller plus loin en vous donnant les lignes à entrer pour activer les plugins supplémentaires :


node% munin-node-configure --suggest --shell

C'est pas magnifique ça ?

Vous en avez pas assez ?

Allez, pour le fun, on peut même écrire nos propres plugins, et c'est über facile. Même ma grand mère (qui a eu un nordinateur pour noyelle) saurait le faire !

Il me manquait 2 petits trucs. Le premier, c'est une visualisation du temps CPU consommé par chacune des mes VM. Le seconds, une visualisation de la "consommation" de Squid sur mon réseau (cf. mon réseau ouvert).

Voici donc les deux plugins créés :


node% cat >/usr/share/munin/plugins/xen<<EOF
#!/bin/bash
#
# Plugin to monitor xen virtual machines 
#
# $Log$
# Revision 1.0  2010/12/26 ziirish
# Initial revision
#
# Parameters:
#
#       config   (optional)
#       autoconf (optional - used by munin-config)
#
# Magick markers (optional):
#%# family=auto
#%# capabilities=autoconf

if [ "$1" = "autoconf" ]; then
    echo yes
    exit 0
fi

if [ "$1" = "config" ]; then

    echo 'graph_title Xen Virtual Machines'
    echo 'graph_args --base 1000 -l 0'
    echo 'graph_vlabel CPU time (s) '
    echo 'graph_category xen'
    xm list | grep -v Name | sed "s/Domain-0/Dom0/g" | awk '{ print $1".label "$1; }'
    exit 0
fi


xm list | grep -v Name | sed "s/Domain-0/Dom0/g" | awk '{ split($6,a,"."); print $1".value "a[1]; }'
EOF
node% cat >/usr/share/munin/plugins/squid_hits<<EOF
#!/bin/bash
#
# Plugin to monitor Squids requests
#
# $Log$
# Revision 1.0  2010/12/27 ziirish
# Initial revision
#
# Parameters:
#
#       config   (optional)
#       autoconf (optional - used by munin-config)
#
# Magick markers (optional):
#%# family=auto
#%# capabilities=autoconf

if [ "$1" = "autoconf" ]; then
    echo yes
    exit 0
fi

if [ "$1" = "config" ]; then

    echo 'graph_title Squid Requests by user'
    echo 'graph_args --base 1000'
    echo 'graph_vlabel Requests '
    echo 'graph_category squid'
    for user in `awk '{print $3;}' /var/log/squid3/access.log|sort|uniq|grep -v 127.0.0.1`
    do
        echo "$(tr '.' '_' <<<$user).label $user"
    done
    exit 0
fi

for user in `awk '{print $3;}' /var/log/squid3/access.log|sort|uniq -c|grep -v 127.0.0.1|awk '{print $1"-"$2; }'`
do
    echo "$(tr '.' '_' <<<$(cut -d'-' -f2 <<<$user)).value $(cut -d'-' -f1 <<<$user)"
done

EOF
node% ln -s /usr/share/munin/plugins/xen /etc/munin/plugins/xen
node% ln -s /usr/share/munin/plugins/squid_hits /etc/munin/plugins/squid_hits
node% cat >>/etc/plugin-conf.d/munin-node<<EOF

[xen]
user root
EOF
node% /etc/init.d/munin-node restart

Et voilà.

Un cron se chargera aussi de générer les pages html. Vous définissez le répertoire cible dans le fichier /etc/munin/munin.conf, dans la variable htmldir. On configure donc un petit apache/nginx/whateva pour pointer sur ce répertoire, et on admire le résultat !