Monitorer son serveur Linux avec Munin

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 !

Monitorer son serveur Linux avec Munin

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 :

Monitorer son serveur Linux avec Munin

Pour voir les plugins activés :

Monitorer son serveur Linux avec Munin

Pour avoir une suggestion de plugins activables :

Monitorer son serveur Linux avec Munin

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 :

Alerte mail Munin

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

Vus : 1343
Publié par Angristan : 57