Table of Contents

supervision monitoring graphique

Munin

Munin est un logiciel de métrologie libre qui se divise en 2 parties : un récolteur de données (munin-node) qu'on installe sur les machines à superviser ; et un agrégateur de données (munin) qui tourne sur le serveur front-end (le serveur de supervision). Munin-node recueille des données de performance sur des machines clientes ; Munin interroge tous les munin-node, enregistre les données dans une base RRD et les affiche dans des graphiques dans une interface web (Apache typiquement).

key-features

Installation de munin

sous Debian-like

Dans un premier temps on va installer la partie serveur (munin). Mais comme je veux monitorer mon serveur, j'installe aussi la partie cliente (munin-node) dessus (en plus ça me permettra de valider son bon fonctionnement).

aptitude install munin munin-node

L'installation de munin-node scanne la machine et active les plugins qui fonctionnent sur le système. Le client localhost est détecté et ajouté automatiquement dans la conf de Munin, ce qui fait qu'après un redémarrage d'apache, on devrait (après une dizaine de minutes) voir apparaitre la mire de Munin à l'adresse http://IP_serveur/munin .

Configuration

Partie serveur

Sous Debian-like la configuration de Munin est située dans /etc/munin :

ln -s /etc/munin/apache.conf /etc/apache2/conf.d/munin
service apache2 restart
# a simple host tree
[localhost.localdomain]
    address 127.0.0.1
    use_node_name yes
 
# serveur toto
[toto_serveur]
    address 192.168.0.1
    use_node_name yes

Ici on voit le localhost (configuré par défaut) et j'ai rajouté une autre machine de mon LAN.

Munin ne tourne pas comme daemon : il est lancé par cron (par défaut toutes les 5 minutes, cf /etc/cron.d/munin) donc pas besoin de le relancer pour prendre en compte une modification de configuration. Par contre il faudra attendre une bonne dizaine de minutes.

Partie cliente

Comme je l'ai dit plus haut, les machines clientes n'ont besoin que du paquet Munin-node.

aptitude install munin-node

Lors de l'installation, Munin-node scanne la machine et active automatiquement les plugins adaptés.

Par défaut le daemon munin-node n'accepte les connexions que depuis sa loopback (lui-même) ; il faut donc éditer le fichier de conf /etc/munin/munin-node.conf et ajouter l'adresse IP du collecteur (192.168.0.100 dans mon cas) :

vi /etc/munin/munin-node.conf
#[..]
allow ^127\.0\.0\.1$
# IP du collecteur (la machine où est installé munin)
allow ^192\.168\.0\.100$

On remarquera que les IPs sont renseignées sous la forme d'expressions régulières, Perl n'y ai pas pour rien…

Activer un plugin

Tous les scripts installés par défaut avec Munin-node sont situés dans /usr/share/munin/plugins/ ; ce sont pour la plupart des scripts perl. Pour les activer, on créé un lien symbolique dans /etc/munin/plugins/ ; pour les désactiver il suffit de supprimer le lien symbolique.

Il est possible de re-scanner le système ; Munin-node propose alors la liste des plugins qu'il vous conseille d'installer :

munin-node-configure --suggest
Plugin                     | Used | Suggestions
------                     | ---- | -----------
acpi                       | no   | [ACPI program not found]
courier_mta_mailqueue      | no   | [spooldir not found]
courier_mta_mailstats      | no   | [could not find executable]
courier_mta_mailvolume     | no   | [could not find executable]
cupsys_pages               | no   | [could not find logdir]
hddtemp_smartctl           | no   | [no drives known]
if_                        | yes  | +eth0
if_err_                    | no   | yes +eth0 +eth1
ip_                        | no   |
mysql_bytes                | no   | [mysqladmin not found]
mysql_isam_space_          | no   |
mysql_queries              | no   | [mysqladmin not found]
mysql_slowqueries          | no   | [mysqladmin not found]
mysql_threads              | no   | [mysqladmin not found]
nfs_client                 | no   | [no /proc/net/rpc/nfs]
nfsd                       | no   | [no /proc/net/rpc/nfsd]
postfix_mailqueue          | no   | [spooldir not found]
postfix_mailvolume         | no   | [postfix not found]
postgres_block_read_       | no   |
postgres_commits_          | no   |
postgres_locks             | no   |
postgres_queries_          | no   |
postgres_space_            | no   |
ps_                        | no   |
sendmail_mailqueue         | no   |
sendmail_mailstats         | no   | [no mailstats command]
sendmail_mailtraffic       | no   |
squid_cache                | no   | no [could not connect: Connection refused]
squid_objectsize           | no   | no [could not connect: Connection refused]
squid_requests             | no   | no [could not connect: Connection refused]
squid_traffic              | no   | no [could not connect: Connection refused]
smart_                     | yes  |
tomcat_access              | no   | [XML::Simple not found]
tomcat_jvm                 | no   | [XML::Simple not found]
tomcat_threads             | no   | [XML::Simple not found]
tomcat_volume              | no   | [XML::Simple not found]

Pour les installer, rien de plus simple : l'outil vous donne la commande à copier/coller dans le prompt !

munin-node-configure --suggest --shell

Pour tester un plugin, il existe la commande munin-run (le –debug n'est pas obligatoire) :

munin-run squid_traffic --debug
 # Processing plugin configuration from /etc/munin/plugin-conf.d/munin-node
 # Set /rgid/ruid/egid/euid/ to /119/65534/119 119 /65534/
 # Setting up environment
 # Environment squidport = 3129
 # About to run '/etc/munin/plugins/squid_traffic'
 kbytes_in.value 92441
 kbytes_out.value 785678
 hit_kbytes_out.value 1079

squid_*

Après avoir installé munin-node, la commande munin-node-configure –suggest permet de visualiser les erreurs qu'il a rencontrées ; par exemple ici les plugins squid_* ne sont pas activés alors que Squid tourne sur ma machine !

La raison invoquée : [could not connect: Connection refused] est simple : mon Squid ne tourne pas sur le port standard (3128), il faut donc le préciser au plugin. En lisant le script perl de ce dernier on trouve :

vi /usr/share/munin/plugins/squid_traffic
 
Configuration variables:
 
 squidhost   - host (default "localhost")
 squidport   - port (default "3128")
 squiduser   - username (default "")
 squidpasswd - password (default "")

Il faut donc lui préciser le nouveau port ; ceci se fait dans le fichier de conf des plugins : /etc/munin/plugin-conf.d/munin-node

vi /etc/munin/plugin-conf.d/munin-node
[squid_*]
env.squidport 3131

On ajoute ces lignes suivant la syntaxe qui convient : ici on précise le port personnalisé tcp/3131 dans la variable d'environnement squidport qui sera transmise au script.

Puis on lance le scan :

munin-node-configure --suggest

S'il est listé dans le résultat de la commande précédente, alors l'utilitaire peut nous pré-mâcher le travail :

munin-node-configure --suggest --shell | grep squid
 
ln -s /usr/share/munin/plugins/squid_cache /etc/munin/plugins/squid_cache
ln -s /usr/share/munin/plugins/squid_requests /etc/munin/plugins/squid_requests
ln -s /usr/share/munin/plugins/squid_traffic /etc/munin/plugins/squid_traffic

apache_*

Certains plugins d'Apache requièrent l'activation des modules mod_info et mod_status dans le serveur web. Pour vérifier les plugins installés, vérifier la présence de leurs liens symboliques (.conf et .load) dans /etc/apache2/mods-enabled/ :

ll /etc/apache2/mods-enabled/

S'ils n'y sont pas, les activer :

a2enmod status
a2enmod info

Puis activer les plugins dans munin-node et relancer le service :

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
/etc/init.d/munin-node restart
Graphes vides

Avec la dernière Debian (6.0) j'ai constaté que les courbes restent vides. En farfouillant les log on obtient :

tail /var/log/munin/munin-node.log
[..]
2013/01/03-11:45:02 [1138] Error output from apache_volume:
2013/01/03-11:45:02 [1138]      LWP::UserAgent not found at /etc/munin/plugins/apache_volume line 86.

L'outil de diagnostic interne de Munin indique :

munin-node-configure --suggest
Plugin                     | Used | Suggestions
------                     | ---- | -----------
[..]
apache_accesses            | yes  | no [LWP::UserAgent not found]
apache_volume              | yes  | no [LWP::UserAgent not found]

J'ai trouvé sur google qu'il manquait une librairie Perl de gestion de serveur web : libwww-perl. Malgré les multiples dépendances je l'ai installé, ai relancé munin-node et les graphes se sont peuplés :)

aptitude install libwww-perl
[..]
Les NOUVEAUX paquets suivants vont être installés :
  libfont-afm-perl{a} libhtml-format-perl{a} libhtml-parser-perl{a}
  libhtml-tagset-perl{a} libhtml-tree-perl{a} libmailtools-perl{a}
  libtimedate-perl{a} liburi-perl{a} libwww-perl
[..]
 
service munin-node restart

netstat

Le plugin netstat permet de récupérer les connexions established, actives, etc… et est désactivé par défaut. Pourtant, tout Linux qui se respecte dispose de la commande netstat ! Nous allons donc l'activer :

ln -s /usr/share/munin/plugins/netstat /etc/munin/plugins/netstat
 
service munin-node restart

Si au bout d'une dizaone de minute le graphe ne s'affiche pas, il faut peut-être le lancer en root :

vi /etc/munin/plugin-conf.d/munin-node
[netstat]
user root
 
service munin-node restart

Dans mon cas le graphe s'affiche correctement sous Debian 6.0, mais les courbes ne sont pas cohérentes et semblent s'afficher sur des abscisses différentes. La manipulation suivante m'a permis de retrouver des graphes qui tiennent la route :

vi /usr/share/munin/plugins/netstat
# chercher la ligne suivante...
#        echo 'graph_title Netstat'
       echo 'graph_args --base 1000 --logarithmic'
#        echo 'graph_vlabel active connections'
 
# et la remplacer par celle-ci :
        echo 'graph_args -l 0 --base 1000'

Sauvegarder et enregistrez le fichier et relancer le service :

service munin-node restart

multiping

multiping est une amélioration du plugin ping_, qui permet de pinguer plusieurs destinations et d'afficher le résultat sur une seul graphique.

cd /usr/share/munin/plugins/
wget http://exchange.munin-monitoring.org/plugins/multiping/version/1/download
mv download multiping
chmod 755 multiping
ln -s /usr/share/munin/plugins/multiping /etc/munin/plugins/multiping
 
vi /etc/munin/plugin-conf.d/munin-node
[multiping]
env.host www.google.fr www.free.fr www.orange.fr www.yahoo.fr
 
/etc/init.d/munin-node restart

bind95_

bind95_ est un plugin pour récupérer les statistiques DNS du logiciel bind version 9.5.

Pour cela, il faut dans un premier temps activer les statistiques dans bind en activant l'option (à ajouter dans la partie options de named.conf ; sous Debian cette section est située dans le fichier named.conf.options :

vi /etc/bind/named.conf.options
options {
[..]
        statistics-file "/var/cache/bind/named.stats";
[..]
}
 
/etc/init.d/bind9 restart

Après quelques temps le fichier /var/cache/bind/named.stats devrait apparaitre et se peupler.

cd /usr/share/munin/plugins/
wget http://exchange.munin-monitoring.org/plugins/bind95_/version/1/download
mv download bind95_
chmod 755 bind95_
ln -s /usr/share/munin/plugins/bind95_ /etc/munin/plugins/bind95_
 
# utiliser le compte root pour la récupération des stats
vi /etc/munin/plugin-conf.d/munin-node
[bind95]
user root
 
/etc/init.d/munin-node restart

Le compte root est nécessaire si vous obtenez l'erreur suivante :

rndc: error: none:0: open: /etc/bind/rndc.key: permission denied
rndc: could not load rndc configuration

processes

Pour qu'il marche il faut le lancer en root (sinon on ne graphe que les process appartenant à munin) ; donc :

vi /etc/munin/plugin-conf.d/munin-node
[processes]
user root

df

La partition /home n'est pas graphée ni détectée par un munin-run df –debug. Internet m'apprend que le paramètre ProtectHome=true de systemd en est la cause ; en le désactivant :

/etc/systemd/system/multi-user.target.wants/munin-node.service
#ProtectHome=true
ProtectHome=false

et en relançant le service systemctl restart munin-node && systemctl daemon-reload, la partition /home est bien monitorée :

munin-run df | grep sda3
_dev_sda3.value 85.964070979881

Installer un nœud sous Windows

Il existe une version de munin-node qui tourne sous Windows ; les plugins sont moins nombreux mais les principaux indicateurs de santé de la machine sont là (utilisation CPU, mémoire, disques, etc…) !

Un léger bémol cependant pour le graphe de charge CPU qui, appa-remment, pose problème avec Windows 7 x64. Effectivement la sonde retourne 0, alors que le graphe de charge des processeurs retourne des valeurs cohérentes.

Graphes inaccessibles

Je me suis configuré un Munin aux petits oignons qui marchait très bien. Cependant, soudainement il s'est mis à ne plus afficher les graphes sur l'interface web. Aucun message d'erreur dans les logs, les fichiers des graphes sont bien mis à jour… mais ceux-ci n'ont pas les bons droits :

ll /var/cache/munin/www/localdomain/localhost.localdomain/
[..]
-rw-r----- 1 munin munin  13K juin  19 19:15 vmstat-day.png

D'ailleurs Apache génère bien une erreur HTTP 403 dans ses logs.

En toute honnêteté je ne suis parvenu à savoir ni pourquoi Munin s'est mis soudainement à générer ses graphes avec les mauvais droits, ni comment y remédier. N'ayant trouvé aucune piste sur notre ami commun (Google), j'ai contourné le problème en ajoutant simplement l'utilisateur d'Apache (www-data) au groupe munin :

adduser www-data munin
Ajout de l'utilisateur « www-data » au groupe « munin »...
Ajout de l'utilisateur www-data au groupe munin
Fait.