Du code, du communisme

Monitorez vos serveurs avec munin et notifications par email

Avoir un serveur c’est bien, en prendre soin c’est mieux. J’ai longtemps administré des serveurs sans trop me soucier de ce qui pouvait leur arriver et bien des fois tout a planté car je n’avais pas su anticiper la catastrophe.
Un exemple courant, j’ai viré Apache pour installer Nginx et ce dernier log par défaut les accès http, après quelques semaines, le disque dur bien rempli, le serveur me claque dans les doigts, plus de place, tout merde, c’est le drame, pas moyen de rebooter à part en safe mode car disque plein, les hémorroïdes s’en mêlent, c’est foutu.
J’ai commencé par MRTG, pas terrible à installer mais il fait son boulot. Et puis j’ai changé de serveur pas mal de fois en une année, horrible d’avoir à réinstaller ce truc à chaque fois alors j’ai cherché autre chose, après quelques tests pas terribles je suis tombé sur munin, plutôt complet avec des plugins que l’on peut écrire soit-même. Facile à installer quand on utilise les packages, suivez le guide.
Installation de Munin:
Munin se compose de deux programmes.
Le maître (munin): qui va récupérer les infos et générer les graphs.
Le noeud (munin-node): qui s’installe sur tous les serveurs à monitorer y compris le maître si besoin et qui va envoyer les infos au maître.
Sur le serveur Maître pour une distribution Ubuntu:

sudo apt-get install munin munin-node munin-plugins-extra
sudo ln -s /var/cache/munin/www /var/www/munin
sudo /etc/init.d/munin-node restart

Pour voir s’afficher les pages il vous faudra un serveur web, exemple avec Nginx:
dans le répertoire conf.d de Nginx ajoutez un fichier munin.conf et mettez-y le code suivant.

vi /usr/local/nginx/conf.d/munin.conf
server {
    listen       80;
    server_name munin.monserveur.com;
	location / {
	        auth_basic            "Restricted";
	        # Create the htpasswd file with the htpasswd tool.
	        auth_basic_user_file  /etc/nginx/htpasswd;
	        root /var/www/munin/;
	        index  index.html index.htm;
	        expires modified +310s;
	}
}

Note: vous pouvez désactiver l’authentification si vous voulez rendre votre page publique.
Après réglage de vos DNS chez votre registrar vous devriez avoir quelque chose à la page http://munin.monserveur.com
Sur les serveurs à monitorer (les noeuds):

sudo apt-get install munin-node munin-plugins-extra

Il faut maintenant « dire » au serveur noeud l’IP du serveur maître pour qu’il puisse lui envoyer les informations sur l’état de la machine.
Editez le fichier /etc/munin/munin-node.conf

allow ^192\.168\.1\.200$

Cette partie va permettre au Maître de venir récupérer les infos nécessaires. Remplacez l’IP par celle de votre serveur Maître.
On redémarre munin-node pour prendre en compte les changements.

sudo /etc/init.d/munin-node restart

PS: Si il ne se passe rien vérifiez que vous n’avez pas un firewall qui bloque l’IP et/ou le port TCP/4949
Les plugins:
Les plugins sont des petits programmes permettant de rajouter des fonctionnalitées au monitoring comme la supervision de services tels que Redis, Varnish, Nginx, etc. La liste est ici
Attention: L’ajout des plugins se fait côté serveur Noeud !
En fait il s’agit de simples liens symboliques dans le répertoire /etc/munin/plugins/ pointants vers le répertoire /usr/share/munin/plugins/.
La liste des plugins disponibles s’obtient avec:

sudo munin-node-configure

Exemple rajouter le plugin pour monitorer Mysql:

ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/mysql_queries
Mysql en train de mourir...

Après que les machines noeuds aient été configurées on les déclare au serveur Maître:
Il faut éditer le fichier munin.conf sur le serveur Maître.

vi  /etc/munin/munin.conf
[sametmax]
    address sametmax.com
    df._home.warning 95
    use_node_name yes
[machine_locale_maitre]
    address  127.0.0.1
    use_node_name yes
[groupe_de_serveurs;]
    address  127.0.0.1
    use_node_name yes
[groupe_de_serveurs;serveur_pinkiepie]
    address  33.94.124.33
    use_node_name yes
[groupe_de_serveurs;serveur_rainbowdash]
    address  33.94.124.33
    use_node_name yes
[groupe_de_serveurs;serveur_fluttershy]
    address  42.42.42.42
    use_node_name yes

Analysons la config ci-dessus:
sametmax:
Le premier va nous sortir les stats du serveur sametmax.com, on peut mettre l’ip comme le nom de domaine.
machine_locale_maitre:
Si on veut monitorer la machine maitre on met 127.0.0.1
groupe_de_serveurs:
Va définir un groupe de serveurs, l’affichage groupera tous les serveurs y appartenant, c’est juste pour un affichage plus clair, ne pas oublier le « ; » à la fin
groupe_de_serveurs;serveur_pinkiepie:
Un serveur qui apparaîtra dans le groupe de serveurs avec rainbowdash et fluttershy
Notification par email:
Avec munin il est possible de recevoir des notifications lorsque certains capteurs de votre monitoring atteignent un certain seuil.
Vérifiez bien que sendmail est installé et qu’il fonctionne
Dans le shell on teste sendmail

echo 'Friendship adventure' | mail -s 'Cutie Map' monmail@moi.com

Toujours dans le fichier munin.conf sur le serveur Maître:

#email notifications settings
contacts max
contact.max.command mail -s "Munin notif ${var:host}" monmail@moi.com
contact.max.always_send warning critical

La premiere ligne définit un contact, la deuxième va envoyer l’email de notification via sendmail au mail indiqué.
La dernière ligne va indiquer à munin qu’il faut envoyer les alertes pour les warning et les critical.
Les seuils pour les notifications sont définis par warning et critical. Regardez plus haut pour le serveur [sametmax] nous avons défini un seuil pour df (disk free) de 95%.

[sametmax]
    address sametmax.com
    df._home.warning 95
    use_node_name yes

Ce qui veut dire que lorsque l’usage disque de /home aura dépassé les 95% d’utilisation munin va vous envoyer une notification par email. ça peut devenir lourd à la longue par contre car il s’arrête jamais 🙂
On redémarre munin sur le serveur maître pour prendre en compte les modif:

su - munin --shell=/bin/bash
/usr/share/munin/munin-update

Bon monitorage!