Nagios
From AleikoumWiki
Retour d'experience, howtos, scripts supplementaires, philosophie autour du meilleur logiciel de supervision OpenSource : Nagios !
Contents |
L'Approche
Qu'est ce ?
Nagios est L'OUTIL de supervision OpenSource Linux ! Il repose entièrement sur le moteur NetSaint, un ancien système de monitoring. La première version de Nagios est parue en Mai 2002 et a été entièrement conçue par Ethan Galstad. Nagios offre les services suivants :
- Surveillance des services réseaux (SMTP, POP3, HTTP, NNTP, PING, etc.)
- Surveillance des ressources des hôtes (charge processeur, utilisation des disques, etc.)
- Système simple de plug-ins permettant aux utilisateurs de développer facilement leurs propres vérifications de services.
- Parallélisation de la vérifications des services.
- Possibilité de définir la hiérarchie du réseau en utilisant des hôtes "parents", ce qui permet la détection et la distinction entre les hôtes qui sont à l'arrêt et ceux qui sont injoignables.
- Notifications des contacts quand un hôte ou un service a un problème (via e-mail, pager, ou par une méthode définie par l'utilisateur)
- Possibilité de définir des gestionnaires d'évènements qui s'exécutent pour des évènements sur des hôtes ou des services, pour une résolution des problèmes pro-active
- Rotation automatique des fichiers log
- Support pour l'implémentation de la surveillance des hôtes de manière redondante
- Interface web, pour voir l'état actuel du réseau, notification et historique des problèmes, fichiers log, etc.
Nagios s'appuie sur un serveur Web (qui est un des pré requis) et des scripts CGIs qui permettent de représenter les analyses, les états des services ou des hôtes, les informations des notifications, les logs, la configuration... Son fonctionnement repose sur plusieurs fichiers de configuration qui regroupent les définitions des tests, des politiques, des contacts, des hôtes, etc... Bref plein de choses !
Voici une presentation que vous pouvez retrouver dans la documentation officielle de Nagios :
Nagios® is a system and network monitoring application. It watches hosts and services that you specify, alerting you when things go bad and when they get better. Nagios was originally designed to run under Linux, although it should work under most other unices as well. The only requirement of running Nagios is a machine running Linux (or UNIX variant) and a C compiler. You will probably also want to have TCP/IP configured, as most service checks will be performed over the network. You are not required to use the CGIs included with Nagios. However, if you do decide to use them, you will need to have the following software installed... 1. A web server (preferrably Apache) 2. Thomas Boutell's gd library version 1.6.3 or higher (required by the statusmap and trends CGIs) Nagios is licensed under the terms of the GNU General Public License Version 2 as published by the Free Software Foundation. This gives you legal permission to copy, distribute and/or modify Nagios under certain conditions. Read the 'LICENSE' file in the Nagios distribution or read the online version of the license for more details.
Pourquoi lui ?
La premiere fois que j'ai du mettre en place un Nagios de production, j'avais le cahier des charges suivants :
- la solution doit être en mesure d'offrir au moins les mêmes services que la solution actuellement déployée : BigBrother,
- permettre une meilleure réactivité vis à vis d'un problème, on parlera même de pro-activité dans le sens où l'administrateur doit pouvoir être averti des problèmes avant même que l'utilisateur ne s'en rende compte afin d'assurer un rétablissement plus rapide de la situation,
- permettre une politique de notifications complètes et entièrement paramètrables,
- assurer une bonne gestion des logs et historiques avec possibilité de les sauvegarder en base de données,
- possibilité de faire du polling SNMP en particulier pour contrôler les débits d'échange de données au niveau de routeurs/switchs par exemple voire même d'un hôte,
- permettre la représentation graphique des données récoltées,
- et être gratuit !!!
De nombreux produits pour la supervision existent sur le marché : Tivoli d'IBM, OVO et NNM d'HP, Patrol de BMC, COABA d'Alcove ou encore Ganglia développé par l'université de Berkeley. Cependant parmi toutes ces solutions aucune ne répond entièrement aux besoins cités plus haut :
- Les solutions proposées par Alcove, IBM, HP ou Patrol sont toutes payantes (compter près de 9 500 euros pour la solution la moins chère).
- La solution Ganglia ne permet pas de gérer les notifications et n'assure pas la gestion d'un historique temps réel.
Le choix s'est donc porté naturellement sur Nagios qui correspond parfaitement aux besoins... Surtout qu'on peut rajouter les avantages suivants : communaute importante et reactive (et meme en France !), l'outil est le plus souple du marche (car finalement il faut voir Nagios comme un ordonnanceur interpretant des resultats... on peut quasi tout faire pour peut qu'on puisse en faire un script :) ) .
Bref Nagios est vraiment a mon sens une solution ultime pour peu qu'on passe du temps a configurer l'outil comme il faut et a ecrire les plug-ins qui nous permettra de checker nos ressources (ca on l'expliquera apres !)
Liens
Mon super rapport de stage - Mise en place d'une solution de supervision - (attention 80/100 quand meme !) est dispo ici.
La Mise en Place
Pour expliquer comment mettre en place une solution Nagios, il vous suffira de suivre les points qui suivent
Les Prérequis
Dans l'absolu, les prerequis sont tres legers :
- un serveur web pouvant executer des CGI (un bon petit Apache des familles)
- la librairie gd (car certains CGI utiliseront cette lib pour un affichage particullier)
- heu c'est tout... :)
L'Installation
Pour commencer, il va falloir telecharger la derniere version stable de Nagios sur le site officiel : http://www.nagios.org/
De plus, je vous invite a recuperer les plugins officiels pour Nagios : http://sourceforge.net/project/showfiles.php?group_id=29880
A noter que pour toute la duree de l'installation il va falloir etre root :)
L'installation de Nagios
Dans un premier temps on va creer tout le necessaire pour l'installation
#le repertoire ou on va installer Nagios mkdir /usr/local/nagios # creation du user comme il faut ! mettez les uid et gid que vous voulez ! addgroup --gid 500 nagios adduser nagios --home /usr/local/nagios --uid 500 --gid 500 --disabled-password chown nagios.nagios /usr/local/nagios
Ce n'est pas tout ! Si vous souhaitez pouvoir utiliser les external commands (comme redemarrer le serveur Nagios, mettre du downtime...) il va falloir créer un groupe spécial pour ca :
# on cree donc ce nouveau groupe addgroup --gid 501 nagcmd # et on y ajoute le user nagios et celui qui fait tourner votre serveur apache usermod -G nagcmd user-apache usermod -G nagcmd nagios # il faudra en plus executer les commandes suivantes (cf la config nagios pour comprendre le detail) mkdir /usr/local/nagios/var/rw chown nagios.nagiocmd /usr/local/nagios/var/rw chmod u+rwx /usr/local/nagios/var/rw chmod g+rwx /usr/local/nagios/var/rw chmod g+s /usr/local/nagios/var/rw # a la fin les droits devront etre les suivants : drwxrws--- 2 nagios nagiocmd /usr/local/nagios/var/rw
Maintenant on est ready !
Donc dans un premier temps il va falloir decompresser l'archive nagios : tar -xvzf nagios-version.tar.gz && cd nagios-version
Et on lance le configure comme suit :
./configure --prefix=/usr/local/nagios \ --with-cgiurl=/nagios/cgi-bin \ --with-htmurl=/nagios/ \ --with-nagios-user=nagios \ --with-nagios-group=nagios \ --with-command-group=nagcmd
La seule subtilite c'est pour les urls :
- --with-cgiurl : represente le chemin pour acceder aux CGI's. Dans notre cas : http://plop.com/nagios/cgi-bin
- --with-htmurl : represente le chemin pour acceder a l'interface Nagios. Dans notre cas : http://plop.com/nagios
Nous verrons apres comment configurer le serveur Apache pour servir tout ca.
Si le configure s'est bien passe il vous suffit de lancer le make ainsi :
make all && make install && make install-init && make install-config
Alors :
- make all : va compiler le Nagios (avec les Cgi's et tout ce qu'il faut)
- make install : va deployer Nagios dans prefix
- make install-init : va copier le script de demarrage Nagios dans /etc/rc.d/init.d/nagios - pas obligatoire
- make install-config : va copier des fichiers de conf exemples dans prefix/etc/ - pas obligatoire
Donc maintenant si vous allez dans prefix soit dans notre cas /usr/local/nagios vous trouverez l'arborescence suivante :
- /bin : contient l'executable Nagios
- /etc : contient les fichiers de configurations de Nagios, d'hôtes, de services... pour l'instant seulement les exemples deployes lors du make install-config
- /libexec : contiendra les plugins
- /sbin : contient les scripts CGIs utilisés par Nagios
- /share : contient les fichiers HTML pour l'interface Web
- /var : contient les fichiers de log
Voila Nagios est installe ! Ouhou !!
L'installation des plugins
Bon deja commencons par decompresser l'archive des plugins : tar -xvzf nom-archive.tar.gz && cd nom-archive
Puis il suffit de taper les commandes suivantes afin de compiler et de deployer les plugins dans /usr/local/nagios/libexec
./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios make && make install
Et voila !!
La Configuration
La configuration se divise en deux sections : la config Apache et la config du Nagios !
La configuration d'Apache
Dans un premier temps on va configurer les alias/script alias qu'on a defini plus haut lors du configure du Nagios.
Il suffit de rajouter dans votre fichier de conf Apache les lignes suivantes :
# rajouter ces lignes dans le Virtual Host qui va bien ;) ScriptAlias /nagios/cgi-bin/ /usr/local/nagios/sbin/ # définition du scriptalias <Directory "/usr/local/nagios/sbin/"> AllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all </Directory> Alias /nagios/ /usr/local/nagios/share/ # définition de l'alias <Directory "/usr/local/nagios/share"> Options None AllowOverride AuthConfig Order allow,deny Allow from all </Directory>
Et normalement apres avoir reloade la config Apache en tapant http://votre-virtual-host/nagios/ on a accede à l'interface Web de Nagios ! Ouhou !!
Ok c'est pas mal ! Mais maintenant on veut restraindre l'acces via un login/mdp.
Dans le répertoire /usr/local/nagios/sbin, on va creer le fichier .htaccess qui doit contenir les lignes suivantes :
AuthName "Nagios Access" AuthType Basic AuthUserFile /usr/local/nagios/etc/htpasswd.users require valid-user
Ensuite il suffit de lancer la commande suivante
htpasswd -c /usr/local/nagios/etc/htpasswd.users nom_du_user
Et recommencer cette commande pour chaque user !
La configuration de Nagios
Pour la configuration de Nagios je vous invite a regarder la documentation qui est tres bien faite ( http://nagios.sourceforge.net/docs/2_0/ )et meme tres bien traduite :P ( http://www.nagioscommunity.org/2007/03/07/french-translation-of-nagios-2x-docs-ready/ )
La configuration de Nagiosgraph
Il faut dans un premier temps installer RRDTool qui est un prérequis pour Nagiosgraph 3.1/ Installation de RRDTool • Récupérer l'archive rrdtool-1.0.49.tar.gz : http://www.fastmirrors.org/rrdtool/ • Décompresser l'archive : tar xvvzf rrdtool-1.0.49.tar.gz • Dans le répertoire associé à l'archive : sh configure make make install RRDTool sera installé par défaut dans le répertoire suivant : /usr/local/rrdtool-1.0.49/ 3.2/ Installation de Nagiosgraph a/Installation • Récupérer l'archive nagiosgraph-0.3.tar.gz : http://sourceforge.net/project/showfiles.php?group_id=115472 et CGI.pm-3.08.tar.gz (si cette bibliothèque n'est pas installé) : http://search.cpan.org/src/LDS/CGI.pm-3.08/cgi_docs.html#download • Décompresser l'archive : tar xvvzf nomdelarchive • Dans le répertoire associé à l'archive CGI.pm-3.08.tar.gz, executer les commandes suivantes : perl Makefile.PL make make test make install • Créer un répertoire dans le répertoire d'installation de Nagios pour plus de lisibilité mkdir /usr/local/nagios/nagiosgraph • Copier les fichiers se trouvant dans le répertoire associé à l'archive nagiosgraph-0.3.tar.gz dans le répertoire /usr/local/nagios/nagiosgraph b/Configuration • Editer le fichier nagiosgraph.conf en indiquant les divers chemins : exemple de configuration :
- Le fichier de log lié à nagiosgraph
logfile = /usr/local/nagios/var/nagiosgraph.log
- Le répertoire ou les base de données rrd seront sauvegrdées, créer ce repertoire si il n existe pas
rrddir = /usr/local/nagios/nagiosgraph/rrd
- Chemin pour acceder au fichier map
mapfile = /usr/local/nagios/nagiosgraph/map
- Chemin ou se trouve l'executable rrdtool
rrdtool = /usr/local/rrdtool-1.0.48/bin/rrdtool Eventuellement modifier la valeur de debug pour les tests. • Vérifier les droits sur les fichiers : l'user nagios doit pouvoir écrire dans le répertoire des bases rrd (cf et l'user www doit pouvoir lire, les droits sur le répertoire /usr/local/nagios/nagiosgraph/rrd doivent être les suivants : drwxr-xr-x l'user nagios et les users www doivent pouvoir écrire dans le fichier log, les droits sur le fichier /usr/local/nagios/var/nagiosgraph.log doivent être les suivants : rw-rw-r-- • Editer le chemin "my $configfile" des fichiers show.cgi et insert.pl en précisant le chemin vers le fichier nagiosgraph.conf : my $configfile = '/usr/local/nagios/nagiosgraph/nagiosgraph.conf'; Il ne faut rien modifier d'autre dans ces fichiers. • Dans le fichier nagios.cfg :
- vérifier que l'option process_perf_data est bien activée, sinon activer la de la facon suivante :
process_performance_data=1
- éditer les service_perfdata_command ainsi :
service_perfdata_command=process-service-perfdata Cela signifie que pour chaque collecte de données (d'un contrôle de service) la commande process-service-perfdata sera executée • Spécifier dans le checkcommands.cfg la commande process-service-perfdata de la manière suivante : define command { command_name process-service-perfdata command_line /usr/local/nagios/nagiosgraph/insert.pl "$LASTCHECK$||$HOSTNAME$||$SERVICEDESC$||$OUTPUT$||$PERFDATA$" } A ce stade là si on lance Nagios, aucun graph ne sera généré mais les bases rrd seront créées (suivant ce qui aura été défini dans le fichier map). • Rajouter dans le fichier cgi.cfg la ligne suivante : xedtemplate_config_file=/usr/local/etc/nagios/extinfo.cfg Ce fichier va contenir en gros des infos suplémentaires sur les services : icône associée, lien vers graph(!!!!)... • Créer le fichier /usr/local/etc/nagios/extinfo.cfg et l'éditer de la manière suivante : Lotfi Erwan Ben Souiden Avril – Septembre 2005 60 / 73 Mise en place d'une solution de supervision Weborama define serviceextinfo { service_description DNS host_name erwanode,dnssecondaire notes_url /nagiosgraph/show.cgi?host=$HOSTNAME$&service=$SERVICEDESC$ icon_image /images/icon/nagios.gif icon_image_alt View graphs }
• Editer le fichier de configuration du serveur Web (httpd.conf) : ScriptAlias /nagiosgraph/ /usr/local/nagios/nagiosgraph/ <Directory "/usr/local/nagios/nagiosgraph"> AllowOverride AuthConfig Options ExecCGI Order allow,deny Allow from all </Directory> Rajouter le htaccess /usr/local/nagios/nagiosgraph/ si nécessaire ! (suivant la configuration Apache établie).
L'exploitation
Vous recevrez des mails quand ca sera la crise... on est ok ! (enfin si vous configurez bien votre outil vous recevrez le mail avant que ca soit l'apocalypse tout de meme :P )
On est tous d'accord pour dire que garder une fenetre FF sur l'onglet "Service Poblems" est lourd, meme si ca au moins le merite de nous reveler les hoquets de notre reseau ou systeme !
Pour remedier a tout ca il suffit d'utiliser ce petit plugin windows tres pratique : ntray ! Qui une fois configure, permet de garder un oeil tres facilement sur les etats detectes par nagios ! :)
Il existe plusieurs formes de ce plugins (avec des addons FF par exemple...) mais c'est celui la qui m'a convaincu !
From me
Bon y a de tout et de rien ! Mais certaines choses peuvent etre interessantes...
Rapports Email
J'ai ecrit une suite de petits scripts qui permettent de generer et envoyer des rapports mails avec des graphs.
Ces scripts se basent sur l'outil Nagiosgraph, et plus particulierement sur une petite modification du show.cgi, pour generer ces graphs.Ils sont ecrits en perl et peuvent tres facilement etre utilise en cron pour des rapports quotidien.
De plus j'ai cree deux petits CGIs (tjrs en perl) permettant de generer des rapports graphs a la volee via l'interface web !
Voici un exemple de mail que je recois tout les jours.
Comme les choses sont (mouhahaha) bien faites, voici le README ! Tout est explique et detaille (comment appeller les scripts, la ou les installer, les modules en plus necessaires...)
Et le reste des scripts se trouvent ici
Howto SNMP
Ah ce bon vieux protocole SNMP !
Grace a ce protocole vous allez etre capable d'interroger les MIBs (on va voir ce que c'est !) des equipements reseaux (switch, routeur ou meme machine) avec beaucoup d'aisance !
Je vais tenter de presenter quelques aspects qui vont surement vous etre tres utiles.
Configurer SNMPD
Pour repondre aux requetes, il faut bien entendu un serveur. Les questions arrivent a ce serveur et hop ce dernier repond (principe classique de client-serveur).
Pour SNMP le serveur se nomme (attention surprise...) snmpd !
Voici un fichier de conf (/etc/snmp/snmpd.conf) que j'ai pu utiliser lors de mes tests :
#/etc/snmp/snmpd.conf com2sec LocalNet 127.0.0.1 public com2sec Mynetwork 192.168.0.0/24 public group ROGroup v1 LocalNet group ROGroup v1 Mynetwork view tout included .1 access ROGroup "" v1 noauth exact tout none none
Avec cette conf, toutes les machines du reseau 192.168.0.0/24 pourront effectuer des requetes SNMP sur ce serveur !
Ensuite pour le script de demarrage du service, j'utilise le script suivant : snmpd
Les MIBs ? c'est quoi ?
D'apres Wikipedia :
Management Information Base, terme informatique désignant une base de données utilisée pour la gestion des réseaux, manipulable par des protocoles tels que SNMP, CMIP
Voila en gros c'est une super base de donnees que possedent les equipements de votre reseau.
Ces bases sont mises a jour par les equipements eux memes et c'est leur contenu qui est consulte et renvoye lorsqu'on fait une requete SNMP !
Pour interroger les entrees de ces MIBs on utilise ce qu'on appelle les OIDs. Les OIDs sont juste des cles pour identifier une entree unique de la MIB (par exemple l'etat des ventilateurs).
Donc au final pour faire une requete SNMP on doit :
- connaitre l'OID de l'entree qu'on souhaite interroger
- avoir les outils NetSNMP (mettre le lien ici)
Ca serait forcement trop simple si c'etait tout... certains equipements utilisent les MIBs standards mais ce n'est pas le cas de tous (je pense par exemple aux routeurs CISCO qui ont des MIBs complexes). Pour ces derniers il suffit d'aller sur le site du constructeur et de telecharger toutes les MIBs correspondantes a votre equipement ! (mettre les liens CISCO)
Ces MIBs sont justes des fichiers textes qu'il faudra copier au bon endroit, par defaut : /usr/share/snmp/mibs/
Si par hasard vous n'avez pas ces fameuses MIBs, il sera tout de meme possible de faire les requetes SNMP mais la comprehension des resultats sera juste pas evidente du tout :).
Exemple d'utilisation
Exemple avec snmpget et snmpwalk
Plugins Perl special SNMP
Envois de SMS
Alors pour l'envoie de SMS c'est tres simple en fait !
Pour cela il sera indispensable d'avoir un modem GSM (environ 100-160euros suivant le modele).
Generalement ce type d'equipement est fourni avec un cable usb ou serie... car la premiere (est vraiment seule difficulte) sera d'interfacee le modem avec votre serveur Nagios !
Mais comme les choses sont bien faites le site sur lequel j'ai chope l'utilitaire pour envoyer les sms explique tout ca : http://www.meinemullemaus.de/smstools/index.html
Sur ce site fait par un allemand (qui a eu la gentillesse de repondre a une de mes questions :) ), vous trouverez le demon pour envoyer (et accessoirement recevoir) les sms ainsi que toute la doc sur la configuration du demon et du modem ! C'est vraiment bien explique donc ca devrait aller :)
Mon fichier de conf ressemble a ceci :
# Fichier de configuration de smstools devices = GSM1 # 1 write all logging to the screen. You can also enter a filename. If you # remove that line, then the system log daemon (event log) will be used. logfile = /var/log/smsd.log loglevel = 7 sent = /var/spool/sms/sent [GSM1] # Windows: /dev/com1, Solaris: /dev/cua/a, Linux /dev/ttyS0 device = /dev/ttyS0 incoming = no baudrate = 115200 rtscts = yes pin = 1234 mode=new cs_convert = yes
plus d'info sur ce site : http://danielaliaman.com/blog//index.php?blog=2&cat=41
Boucle NSCA
Plugins Perl
Bon forcémment j'ai du ecrire plusieurs plugins dans le cadre de mon travail...
Certains n'ont pas d'interet a etre redistribues mais en voici quelques uns qui peuvent etre tres pratiques - les plugins sont tous en Perl :
- check_diskspace.pl: ce plugin permet de checker les espaces disques d'une machine
- check_cpuload.pl : ce plugin permet de checker la load d'une machine
- check_proc.pl : ce plugin permet de checker le nombre d'occurence d'un process donne
- check_snmp-cisco3750.pl : ce plugin permet de checker plusieurs caracteristiques d'un CISCO 3750
- check_dmesg.sh : ce petit plugin (shell) permet de checker le contenu du dmesg et donc d'avoir une vision de l'etat du systeme !
...