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 |
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!
=>
Hum, oulalala les fôôôôtes!
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.
@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.
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.
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é.
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
@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).
@cyp
justement, ma prochaine tâche est de coupler Zabbix avec Ansible ^^
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
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 :) )
@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
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.
@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 ^^
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 ???
Aucune idée.
Adepte du python vous devriez regarder shinken pour le monitoring.
Merci du signalement, ça à l’air sympa.
@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..