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. ;-)

Comments are closed.