Monitorer son serveur Linux avec Munin
Voilà un tutoriel que j'avais envie de faire depuis longtemps ! En effet Munin est un outil que j'utilise depuis plusieurs années, et je n'ai jamais pris le temps de faire un article malgré toutes les demandes que j'ai eues. Pourtant, c'est super simple à installer et à configurer !
Sommaire
[toc]Comment fonctionne Munin ?
Munin est un outil de monitoring écrit en Perl et maintenu depuis 2003.
Munin est composé en deux services : munin-master qui va récupérer les données sur un ou plusieurs munin-node à intervalles réguliers (5 minutes). Ensuite munin-node génère des graphiques et des alertes si besoin.
Nous allons donc avoir besoin d'un serveur sur lequel installer le master, et ensuite nous allons installer les node sur les serveurs à monitorer.
Ensuite pour voir les graphiques, c'est super simple : munin génère des pages HTML et des graphiques sur forme d'image toutes les 5 minutes. Il suffit donc de faire pointer son serveur web sur le bon dossier, et c'est bon.
Pour vous faire une idée d'à quoi ressemble Munin, voici mon Munin public pour mon instance Mastodon. La prochaine version a l'air jolie !
Installation de munin-node
Commençons par installer les node sur les serveurs que l'on souhaite monitorer.
Sur Debian et Ubuntu, on installe les paquets suivants avec APT :
apt install munin-node munin-plugins-extra
Un fois que c'est fait, on va pouvoir ajouter des plugins : chaque plugin va récolter des données différentes.
Ajout de plugins
Pour visualiser les plugins présents, on peut utiliser la commande munin-node-configure
:
Pour voir les plugins activés :
Pour avoir une suggestion de plugins activables :
Nos plugins sont des scripts Perl qui se trouvent dans /usr/share/munin/plugins
, et ceux activés dans /etc/munin/plugins
. Pour les activer il suffit de faire un lien symbolique entre les 2.
cd /etc/munin/plugins ln -s /usr/share/munin/plugins/cpu . ln -s /usr/share/munin/plugins/load .
Attention certains plugins prennent leur nom en paramètre, ici pour l'interface réseau :
ln -s /usr/share/munin/plugins/if_ if_eth0
Ce qui est chouette avec munin c'est qu'il y a beaucoup de plugins de disponibles par défaut, et encore plus dans le dépôt munin-contrib.
Et vous pouvez aussi créer les vôtres !Autoriser un master
Munin communique par défaut sur le port 4949, n'oubliez pas de l'ouvrir si besoin.
Par défaut, Munin autorise localhost à récupérer les données. Pour autoriser notre master distant, on ajoute son IP dans /etc/munin/munin-node.conf
:
allow ^123\\.123\\.123\\.123$ allow ^2001:db8:a0b:12f0::1$
Appliquer les changements
On redémarre le service pour qu'il prenne en compte nos nouveaux changements :
service munin-node restart
Installation du maitre
C'est bien beau d'installer des nodes, mais il faut bien les récolter ces données !
On installe le grand maître :
apt-get install munin
Il a dans ses dépendances munin-node, donc il se monitore tout seul par défaut.
Pour prendre en compte les changements, on redémarre le même service :
service munin-node restart
Pour le configurer, la documentation est votre meilleure amie, mais clairement l'avantage de Munin c'est qu'il n'a pas grand chose à faire.
Ajout d'un node
Dans /etc/munin/munin.conf
on remarque que par défaut, munin monitor le localhost :
# a simple host tree [localhost.localdomain] address 127.0.0.1 use_node_name yes
Vous pouvez remplacer localhost.localdomain
par le FQDN de votre machine. Avec use_node_name yes
c'est lui qui apparaîtra dans l'interface web.
Ensuite pour ajouter d'autres nodes à monitorer c'est facile, par exemple :
[lyra.angristan.xyz] address 123.123.123.123 use_node_name yes
Communication master/node via TLS
Il est possible de faire communiquer les serveurs via TLS en utilisant des certificats x509.Accès à l'interface web
Là encore, on peut difficilement faire plus simple : Munin génère des pages HTML toutes les 5 minutes dans /var/cache/munin/www
. Il suffit donc de faire pointer le vhost de son serveur web sur ce dossier.
Je ne vous met pas toute la marche à suivre parce que c'est basique et que ça se trouve partout. Personnellement j'ai aussi ajouté une authentification HTTP.
On peut aussi utiliser des thèmes !
Génération dynamique des graphiques
Par défaut, Munin génère des graphiques toutes les 5 minutes. Pour alléger la charge de la machine si elle est peu puissante (ça consomme rien sur mon Rapsberry Pi pour info), mais surtout si vous avez beaucoup de sondes et de machines, vous pouvez générer des graphiques dynamiquement avec CGI. Vous en aurez aussi besoin si vous voulez zommer ou redimensionner des graphiques. À savoir que dans Munin 3, il y aura un daemon HTTP qui va remplacer CGI. On n'aura donc qu'à fair un reverse proxy.Debug
Jetez un oeil au dossier /var/log/munin/
. Le log /var/log/munin/munin-update.log
est le plus intéressant si vous avez des soucis de plugins ou de données qui remontent pas.
Aussi, hyper pratique, pour exécuter un plugin à la main :
cd /etc/munin/plugins root@server /e/m/plugins# munin-run memory slab.value 1528418304 swap_cache.value 0 page_tables.value 50163712 vmalloc_used.value 0 apps.value 1784778752 free.value 11720085504 buffers.value 1359192064 cached.value 17193353216 swap.value 0 committed.value 9598087168 mapped.value 238342144 active.value 14043992064 inactive.value 6173065216
Sauvegarde
Il faut backup le dossier/var/lib/munin
pour les données de monitoring, et /etc/munin
pour la configuration.
Notifications par mail
On peut configurer Munin pour qu'il envoie des alertes au dessus de certain seuils.
Tout d'abord il faut avoir un relais SMTP fonctionnel :
apt install exim4
(Si l'envoi de mail avec la commande mail ne fonctionne pas, essayez un dpkg-reconfigure exim4
)
Ensuite dans /etc/munin/munin.conf
on paramètre la commande et le contact :
contact.angristan.command /usr/bin/mail -s "Munin Alert - ${var:host}" user@mail.tld contact.angristan.always_send warning critical
La première ligne est la commande que Munin va utiliser pour envoyer les mails, avec l'adresse à la fin, et la seconde signifie que l'on va utilise le contact "angristan" définit au dessus pour les alertes de type warning et critical.
Ensuite on définit nos seuils par plugin et par hôte, par exemple :
[lyra.angristan.xyz] address 123.123.123.123 use_node_name yes load.load.warning 2 load.load.warning 4 cpu.user.warning 20000000 cpu.user.critical 50000000
C'est de la forme nomduplugin.sonde valeur
(à déterminer avec munin-run
)
Une notification ressemble à ça :
Attention il ne gère pas les changements d'états et va vous envoyer des mails toutes les 5 minutes tant que la ou les sondes en question sont en warning ou critical.
Enjoy !
Alors, heureux ? Munin se fait un peu vieux et n'est pas très adapté pour une petite échelle de temps, mais au moins c'est léger et c'est chouette pour avoir un historique. Moi j'adore, et je compte pas l'enlever de mes serveurs avant un petit moment !
L'article Monitorer son serveur Linux avec Munin a été publié sur Angristan