Munin est un outil de monitoring permettant de surveiller et de fournir des graphiques sur des serveurs Linux, BSD, Solaris ou AIX.
Je me base sur ce billet Munin, une alternative simple à Cacti? de Christophe Nowicki.
Le tutorial de Nicolas Vallée est très bien fait également : Surveillance système des machines sur un réseau avec Munin
Voici un autre article sur DebianAdmin, en anglais : Monitor Servers and Clients using Munin in Ubuntu.
Munin est constitué de deux parties :
- munin : le serveur de monitoring lui-même
- munin-node qui sera installé sur chaque machine que vous désirez monitorer
Je vais installer Munin sur un serveur Debian.
Pour commencer, il va monitorer sa propre machine. Donc munin-node sera aussi installé sur ce serveur.
Par la suite, j’installerai munin-node sur d’autres serveurs.
L’installation de Munin et des dépendances (perl) est classique :
# aptitude install munin munin-node Lecture des listes de paquets... Fait Construction de l'arbre des dépendances... Fait Initialisation de l'état des paquets... Fait Lecture des descriptions de tâches... Fait Construction de la base de données des étiquettes... Fait Les NOUVEAUX paquets suivants vont être automatiquement installés : defoma file libart-2.0-2 libdate-manip-perl libft-perl libhtml-template-perl libio-multiplex-perl libnet-cidr-perl libnet-server-perl libnet-snmp-perl librrd2 librrds-perl libttf2 rrdtool ttf-dejavu Les NOUVEAUX paquets suivants vont être installés : defoma file libart-2.0-2 libdate-manip-perl libft-perl libhtml-template-perl libio-multiplex-perl libnet-cidr-perl libnet-server-perl libnet-snmp-perl librrd2 librrds-perl libttf2 munin munin-node rrdtool ttf-dejavu 0 paquets mis à jour, 17 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 6404ko d'archives. Après dépaquetage, 13,9Mo seront utilisés. Voulez-vous continuer ? [Y/n/?]
Remarquons qu’il utilise RRDTOOL comme base de données.
Les configurations de munin et munin-node se trouvent dans /etc/munin.
Si les graphiques standards vous suffisent, alors la seule chose à faire est d’autoriser les sessions entre serveur Munin et nodes.
Je vais directement ajouter un node sur une autre machine :
Sur la machine distante, seul le package munin-node sera nécessaire.
# aptitude install munin-node
La tâche est bien en machine :
root@remotenode:/var/log/munin# ps aux | grep munin root 9863 0.0 1.2 7068 4824 ? Ss 15:49 0:00 /usr/sbin/munin-node
Configuration du node sur le serveur en local :
root@serveurmunin:/# vi /etc/munin/munin-node.conf allow ^127\.0\.0\.1$
Node sur la machine distante : ajouter l’IP du serveur qui sera autorisé à se connecter
root@remotenode:/# vi /etc/munin/munin-node.conf allow ^127\.0\.0\.1$ allow 192.168.0.250
Pour activer ce changement de configuration, il faut redémarrer munin-node :
# /etc/init.d/munin-node restart Stopping Munin-Node: done. Starting Munin-Node: done.
Vous pouvez toujours vérifier, depuis le serveur, si votre connexion est autorisée en tapant :
root@serveurmunin:/# telnet 192.168.0.100 4949
Trying 192.168.0.100...
Connected to 192.168.0.100.
Escape character is '^]'.
# munin node at remotenode
quit
On voit que le munin-node répond, et que le nom du node est correct.
Remarquez le port 4949 !
Cela veut dire que si vous devez passer un firewall, il faut autoriser ce port 4949.
Edit 11 novembre 2009
Quelques commandes peuvent vous aider en cas de problèmes lors de l’accès à une machine distante avec Munin :
$ telnet ks12345.kimsufi.net 4949 Trying 91.121.98.67... Connected to ks12345.kimsufi.net. Escape character is '^]'. # munin node at ks12345.kimsufi.net # Unknown command. Try list, nodes, config, fetch, version or quit nodes ks12345.kimsufi.net . version munins node on ks12345.kimsufi.net version: 1.2.5 list open_inodes mysql_slowqueries irqstats apache_accesses if_eth0 mysql_threads df swap load ntp_ntp0_ovh_net cpu df_inode ntp_ntp1_oma_be mysql_queries open_files forks iostat memory exim_mailqueue vmstat ntp_ntp2_belbone_be apache_processes if_err_eth0 entropy ntp_ntp2_oma_be processes apache_volume ntp_dns_univ_lyon1_fr interrupts netstat mysql_bytes smart_sda fail2ban exim_mailstats ntp_ntp1_belbone_be ntp_syrte8_obspm_fr
Vous avez ainsi la liste de ce que votre machine distante peut fournir comme statistique.
Utiliser la commande fetch pour y accéder depuis cette sessions Telnet sur le port 4949. Évidemment seuls les modules listés sont acceptés.
Par exemple, le module « memory » :
fetch memory
slab.value 282099712
swap_cache.value 0
page_tables.value 6033408
vmalloc_used.value 2367488
apps.value 379473920
free.value 113553408
buffers.value 179900416
cached.value 1123921920
swap.value 57344
committed.value 885870592
mapped.value 23998464
active.value 737079296
inactive.value 934035456
quit
Connection closed by foreign host.
Configuration du serveur :
root@serveurmunin:/# vi /etc/munin/munin.conf
# a simple host tree
[remotenode.misson.net]
address remotenode.misson.net
use_node_name yes
[serveurmunin.misson.net]
address 127.0.0.1
use_node_name yes
Les logs sur trouve dans /var/log/munin :
Par exemple, sur le client distant :
# less /var/log/munin/munin-node.log Process Backgrounded 2007/08/22-15:49:51 MyPackage (type Net::Server::Fork) starting! pid(9863) Binding to TCP port 4949 on host * 2007/08/22-15:56:48 CONNECT TCP Peer: "192.168.0.250:2152" Local: "192.168.0.100:4949" 2007/08/22-16:02:17 CONNECT TCP Peer: "192.168.0.250:1993" Local: "192.168.0.100:4949" 2007/08/22-16:05:02 CONNECT TCP Peer: "192.168.0.250:2135" Local: "192.168.0.100:4949"
Sur le serveur :
# less /var/log/munin/munin-update.log aoû 22 16:30:02 - Starting munin-update aoû 22 16:30:02 [24308] - Processing domain: int.chem.corp.local aoû 22 16:30:02 [24308] - Processing node: serveurmunin.misson.net aoû 22 16:30:02 [24308] - Processed node: serveurmunin.misson.net (0.04 sec) aoû 22 16:30:02 [24308] - Processing node: remotenode.misson.net aoû 22 16:30:02 [24311] - Configured service: serveurmunin.misson.net -> open_inodes (0.06 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> ntp_sea_par_ntp_group_1_corp_local (0.14 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> if_err_eth0 (0.09 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> ntp_remotenode (0.14 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> irqstats (0.06 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> entropy (0.05 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> processes (0.06 sec) aoû 22 16:30:03 [24311] - Configured service: serveurmunin.misson.net -> if_eth0 (0.28 sec) ... aoû 22 16:30:09 [24313] - Fetched service: remotenode.misson.net -> memory (0.06 sec) aoû 22 16:30:09 [24313] - Fetched service: remotenode.misson.net -> exim_mailstats (0.08 sec) aoû 22 16:30:09 [24313] - Fetched service: remotenode.misson.net -> exim_mailqueue (0.10 sec) aoû 22 16:30:11 [24313] - Fetched service: remotenode.misson.net -> vmstat (1.06 sec) aoû 22 16:30:11 [24313] - Fetched service: remotenode.misson.net -> ntp_sea_par_ntp_group_2_corp_local (0.13 sec) aoû 22 16:30:11 [24313] - Fetched node: remotenode.misson.net (5.90 sec) aoû 22 16:30:02 [24308] - Processed node: remotenode.misson.net (0.01 sec) aoû 22 16:30:02 [24308] - Processed domain: misson.net (0.05 sec) aoû 22 16:30:10 [24308] - connection from misson.net -> serveurmunin.misson.net (24311) aoû 22 16:30:10 [24308] - connection from misson.net -> serveurmunin.misson.net (24311) closed aoû 22 16:30:11 [24308] - connection from misson.net -> remotenode.misson.net (24313) aoû 22 16:30:11 [24308] - connection from misson.net -> remotenode.misson.net (24313) closed aoû 22 16:30:11 [24308] - Munin-update finished (8.80 sec)
Il faut pouvoir accéder aux pages Web et graphiques générés par le serveur Munin.
Pour cela,
- soit configurer Apache pour rendre accessible ces pages qui sont dans /var/www/munin
- soit simplement ajouter un lien pour que ce dossier soit vu comme un sous-dossier dans votre site Web existant.
Dans mon cas, la 2ème solution me semblait la plus simple. J’avais déjà un site web existant :
cd /var/www/monsiteweb root@serveurmunin:/var/www/monsiteweb# ln -s ../munin/ munin
Les statistiques sont maintenant accessibles à l’adresse :
http://www.monsiteweb.be/munin
Je ne vais pas trop parler des Plugins, qui permettent de monitorer beaucoup de choses.
Les plugins actifs se trouvent sous forme de lien dans /etc/munin/plugins :
root@serveurmunin:/etc/munin/plugins# ls -l total 0 lrwxrwxrwx 1 root root 28 2007-08-22 14:49 cpu -> /usr/share/munin/plugins/cpu lrwxrwxrwx 1 root root 27 2007-08-22 14:49 df -> /usr/share/munin/plugins/df lrwxrwxrwx 1 root root 33 2007-08-22 14:49 df_inode -> /usr/share/munin/plugins/df_inode lrwxrwxrwx 1 root root 32 2007-08-22 14:49 entropy -> /usr/share/munin/plugins/entropy lrwxrwxrwx 1 root root 39 2007-08-22 14:49 exim_mailqueue -> /usr/share/munin/plugins/exim_mailqueue lrwxrwxrwx 1 root root 39 2007-08-22 14:49 exim_mailstats -> /usr/share/munin/plugins/exim_mailstats lrwxrwxrwx 1 root root 30 2007-08-22 14:49 forks -> /usr/share/munin/plugins/forks lrwxrwxrwx 1 root root 41 2007-08-22 14:49 hddtemp_smartctl -> /usr/share/munin/plugins/hddtemp_smartctl lrwxrwxrwx 1 root root 32 2007-08-22 14:49 if_err_eth0 -> /usr/share/munin/plugins/if_err_ lrwxrwxrwx 1 root root 28 2007-08-22 14:49 if_eth0 -> /usr/share/munin/plugins/if_ lrwxrwxrwx 1 root root 35 2007-08-22 14:49 interrupts -> /usr/share/munin/plugins/interrupts lrwxrwxrwx 1 root root 31 2007-08-22 14:49 iostat -> /usr/share/munin/plugins/iostat lrwxrwxrwx 1 root root 33 2007-08-22 14:49 irqstats -> /usr/share/munin/plugins/irqstats lrwxrwxrwx 1 root root 29 2007-08-22 14:49 load -> /usr/share/munin/plugins/load lrwxrwxrwx 1 root root 31 2007-08-22 14:49 memory -> /usr/share/munin/plugins/memory lrwxrwxrwx 1 root root 32 2007-08-22 14:49 netstat -> /usr/share/munin/plugins/netstat lrwxrwxrwx 1 root root 29 2007-08-22 14:49 ntp_remotenode -> /usr/share/munin/plugins/ntp_ lrwxrwxrwx 1 root root 29 2007-08-22 14:49 ntp_rs1_total_fr -> /usr/share/munin/plugins/ntp_ lrwxrwxrwx 1 root root 29 2007-08-22 14:49 ntp_sea_par_ntp_group_1_corp_local -> /usr/share/munin/plugins/ntp_ lrwxrwxrwx 1 root root 29 2007-08-22 14:49 ntp_sea_par_ntp_group_2_corp_local -> /usr/share/munin/plugins/ntp_ lrwxrwxrwx 1 root root 35 2007-08-22 14:49 open_files -> /usr/share/munin/plugins/open_files lrwxrwxrwx 1 root root 36 2007-08-22 14:49 open_inodes -> /usr/share/munin/plugins/open_inodes lrwxrwxrwx 1 root root 34 2007-08-22 14:49 processes -> /usr/share/munin/plugins/processes lrwxrwxrwx 1 root root 31 2007-08-22 14:49 smart_hda -> /usr/share/munin/plugins/smart_ lrwxrwxrwx 1 root root 29 2007-08-22 14:49 swap -> /usr/share/munin/plugins/swap lrwxrwxrwx 1 root root 31 2007-08-22 14:49 vmstat -> /usr/share/munin/plugins/vmstat
Vous pouvez donc assez facilement retirer les liens vers les plugins qui ne vous intéressent pas, ou en ajouter si vous en avez installé de nouveaux.
Vous pouvez obtenir la liste des plugins utilisables sur votre machine (càd qui vont fonctionner et retourner des statistiques) avec la commande :
$ munin-node-configure –suggest | grep yes
apache_processes | yes |
cpu | yes |
df | yes |
df_inode | yes |
entropy | yes |
exim_mailqueue | yes |
exim_mailstats | yes |
forks | yes |
if_ | yes | eth0
if_err_ | yes | eth0
interrupts | yes |
iostat | yes |
irqstats | yes |
load | yes |
memory | yes |
mysql_bytes | yes |
mysql_queries | yes |
mysql_slowqueries | yes |
mysql_threads | yes |
netstat | yes |
ntp_ | yes | ns2_kamino_fr ntp2_belbone_be hendrek_colo_frell_eu_org ntp1_belbone_be syrte8_obspm_fr 87_239_10_190 utserv_mcc_ac_uk abrasd02_misson_net
open_files | yes |
open_inodes | yes |
processes | yes |
swap | yes |
vmstat | yes |
Remarquez que certains plugins, terminés par le caractère « _ » demandent d’être complétés par un nom, par exemple le nom de l’interface réseau pour les plugins if_ et if_err_
Avec certaines distributions, comme Debian ou Ubuntu, tous les plugins utilisables seront déjà activés.




















