Nagios

From AleikoumWiki

Revision as of 09:31, 5 May 2008 by Erwan (Talk | contribs)
(diff) ←Older revision | Current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search

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 peu 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

  • nagios.org : le site officiel de la solution
  • nagiosexchange.org : le site officiel des plugins/projets annexes lies a nagios
  • forum FR : un forum francais bien pratique ;)
  • 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 :


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 :

  1. Le fichier de log lié à nagiosgraph

logfile = /usr/local/nagios/var/nagiosgraph.log

  1. 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

  1. Chemin pour acceder au fichier map

mapfile = /usr/local/nagios/nagiosgraph/map

  1. 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 : 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 !

...

Personal tools