Nagios

From AleikoumWiki

(Difference between revisions)
Jump to: navigation, search
m
m
Line 123: Line 123:
La seule subtilite c'est pour les urls :
La seule subtilite c'est pour les urls :
-
* --with-cgiurl :
+
* --with-cgiurl : represente le chemin pour acceder aux CGI's. Dans notre cas : http://plop.com/nagios/cgi-bin
-
* --with-htmurl :
+
* --with-htmurl : represente le chemin pour acceder a l'interface Nagios. Dans notre cas : http://plop.com/nagios
 +
<br />
 +
Nous verrons apres comment configurer le serveur Apache pour servir tout ca.<br />
 +
<br />
 +
Si le configure s'est bien passe il vous suffit de lancer le make ainsi :
 +
<pre>
 +
make all && make install && make install-init && make install-config
 +
</pre>
 +
 
 +
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''
 +
* make install-config :
==== L'installation des plugins ====
==== L'installation des plugins ====

Revision as of 10:58, 10 March 2008

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

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

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
  • make install-config :

L'installation des plugins

La Configuration

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

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 :

  •  : ce plugin permet de checker les espaces disques d'une machine
  •  : ce plugin permet de checker la load d'une machine
  •  : ce plugin permet de checker le nombre d'occurence d'un process donne
  •  : ce plugin permet de checker plusieurs caracteristiques d'un CISCO 3750

...

Personal tools