Nagios, qui s'appelait précédemment NetSaint, est un outil de supervision pour parc de serveurs. Il permet d'auditer en permanence des machines, des services sur ces machines, de recevoir des alertes en cas de problème et d'éditer des rapports sur les activités passées.
Le coeur de système est écrit en C en est contrôlable à travers une application Web à base de CGI accessible via Apache. Il existe une alternative à l'application web en question, il s'agit de Oreon. J'ai tenté de l'installé mais il est d'une lourdeur assez déconcertante, donc pour l'instant, je reste sur l'IHM de base fournit avec nagios.
Sous Mandriva, rien de sorcier, juste un urpmi nagios nagios-www permet d'installer le coeur et l'application web. Apache sera redémarré et le tout accessible via http://localhost/nagios.
Premier constat, dieu que c'est moche, limite glauque. Vieille fontes avec serifs, noir et blanc, c'est du pure Web 0.1 béta. Mais ça marche, c'est déjà cela. Et ce n'est que le visuel au fond, l'important est tout de même le coeur de supervision. Mais là non plus, ce n'est pas très rose.
Nagios fait le café, ou presque. Il est sans aucun doute très complet mais cela se paye par un paramétrage digne d'un roman de Kafka. Je me suis frappé la config pour 4 pauvres serveurs, et j'imagine à peine l'enfer lorsqu'il y en a 100 ou 1000. Pour mieux comprendre, imaginons que nous ayons un serveur à rajouter et que nous voudrions auditer la bonne marche de son service HTTP. L'idée est donc d'ajouter ce nouveau serveur, d'y coller un service qui vérifie que le http est allumé et que la page de garde contient la phrase "Ceci est le site Web de Gaston".
Tout d'abord le serveur. Disons qu'il s'appelle Gaston. Nous allons donc créer un fichier /etc/nagios/servers/gaston.cfg dans lequel nous allons écrire :
Là ça passe où ça casse mais au moins cela donne la ligne où ça plante. Une fois que tout est correcte, on redémarre le service :
Il suffit d'aller sur l'URL de nagios, de faire un refresh pour voir un nouveau host apparaître. Dans un premier temps il apparaît en gris car la mise à jour des status est mise dans une file d'attente. Au bout de 5 minutes, cela devrait passer au vert, gaston est donc valide.
Deuxième étape, éditer à nouveau notre fichier gaston.cfg pour y ajouter le service à auditer :
En l'état cela ne marchera pas encore. En effet, il va falloir commencer par créer la commande Nagios check_http_text. En effet Nagios est fournit avec une foultitude de plugins permettant de tester un grand nombre de services. Mais pour une raison étrange, les plugins, qui sont de simple exécutables contenus en /usr/lib/nagios/plugins, ne sont pas reconnus directement. Il faut d'abord préalablement les déclarer dans le fichier /etc/nagios/commands.cfg. Une grande partie des plugins de base sont déjà configurés, par exemple s'il s'agissait de simple savoir si le serveur web était présent, la commande check_http aurait suffit. Mais là nous avons besoin d'un peu plus, il va donc falloir ajouter à la fin du fichier /etc/nagios/commands.cfg
Nous avons donc créé une commande check_http_text qui va invoquer le plugin check_http avec comme premier paramètre l'adresse IP du serveur, et en second paramètre une expression régulière à vérifier dans la page de garde. Ce paramètre correspond à ce qui se trouve après le point d'exclamation dans le service que l'on a écrit un peu plus haut check_http_text!Ceci est le site Web de Gaston. A notre que si nous avions créé une commande avec plusieurs paramètres, nous aurions rajouté des $ARG2$ ou $ARG3$ et aussi rajouté dans le service des paramètre précédé de leur point d'exclamation. Y'a pas à dire c'est totalement idiot comme formalisme.
Maintenant, on redémarre nagios et miracle, apparaît dans la liste des services notre nouveau audit.
A ce stade, vous avez presque toute les billes pour configurer nagios. C'est long, c'est fastidieux, on se trompe souvent mais on y arrive. L'ensemble est stable et ne plante pas, c'est déjà ça. Vous pouvez grouper les serveurs par groupe de serveur (objet hostgroup) et les services par groupe de service (servicegroup). Tout cela est dans la documentation et un exemple est présent dans /etc/nagios/localhost.cfg.
La dernière chose qu'il reste à voir pour passer cela en production sont les services locaux. En effet, une machine avec Nagios peut auditer tous les services publiques des autres machines (http, ftp, ldap, dns, etc...), elle peut aussi auditer ses ressources internes (état des disques, processus, charge, etc..), mais ce qu'elle ne peut pas faire c'est auditer les processus interne des autres machines. Par exemple connaître l'état de l'espace disque du serveur gaston.Ne vous attendez pas à un système génial par appels RPC et synchronisation des données. La solution Nagios pour ce cas de figure consiste à installer un nouveau service sur chaque machine qui va servir de relais. Ce service s'appelle nrpe. Il s'agit d'un petit serveur qui va se mettre en écoute d'un port de la machine distante et répondre aux requêtes de votre nagios. Lorsqu'il reçoit une demande, il va exécuter un plugin nagios en local et transmettre sa réponse à Nagios. Conséquence directe, nrpe a son propre fichier de configuration qui n'a rien à voir avec celui de nagios. Donc si vous pensiez paramétrer cela à distance c'est raté.
Pour reprendre l'exemple de l'audit à distance de l'état des disques. Nous allons donc déjà installer sur gaston le service nrpe via un urpmi nrpe. Sur la machine nagios nous allons installé le plugin nrpe via un urpmi nrpe-plugin. Ensuite nous allons éditer sur gaston le fichier /etc/nagios/nrpe.cfg et localiser la ligne contenant command[check_disk1]. Vous commencez à comprendre, cette ligne publie via nrpe un paramétrage spécifique du plugin check_disk qui pour l'instant utilise la partition /dev/hda1. Changer la référence de la partition pour par exemple auditer le répertoire /var en /dev/sda3. On remplace donc hda1 par sda3. Le reste ne change pas. Ensuite il faut sauver et redémarrer nrpe via un service nrpe restart.
Maintenant il faut, au niveau du serveur Nagios, créer une nouvelle commande qui prends en charge le plugin nrpe. Pour cela il faut à nouveau édite le fichier /etc/nagios/commands.cfg et ajouter à la fin :
Maintenant nous allons ajouter un nouveau service à /etc/nagios/servers/gaston.cfg en ajoutant à la fin du fichier :
Notez le paramètre !check_disk1, il va être transmis à la commande et remplacer l'argument $ARG1$ avant que le plugin nrpe soit exécuté. Le serveur gaston va recevoir la demande de plugin check_disk1 et va donc exécuter en local le plugin check_disk sur la partition /dev/sda3. Le résultat est renvoyé à nrpe, qui le revois au plugin nrpe sur la machine nagios qui va le rendre à nagios lui-même. ouf ! Dans la série pourquoi faire simple lorsque l'on peut faire compliqué...
Tout d'abord les points forts :
Tout d'abord les points faibles :
- répondre
Dab, le 4 July, 2007 - 11:12Quelques observations en vrac ....
Son prédécesseur n'est pas allsaint mais Netsaint.
La verif de la config ne se fait pas par nagios -d mais nagios -v. On peut aussi optimiser l'ordonnanceur avec un nagios -s.
Pour NRPE je te conseille d'ajouter des arguments à la définition de la commande:
En effet la config de nagios est un peu lourde mais elle est très souple. Ainsi tu peux très bien demander le controle de l'accès à une base de données toute les 3 mn, tous les jours de 8h à 17h et en cas de pb avertir par mail l'équipe de production les jours de la semaine et sur téléphone astreinte le samedi et dimanche mais pas avant midi:)
Tu peux aussi récupérer les données fournies par les services, les stocker en base RRD et en tirer des graphes.
Pour une config plus graphique, regarde du coté de http://www.oreon-project.org et pour d'autres plugins non officiel http://www.nagiosexchange.org ... tu y trouvera surement ton bonheur
- répondre
Ulhume, le 4 July, 2007 - 15:00Je te remercie pour tes remarques et conseils, c'est corrigé.
Pour ce qui est de la configuration de Nagios, ce n'est pas sa souplesse que je conteste plus mais son langage. La conception de ce produit se veut très "orientée objet" et le langage, lui, pas du tout... En conséquence tu passes un peu ta vie à croiser des références (de hostname par exemple) dans tous les sens. Un syntaxe XML me paraîtrait un peu plus logique :
<service name="...">
</service>
</host>
Cela n'empêche pas de faire des références le cas échéant pas cela conserve une fluidité de lecture pour le cas le plus général.
Autre aspect étrange, le fait qu'il y ait une relation 1:1 entre IP et host. J'ai nombre de hosts ayant plusieurs IP, ou pire, une seule IP pour plusieurs services hébergés par plusieurs hosts en fonction du port. Dans ce cas, il faut faire fleurir des commandes spécifiques avec les IP/Ports en plus. Rien d'impossible, mais une certaine complexité à la relecture.
Mon but n'est pas de "casser" nagios qui fait très bien le job, mais juste de me demander comment il pourrait évoluer pour plus d'efficacité
En d'autres terme, il y a deux paradigmes possibles, Soit la description de la topologie d'un réseau, ce que cherche à faire Nagios mais en ce cas, la syntaxe de suit pas bien. Soit définir des agents/sondes que tu organises par famille, pourquoi pas géographique. Lorsque je regarde la syntaxe de Nagios, j'ai l'impression d'un "entre les deux".
Sinon, j'ai essayé le produit d'Oreon... Franchement c'est pas terrible. Zero support postgresql, un système de pooling des logs pour alimenter leur base. Je ne suis sûrement pas allé assez loin mais le produit m'a clairement déçu.
- répondre
Dab, le 4 July, 2007 - 16:52Si tes machines ont plusieurs adresses IP j'imagine que celles-ci sont traduits avec enregistrements DNS différents, il est donc judicieux de créer plusieurs hosts dans Nagios non ? Migration d'une ip virtuelle sur une autre machine => pas de modif de la conf de Nagios
Sinon tu peux déclarer une machine avec plusieurs adresses IP : address 192.168.1.1,192.168.1.2
Pour le PAT je n'ai pas été confronté à ce pb et ne vois pas très bien comment procéder puisque le controle (via NRPE) se fait sur un seul port. (a moins de déclarer plusieurs commande nrpe sur des ports différents mais là ça devient lourd dingue.). Dans tous les cas tu aurais eu le même pb avec n'importe quel outil de supervision.
L'idée du XML : il semble que kk1 ai eu la même
http://blog.nicolargo.com/2007/04/de-nagios-a-xml.html
Oréon je l'avais rapidement testé à une époque mais au final j'aime autant remplir mes fichiers de conf à la mano ou par des petits scripts. Pour y voir un peu plus clair j'ai créé autant de fichiers de conf qu'il y a de machines à contrôler, ceux-ci étant stockés dans des répertoires relatif à l'OS des machines.
mes_conf/linux/hostgroups.cfg
mes_conf/linux/services-machine1.cfg
mes_conf/linux/ ...
mes_conf/windows/ ...
suffit ensuite d'ajouter à ton nagios.cfg des lignes du type:
cfg_dir=/etc/nagios/mes_conf/windows
voili voilà ...
- répondre
Ulhume, le 4 July, 2007 - 18:24Pas mal le coup du convertisseur XML. Comme quoi il faut toujours chercher avant de faire
Sinon pour le coup du multi-IP, comment tu fais pour les services qui utilisent $HOSTADDRESS$, ils se prennent les deux comme déclaré ?
PAT ? Ça veut dire quoi ?
Dans tous les cas, l'idée du script va faire son chemin je pense. Tu as l'air d'utiliser Nagios pour ton taf, moi c'est pour mes 4 misérables serveurs
Mais au fond la contrainte est là même vu que j'ai 0 temps pour de l'exploitation et de l'audit manuel ...
NB: En réalité j'ai commencé il y a un petit moment un outil en java qui fait peu ou prou le job de nagios. Vu que je n'ai pas encore eu le temps de le terminé, j'utilise Nagios pour tester ce qui se fait en live. Dans mon approche je décrit plus les services que les machines (en xml) et les senseurs sont plus orientés performance que fonctionnement (en gros perf à -1 = Warning -2 = Critique). Ce qui me permet de faire d'une pierre deux coups en quelque sorte.
- répondre
malic , le 30 October, 2008 - 10:15Quite à mettre une usine à gaz comme nagios pour la maison, autant passer à centreon... ça vous évitera de mettre trop le nez dans les fichiers de conf.
Attention, par contre c'est peut être aller une peu loin pour une maison mais plus c'est simple, plus c'est facilement mobile, remplaçable, manipulable et surtout moins addictif.
- répondre
malic , le 30 October, 2008 - 10:20Tu avais déjà regarder Centreon, j'avais pas lu le commentaire.
< note pour plus tard : lire les commentaires en plus de l'article
ahem..
- répondre
Ulhume, le 30 October, 2008 - 10:41@malic yep j'avais déjà regardé mais il y a plus d'un an pour la première version de ce billet. Et c'était à mon sens une usine à gaz encore pire que Nagios tout seul, avec nécessité de mettre en place une base forcement mySql (je suis en Postgres). Faudrait que je le reteste dans une nouvelle version, mais basiquement centreon est juste un wrapper autour de nagios.
- répondre
Dab, le 30 October, 2008 - 10:56...Quite à mettre une usine à gaz comme nagios pour la maison, autant passer à centreon...
hmmmm... ça restera une usine à gaz ... avec des surcouches supplémentaires ... par contre il y a Munin très simple de mise en oeuvre.
nota :... à lancer à travers de le réseau et de l'agrégation des résultats dans une base de donnée ... Par défaut il ne fait pas d'agrégation en base mais tout est possible via 'process_performance'
- répondre
Ulhume, le 30 October, 2008 - 10:55@Dab dommage que je n'ai pas connu munin plus tôt
Poster un nouveau commentaire