{{tag>administration serveur système supervision}}
----
====== Munin : le grapheur pour surveiller les machines d'un parc ======
[[https://munin-monitoring.org/|Munin]] est un système complet de monitoring (ou métrologie) de machine. Il permet de générer une série de graphes à partir des informations envoyées par les autres machines : utilisation de la mémoire vive, « load average », utilisation du processeur, réseau,… Il permet même d'envoyer des alertes par courriel ou vers [[Nagios]] en fonction de seuils d'alerte prédéfinis.
Munin fonctionne sur le modèle client-serveur. Un petit démon tourne sur chacune des machines devant être surveillée : //munin-node//. Ce démon fournit les informations brutes concernant la machine dès que le grapheur //munin// les lui demande.
Pour surveiller un parc informatique, vous devez donc installer :
* le grapheur //munin// sur une machine qui va se charger de la surveillance.
* le démon //munin-node// sur chaque machine à surveiller.
Dans la mythologie nordique, Hugin et Munin sont les deux corbeaux messagers d'Odin. Tous les jours, ils parcourent le monde et reviennent ensuite rapporter au dieu tout ce qu'ils ont vu et entendu. Hugin représente la pensée, tandis que son comparse Munin représente la mémoire.
===== Munin (le grapheur) =====
==== Installation ====
Munin est une application écrite en [[Perl|Perl]] qui génère des graphes grâce à [[rrdtool|rrdtool]]. Pour visualiser ces graphes munin génère des pages HTML. Comme pour toutes application web il faut donc avoir un serveur web déjà installé et fonctionnel. Le paquet munin fournit une configuration de base pour le serveur Apache mais cela peut généralement fonctionner avec [[nginx|Nginx]] ou [[lighttpd|Lighttpd]].
Cette documentation concerne une installation avec le serveur web Apache2.
Installation des paquets sur le grapheur :
sudo apt install munin munin-node munin-plugins-extra libcgi-fast-perl libapache2-mod-fcgid
Les modules Apache //fast-perl// et //fcgid// sont nécessaires pour la génération des graphes. Les paquets munin-node et munin-plugins-extra ne sont nécessaires que pour surveiller le serveur lui-me (ce qui est généralement le cas).
Il faut activer le module fcgid pour Apache :
sudo a2enmod fcgid
sudo systemctl restart apache2
==== Configuration ====
=== Serveur web (ici apache) ===
Lors de son installation munin active automatiquement sa configuration Apache en créant les liens symboliques sous /etc/apache2/conf-available/munin.conf qui pointent vers **/etc/munin/apache24.conf.** Dans cette configuration les graphes sont accessibles que depuis l'hôte local. Pour les rendre accessible depuis d'autres machines il faut modifier le fichier **/etc/munin/apache24.conf** ainsi :
Alias /munin /var/cache/munin/www
Require local
Require ip a.b.c.d w.x.y.z
Options None
ScriptAlias /munin-cgi/munin-cgi-graph /usr/lib/munin/cgi/munin-cgi-graph
Require local
Require ip a.b.c.d w.x.y.z
SetHandler fcgid-script
SetHandler cgi-script
où a.b.c.d et w.x.y.z sont les adresses IP des machine autorisées à consulter les graphes munin qui seront accessibles par http://nom_de_domaine_du_serveur/munin.
Pour plus d'informations sur la configuration et les restrictions d'accès, consultez la documentation d'[[apache2|Apache2]].
=== Serveur Munin central ===
Il faut indiquer à Munin quels hôtes il doit surveiller. Dans le fichier **/etc/munin/munin.conf**. Vous devriez avoir une configuration par défaut qui ressemble à ceci :
[localhost.localdomain]
address 127.0.0.1
use_node_name yes
Vous pouvez remplacer //localhost.localdomain// par le nom de domaine associé au serveur.
Pour chacune des machines à surveiller, vous devez indiquer son ''nom d'hôte'', son ''domaine'' et son ''adresse ip''.
Par exemple, pour la machine ''www.example.com'' qui est sur l'IP ''192.168.0.1'', on ajoute l'entrée suivante dans le fichier **/etc/munin/munin.conf** :
[www.ubuntu-fr.org]
address 192.168.0.1
use_node_name yes
Le paramètre **use_node_name yes** permet de prendre en compte la machine même si le nom entre crochets ne correspond pas au nom de la machine. Dans munin la machine sera toujours affichée avec le nom entre crochets. \\
S'il n'est pas précisé, il est nécessaire de mettre la même chose que le retour de la commande //hostname -f// sur la machine en question, sinon la machine n'apparaîtra tout simplement pas dans la partie Web car munin demandera à la machine distante si cette dernière connaît un nœud correspondant au nom entre crochet, ce qui ne sera pas le cas.
Les informations récupérées par munin pour chaque machine dépendent de la configuration de munin-node que les machine distantes (plugins activés).
Pour être averti par courriel en cas de dépassement d'un seuil d'alerte (par ex:disque plein), ajoutez ceci :
contacts toto
contact.toto.command mail -s "Munin notif ${var:host}" toto@example.com
contact.toto.always_send warning critical
(en remplaçant bien sûr //toto// //et toto@example.com// par les valeurs qui conviennent).
ou encore envoyer une alerte vers Nagios :
contact.nagios.command /usr/sbin/send_nsca -H nagios.host.com -c /etc/send_nsca.cfg
La périodicité des mises à jour des graphes est déterminée par le programme ''munin-cron'' qui par défaut se lance toutes les 5 minutes.
À l'installation, le fichier **/etc/cron.d/munin** a été créé. En modifiant ce dernier, vous pourrez changer la périodicité des mises à jour des graphes.
==== Voir les graphes ====
Il vous suffit d'aller sur la page web suivante : http://localhost/munin si vous avez installé Munin sur votre machine en local. Sinon, remplacez localhost par l'ip de la machine où se trouve le grapheur.
==== Mise à jour des indicateurs des nœuds ====
La mise à jour (télé-relevé) se fait par défaut toutes les 5 minutes, grâce à la cron ''/etc/cron.d/munin''.
Pour déclencher une mise-à-jour manuelle supplémentaire : sudo -u munin /usr/bin/munin-cron
Et pour suivre ce qui se passe, le fichier journal est ''/var/log/munin/munin-update.log''
===== Munin-node (le démon sur les nœuds) =====
Sur chaque machine que vous désirez surveiller, il vous faut installer le démon qui va répondre aux requêtes du grapheur.
==== Installation ====
Installez les paquets suivants :
sudo apt install munin-node munin-plugins-extra
==== Configuration ====
=== Accès au nœud ===
Pour que le grapheur accède aux informations du nœud, il faut autoriser explicitement le grapheur à se connecter au nœud.
Cette information est indiquée dans le fichier de configuration **/etc/munin/munin-node.conf**. À la fin du fichier de configuration, vous trouverez une ligne de ce style :
allow ^127\.0\.0\.1$
Pour autoriser votre grapheur à se connecter, vous ajouter une ligne du même type. Par exemple, si votre grapheur possède l'IP 192.168.0.253, vous ajoutez la ligne :
allow ^192\.168\.0\.253$
=== Configuration des plugins ===
Chaque information affichée dans les graphes est traitée par un plugin. Les plugins actifs sont en réalité des liens symboliques qui se trouvent dans le répertoire **/etc/munin/plugins**. La plupart des plugins Munin sont installés par défaut dans le répertoire **/usr/share/munin/plugins/**
À l'installation du paquet, les plugins détectés sont automatiquement ajoutés.
Le fichier de configuration des plugins est **/etc/munin/plugin-conf.d/munin-node**
Normalement, on ne règle que les utilisateurs et les groupes sous lesquels tournent les plugins (rapport aux droits d'exécution, de lecture et d'écriture... si vous ne savez pas de quoi il est question, lisez donc la documentation sur les [[:permissions]].
Pour visualiser facilement les plugins installés, vous pouvez utiliser la commande :
munin-node-configure
Cette commande vous permet également d'obtenir une suggestion des pluggins à rajouter :
munin-node-configure --suggest
vous obtiendrez les commandes de création des liens pour l'activation des plugins avec la commande :
munin-node-configure --suggest --shell
=== Test des plugins ===
Si vous créez vos plugins ou si vous désirez seulement tester la bonne configuration de vos plugins, vous ne devez pas lancer le plugin comme si vous lanciez un script shell. Vous devez utiliser la commande **munin-run**, par exemple :
munin-run postgres_bgwriter
le plugin sera alors lancé avec les variables nécessaires (nom utilisateur,nom BDD ...)
=== Prise en compte d'une configuration du nœud modifiée ===
Une fois les modifications effectuées, il faut redémarrer le nœud munin pour les prendre en compte à la prochaine interrogation depuis le serveur munin : sudo systemctl restart munin-node
==== plugins Apache ====
Les plugins Apache ont besoin de la bibliothèque **[[apt>libwww-perl]]**.
Afin de récupérer les données statistique d'apache le module **status** doit être activé :
sudo a2enmod status
==== plugins Mysql====
Normalement les plugins mysql sont directement activés à l'installation.
Si ce n'est pas le cas, vous pouvez taper: munin-node-configure
Cela vous donnera une liste des plugins en précisant s'ils sont installés et s'ils peuvent fonctionner.
Si vous avez une erreur pour les plugins mysql, vous devrez corriger les erreurs et réactiver manuellement les plugins mysql.
== Erreur Missing dependency Cache::Cache==
Vous pouvez résoudre cette erreur en installant le paquet: **[[apt>libcache-cache-perl]]**
Une fois installé, vérifier que votre problème est bien corrigé avec munin-node-configure.
Vous pouvez ensuite réactiver les plugins mysql: ln -s /usr/share/munin/plugins/mysql_* /etc/munin/plugins/
Pour finir, rechargez la configuration de munin pour que ce soit pris en compte: reload munin-node
== Installer davantage de plugins MySQL==
Munin est un outil de surveillance qui consomme peu de ressources, mais l'activation des plugins MySQL peut augmenter significativement les ressources utilisées.
Vous pouvez installer plusieurs autres plugins mysql pour suivre par exemple la valeur de max_connection, le débit réseau, le type de requête etc ...
Pour avoir une liste des plugins que vous pouvez ajouter allez dans le dossier:
cd /usr/share/munin/plugins
et faites:
./mysql_ suggest
Vous obtiendrez donc la liste des graphs que peut faire mysql_.
Exemple:
* bin_relay_log
* commands
* connections
* files_tables
* innodb_bpool
* innodb_bpool_act
* innodb_insert_buf
* innodb_io
* innodb_io_pend
* innodb_log
* innodb_rows
* innodb_semaphores
* innodb_tnx
* myisam_indexes
* network_traffic
* qcache
* qcache_mem
* replication
* select_types
* slow
* sorts
* table_locks
* tmp_tables
Si vous voulez ajouter qcache par exemple, faites un lien de la sorte :
ln -s /usr/share/munin/plugin/mysql_ /etc/munin/plugins/mysql_qcache
C'est donc sous la forme :
ln -s /usr/share/munin/plugin/mysql_ /etc/munin/plugins/mysql_NomDuPlugin
==== Plugins Proftpd ====
Les plugins Proftpd ont besoin de **[[apt>logtail]]**. D'autre part, il faut que vous puissiez lire le contenu du log de transfert de proftpd. Ce dernier est normalement situé à **/var/log/proftpd/xferlog** , mais une vérification s'impose : lisez le fichier de configuration de proftpd, normalement **/etc/proftpd/proftpd.conf** :
less /etc/proftpd/proftpd.conf
et repérez la balise TransferLog, elle indique l'emplacement du fichier de log qui nous intéresse.
Regardez les permissions et propriétaires du fichier. Si le propriétaire est root et son groupe, root, peut être vaut-il mieux modifier son groupe. Je l'ai mis à adm. Et j'ai autorisé la lecture et l'écriture. (l'écriture, je ne sais pas si c'est nécessaire, mais la lecture, oui, assurément !)
chown root:adm xferlog
chmod ug+rw xferlog
Ensuite, assurez vous que les plugins proftpd tournent bien dans le bon groupe. Pour ce faire, éditez le fichier /etc/munin/plugin-conf.d/munin-node, et repérez (ou ajoutez) la balise [proftpd*] ou [proftpd_*], ajoutez en dessous, le groupe ou l'utilisateur que vous avez réglé sur xferlog, pour moi, cela donne :
[proftpd*]
group adm
L'auteur tient à signaler que les options de configuration pour les plugins Proftpd peuvent changer (groupe et propriétaire...), c'est à vous de décider suivant ce qui vous parait le mieux.
==== Plugin df ====
Le plugin df, comme tous les plugins qui affichent l'utilisation des disques, risquent de ne pas afficher certaines partitions. La première chose à faire, est de les faire tourner en root en éditant le fichier /etc/munin/plugin-conf.d/munin-node afin de rajouter dans la section df user root :
[df*]
user root
Puis relancer le service :
sudo service munin-node restart
Vous devriez alors voir toutes vos partitions sauf /home, c'est une nouveauté avec systemd.
Il vous faudra alors créer un fichier /etc/systemd/system/munin-node.service.d/override.conf contenant :
[Service]
ProtectHome=read-only
Puis relancer systemctl :
sudo systemctl daemon-reload
Puis relancer munin :
sudo service munin-node restart
Vous devriez maintenant voir toutes vos partitions.
S'il en manque, vous pouvez les forcer en éditant de nouveau /etc/munin/plugin-conf.d/munin-node et dans la section [df*], mettre une ligne comme :
env.include_re /dev/sdc2 /dev/sdd2 /dev/md3
S'il y en a en trop, ça va ressembler à :
env.exclude_re /run /dev/shm /run/lock /sys/fs/cgroup /run/user/1000
Ce qui chez moi donne :
[df*]
user root
env.warning 92
env.critical 98
#env.exclude_re ^/run/user
env.include_re /dev/sdc2 /dev/sdd2 /dev/md3
env.exclude_re /run /dev/shm /run/lock /sys/fs/cgroup /run/user/1000
Une fois ces modifications effectuées, il faut de nouveau relancer munin :
sudo service munin-node restart
==== Plugin sensors_ ====
Ce plugin permet d'afficher la température, la tension et la vitesse des ventilateurs. Il utilise [[:lm-sensors]] pour cela.
Théoriquement, on peut dire à Munin de ne pas grapher tel ou tel capteur (température incohérente, ventilateur affichant systématiquement une vitesse de rotation à 0...) en éditant /etc/munin/plugin-conf.d/sensors.conf et en rajoutant :
[sensors_*]
env.ignore_temp3
env.ignore_temp4
env.ignore_temp5
env.ignore_fan5
Mais ça ne fonctionne pas.
Le work-around, c'est de créer un fichier /etc/sensors.d/ignore.conf qui indiquera directement à lm-sensors quels capteurs ignorer.
Par exemple, si
sensors
vous retourne :
it8620-isa-0a40
Adapter: ISA adapter
in0: 408.00 mV (min = +0.00 V, max = +3.06 V)
in1: 2.51 V (min = +0.00 V, max = +3.06 V)
in2: 2.03 V (min = +0.00 V, max = +3.06 V)
in3: 2.02 V (min = +0.00 V, max = +3.06 V)
in4: 1.06 V (min = +0.00 V, max = +3.06 V)
in5: 948.00 mV (min = +0.00 V, max = +3.06 V)
in6: 2.50 V (min = +0.00 V, max = +3.06 V)
3VSB: 3.38 V (min = +0.00 V, max = +6.12 V)
Vbat: 3.14 V
fan1: 0 RPM (min = 0 RPM)
fan2: 0 RPM (min = 0 RPM)
fan3: 0 RPM (min = 0 RPM)
fan4: 0 RPM (min = 0 RPM)
fan5: 0 RPM (min = 0 RPM)
temp1: +33.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp2: +36.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp3: -55.0°C (low = +127.0°C, high = +127.0°C) sensor = thermistor
temp4: +41.0°C
temp5: +46.0°C
temp6: +46.0°C
Le nom du chip est it8620-isa-0a40 et grapher les fan et temp3 ne sert à rien. On va donc éditer le fichier /etc/sensors.d/ignore.conf
sudo vim /etc/sensors.d/ignore.conf
afin qu'il ressemble à ça :
chip "it8620-isa-0a40"
ignore temp3
ignore fan1
ignore fan2
ignore fan3
ignore fan4
ignore fan5
Ainsi ces 6 capteurs ne seront plus graphés dans Munin et n’apparaitront plus lorsque vous lancerez la commande sensors.
==== Résolution des problèmes courants ====
Si au niveau de votre grapheur, une sonde ne génère //aucun// graphe, vérifiez que les access-list configurées dans /etc/munin/munin-node.conf sont correctes et que le pare-feu de la sonde autorise les connexions sur le port associé à la sonde munin (4949 par défaut).
Si certains graphes sont générés mais pas tous, vous avez probablement un plugin qui n'est pas fonctionnel. Connectez vous sur une machine pouvant accéder à la sonde (par exemple le grapheur). Sur cette machine, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt>telnet]]**. Supposons que la sonde défectueuse ait pour IP x.x.x.x et écoute sur le port 4949. Lancez la commande suivante :
telnet x.x.x.x 4949
Vous pouvez alors afficher l'aide en appuyant sur entrée afin de voir quelle commande sont disponibles. On retiendra principalement les trois directives suivantes :
* //list :// liste les plugins munin activés,
* //fetch __nom_du_plugin__ :// déclenche une collecte de point avec ce plugin,
* //quit :// quitte la sonde.
//Exemple :// dans ce qui suit, on liste les plugins (list), on déclenche une collecte de point pour le plugin apache_accesses (fetch apache_accesses) et on quitte (quit)
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
# munin node at nom_de_la_machine_sonde
list
apache_accesses apache_processes apache_volume cpu cpuspeed df df_inode entropy exim_mailqueue exim_mailstats forks fw_conntrack fw_forwarded_local http_loadtime if_eth0 interrupts iostat iostat_ios irqstats load memory mysql_queries mysql_slowqueries mysql_threads open_files open_inodes proc_pri processes smart_sda smart_sdb swap threads uptime users vmstat
fetch apache_accesses
accesses80.value 11705
.
quit
Connection closed by foreign host.
Dans cet exemple, la commande s'est bien déroulée, donc le plugin est fonctionnel. En cas de message d'erreur, vérifiez dans la section dédiée au plugin mis en cause que vous n'avez pas oublié d'installer un paquet sur la machine sonde (par exemple libwww-perl si vous utilisez un plugin munin concernant apache).
===== Règles Iptables (Firewall) =====
iptables -A OUTPUT -p tcp --sport 4949 -j ACCEPT
iptables -A INPUT -p tcp --dport 4949 -j ACCEPT
Vous pouvez également autoriser la "récolte" d'informations depuis un seul serveur en spécifiant la source autorisée dans la deuxième règle.
Par exemple, chez moi, seul le pc de la maison est autorisé à récupérer les informations du serveur dédié. En supposant que mon ip à la maison soit 82.xxx.xxx.xxx Les commandes iptables à lancer sur le serveur ressembleraient donc à ceci:
iptables -A OUTPUT -p tcp --sport 4949 -j ACCEPT
iptables -A INPUT -p tcp --dport 4949 -s 82.xxx.xxx.xxx -j ACCEPT
ps: ces règles s'appliquent uniquement avec une police par défaut "DROP"
===== Liens =====
* [[https://munin-monitoring.org//|Site officiel de Munin (EN)]]
* [[http://muninexchange.projects.linpro.no/|Autres plugins Munin (EN)]]
* Exemple de Munin en action : [[http://munin.ping.uio.no/]], [[http://demo.munin-monitoring.org | Démo sur le site officiel]]
*[[:Nagios]]
*[[:Shinken]], écrit en python et pleinement compatible avec Nagios
*[[:Sysstat]] [[https://ubunlog.com/fr/systat-herramienta-monitorizar-ubuntu|Blog tutoriel]]
*[[:vROps]] VMware vRealize Operations
----
//Contributeurs : [[utilisateurs:ostaquet]], [[utilisateurs:stephaneguedon]], [[utilisateurs:elemmire]], [[utilisateurs:rapidos]], [[utilisateurs:MaMieMando]], [[http://karchnu.fr|Karchnu]] //