monitoring serveur avec Munin
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.
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.



