Monitorez vos serveurs avec munin et notifications par email 20


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_adolf]
    address  33.94.124.33
    use_node_name yes
 
[groupe_de_serveurs;serveur_himler]
    address  33.94.124.33
    use_node_name yes
 
[groupe_de_serveurs;serveur_DSK]
    address  69.69.69.69
    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_adolf:
Un serveur qui apparaîtra dans le groupe de serveurs avec himler et DSK

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 'Promo sur les BBW' | mail -s 'sujet à poil les putes' 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!

20 thoughts on “Monitorez vos serveurs avec munin et notifications par email

  • cyp

    Bon compromis Munin, c’est loin d’être la solution la plus complète mais c’est de loin la plus facile et rapide a déployer.

    Sinon ça vaut le coup de passer à la version 2 (sous Debian il est dans les backports).
    Les graphs et l’interface sont plus sympa et ont peut utiliser SSH pour encapsuler les communications, ça fait une modification de moins à effectuer sur les firewalls.
    En plus on peut se contenter de l’installer sur le maitre car il supporte les version précédente.

  • Max Post author

    @N
    fautes corrigées

    @cyp j’ai essayé dinstaller la derniere depuis leur repo sur une fedora, apres 48 h de bataille avec des libs impossibles à installer j’ai laissé tomber.
    Ubuntu doit être plus à jour mais je n’aime pas ubuntu en mode serveur, il m’a tjrs fait des trucs bizarres, je tenterai quand même de le réinstaller lorsqu’une nouvelle distrib verra le jour.

  • tsyr2ko

    J’aime bien munin pour sa simplicité, qui reste fidèle à l’idéologie UNIX, à savoir un programme ne fait qu’une chose, mais il la fait bien.
    Cependant, je lui préfère quand même Zabbix, plus complexe à mettre en place, mais offrant des possibilités autres, ne se contente pas QUE de collecter et afficher les informations d’une infrastructure.

  • cyp

    Je l’utilise pas trop mais Fedora est à jour il me semble. Je suis quasi sur de l’avoir installé dessus en début d’année, ça doit être dans les update ou dans les dépôts EPEL.
    Bref normalement ce n’est pas plus compliqué que sous Squeeze pourvu que la distrib n’est pas été trop trafiqué.

  • gardouille

    J’aime plutôt bien xymon/hobbit =)

    Je n’ai pas suffisamment pratiqué munin et pas du tout zabbix pour être objectif, mais Xymon fait ce que je veux avec une communauté plutôt active (ML).

    Ok, c’est moche et alors? :D

  • cyp

    @tsyr2ko
    +1 pour Zabbix c’est ce que j’utilise aussi quand Munin ne suffit pas. Possibilités plus nombreuses (triggers…) mais le temps de paramétrage augmente en conséquence (coté installation ça reste très correct, c’est plutôt bien packagé maintenant).

  • Max Post author

    zabbix c pas en php ? j’essais de pas trop avoir de languages diff pour mes app, ça m’evite de m’embrouiller et d’installer plein de trucs

  • tsyr2ko

    La partie “agent” est en C et la partie “visualisation” est en PHP effectivement (mais vu que mes devs sont pour la plupart dans ce langage, c’est moins dérangeant que pour une stack full Py :) )

  • cyp

    @Max
    D’un autre coté avec Munin tu te tape du Perl et du Java…
    Par curiosité je viens de chercher il existe https://amon.cx/ en Python (mais c’est mal partie c’est un produit commercial et pas le moindre lien pour download une version de test à l’horizon).

    @tsyr2ko
    Sympa comme projet, et pour le coup toi c’est l’inverse tu te retrouve avec du Python pour Ansible :-p

    • Max Post author

      perl et java sont installés d’office sur les serveurs, enfin jamais eu à installer de mémoire, sauf cas rare d’updates.
      Avec le temps j’essais d’uniformiser mes configs, de pas plein de service différents qui tournent, imagine un php + mysql + ruby + apache + nginx + django + lavarel + etc sur un même serveur, la mort :)
      Moins il y a de services moins il y a de maintenance et j’aime pas passer des heures à chercher les fichiers de config avec des bugs inexplicables (c’est ma spécialité, ça foire tjrs chez moi).

      je connais pas amon.cx et il a l’air mignon tout plein côté design, mettre 40$ pour monitorer des serveurs je trouve ça raisonnable, ça peut sauver des centaines de $ de CA mais comme tu dis pas de test à l’horizon c’est dommage :/ je vais les contacter voir si ils peuvent pas filer une url.

  • tsyr2ko

    @cyp
    Oui, mais comme mon objectif à moyen terme est d’apprendre le python (d’où ma présence sur ce blog), c’est pas super gênant :)

    @max
    -lavarel +laravel ? En tout cas, si c’est cela, bon choix ^^

  • Morgan

    Hello,

    Merci pour le tuto. J’ai besoin d’un complément d’information si vous avez le temps. J’essaye de m’envoyer un message quand le niveau du toner est “warning” & “critical” j’utilise le snmp, plus précisément : snmp__print_supplies.

    Je ne comprend pas pourquoi ça ne fonctionne pas, la commande d’envoi de mail fonctionne correctement, quand mon toner est retiré, je suis bien en rouge sur le graph mais pas de message.

    Avez-vous une idée ???

  • Max Post author

    @tidj, y pas une url de démo qui traine kkek part ?

    ça me fait mal à la glotte d’avoir à installer une app pour savoir si elle me plait sans en avoir rien vu avant..

Leave a comment

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.