[couverture de Linux Magazine 65]

Nagios

Article publié dans Linux Magazine 65, octobre 2004.

Copyright © 2004 - Jérôme Fenal et Camille Barette

[+ del.icio.us] [+ Developers Zone] [+ Bookmarks.fr] [Digg this] [+ My Yahoo!]

Chapeau de l'article

Nagios[1] est un moniteur de supervision. Successeur de NetSaint, logiciel libre reconnu dans le monde de la supervision, utilisé par les plus grands opérateurs, il permet une supervision active et passive de serveurs, équipements réseaux, et surtout de services divers et variés.

Très puissant, mais utilisant des principes simples, il reste néanmoins complexe à mettre en œuvre dans un environnement de production.

Le but de cet article est de vous faire une introduction à Nagios, ses concepts, afin de voir comment il peut vous rendre service, de la même façon qu'il nous rend service en production depuis deux ans.

Concepts de supervision

La supervision est un ensemble de concepts recouvrant la surveillance du bon fonctionnement d'une production. Les différentes possibilités de supervision qui nous sont offertes sont en gros les suivantes :

SNMP (Simple Network Management Protocol), déjà abordé dans ces colonnes est un protocole qui peut rendre encore bien des services tant il a été utilisé et embrassé par les différents vendeurs de logiciels et de matériels. Nagios peut utiliser SNMP pour surveiller par exemple les équipements réseau.

La supervision des journaux est aussi simple à faire qu'un tail sur /var/log/messages. Plus pratiquement, cela passe maintenant par l'utilisation d'un serveur syslog centralisant les messages, couplé à un analyseur temps-réel de ces messages. Allez voir Locust[2] pour voir ce que cela pourra donner quand Locust sera terminé.

Enfin, et c'est là que Nagios est le plus intéressant, le mieux reste de simuler le fonctionnement du client d'une application (comme un client HTTP pour un service Web) pour valider le bon fonctionnement de cette application. Les greffons peuvent aussi effectuer les actions que vous entreprendriez pour vérifier qu'un système de fichier n'est pas saturé. C'est tout cela qu'il faudra mettre dans les greffons.

Mais superviser simplement sans prendre d'action ne sert pas à grand chose. Nagios intègre un moteur de gestion d'alertes, avec escalades, ces alertes étant diffusées soit par le biais de l'interface web (avec alerte sonore via un champ EMBED), par courriel (pourvu que le serveur Nagios voie son serveur de messagerie local interconnecté avec la messagerie d'entreprise) ou par tout autre biais imaginable à travers une commande.

On peut même imaginer prendre des actions correctives directement sur la détection d'un problème. Par exemple, redémarrer un processus serveur web qui montre des signes de faiblesse.

Nagios va nous permettre en standard de satisfaire la plupart de ces besoins, hormis la métrologie. Nous verrons plus loin que plusieurs projets peuvent aider sur ce besoin précis, à moins que vous ne préfériez utiliser d'autres outils pour ce faire.

Concepts de supervision avec Nagios

Nagios permet donc une supervision active et passive de serveurs, équipements réseaux, et surtout de services divers et variés.

Il utilise des principes simples, mais reste néanmoins complexe à mettre en œuvre dans un environnement de production, du fait de sa grande souplesse de configuration et d'utilisation ; et ce d'autant plus que le nombre d'objets (matériels et services) à configurer est important. Ces derniers peuvent de plus avoir des dépendances plus ou moins fines entre eux, ce qui peut encore augmenter le temps de mise en œuvre.

Il ne faut donc pas hésiter à voir petit au départ, quitte à le réinstaller ou à refaire complètement sa configuration par la suite, dès que l'on maîtrise un peu mieux sa configuration ou nos propres besoins.

Architecture

L'architecture de base de Nagios est simple :

Le projet Nagios fournit en standard bon nombre de greffons de base, mais la simplicité de leur mode de fonctionnement nous a permis d'en écrire un certain nombre pour nos besoins propres, que ce soit pour superviser SAP dans notre environnement ou pour vérifier que nos clients peuvent bien se connecter chez nous.

Principes de base

Nagios n'est donc qu'en soit qu'un moteur d'ordonnancement de vérifications diverses et variées. Enfin, un peu plus, mais nous n'allons utiliser que cette vision pour l'instant.

Ces vérifications sont assurées par des greffons (plugins en anglais, mais nous préférons opter pour la traduction officielle de l'académie qui ne me déplait point, traduction par ailleurs déjà employée dans GLMF), dont le développement est séparé du moteur principal (pour les greffons de base).

La relation entre le moteur et les greffons est assurée d'une part dans la configuration de Nagios (nous aborderons le sujet un peu plus loin), pour que Nagios sache quelles vérifications lancer sur ou à destination de quelles machines ou services, d'autre part par le code retour ainsi que la sortie standard d'un greffon.

En effet, un greffon n'est qu'un script/programme/ce que vous voulez, pourvu que ce greffon sache fournir un code retour (0 : tout va bien, 1 : avertissement, 2 : alerte), et éventuellement un petit message décrivant le déroulement de l'exécution (aide au diagnostic en cas de problème).

Pour information les codes retours sont aussi nommés : 0 : OK, 1 : WARNING, 2 : CRITICAL et 3 : UNKNOWN. Ce sont donc ces états qui seront ensuite remontés au moteur qui prendra les décisions et lancera les actions programmées.

Ces greffons fonctionnent soit en local sur la machine supervisée (par exemple les vérification sur les disques), soit effectuent des tests à distances (tests sur des protocoles réseaux tels SMTP ou exécution à distance via SSH ou autre).

Les vérifications peuvent être passives (rarement ou dans certains cas où la sécurité impose d'interdire une connexion dans un sens, ou encore dans le cas de supervision hiérarchique), mais le plus souvent actives.

Mise en réseau de la supervision

Les greffons locaux au serveur de supervision sont exécutés directement par Nagios. La vérification d'un service à distance (par l'exécution d'un greffon situé sur une autre machine, par exemple, ou par snmp), se fait, elle aussi, par le biais de l'exécution d'un greffon local au serveur Nagios. Rappelons-le, Nagios n'est qu'un ordonnanceur de tâches dédié à la supervision. Nagios n'a pas pour vocation d'intégrer directement des fonctionnalités de vérification de bon fonctionnement quelconques (autres que ses fonctions internes, bien sûr).

Pour l'exécution de greffons à distance, plusieurs possibilités :

Il en est d'autres qui permettent la surveillance de services réseau, mais nous allons nous focaliser sur la mise en œuvre de NRPE.

NRPE permet donc l'exécution de plugins à distance, à choisir parmi un certain nombre de services disponibles.

NSCA permet de son côté la remontée d'informations de façon passive (vu du point de vue de Nagios). L'ordonnancement des vérifications est assurée de façon locale à chaque machine, et surtout permet d'inverser le sens des connexions entre serveur supervisé et serveur superviseur, ce qui peut avoir un intérêt dans un réseau sécurisé, avec des pares-feu en diode (ne laissant passer les flux que dans un sens).

Comparatif des fonctionnements de NRPE et NSCA
Comparatif des fonctionnements de NRPE et NSCA

La différence entre NRPE et NSCA est l'initiateur de la vérification : NRPE reçoit (1) la demande de vérification de la part de Nagios, exécute la vérification (2), puis renvoie le résultat.

Alors qu'avec NSCA, la vérification est planifiée en local, exécutée (1), puis le résultat en est envoyée à Nagios (2).

Notez que la plupart de ces moyens supposent un greffon local au serveur Nagios, que ce soit check_nrpe, check_nt pour NSClient, ou encore check_by_ssh et check_snmp déjà cités.

États hard et soft

Nagios fait la distinction entre les alertes en état soft et celles en état hard. Dès qu'un service remonte une erreur celle-ci est d'abord définie dans un état soft et Nagios émet ses alertes sonores habituelles. Si après un certain nombre d'essais infructueux, configurable, le service renvoie toujours le même type d'erreur, l'alerte passe alors en état hard et Nagios envoie ses notifications (courriel, SMS, etc.).

L'état hard définit donc une alerte reconnue par Nagios comme posant réellement un problème, il ne s'agit pas d'un greffon qui a accidentellement renvoyé une mauvaise valeur. Ces valeurs seront réutilisées plus tard quand on abordera les gestionnaires d'évènements.

Les escalades

Nagios supporte de façon optionnelle l'escalade des notifications envoyées aux contacts pour des services ou hôtes. Ainsi, on peut définir différents groupes de personnes et donc différents moyens de contacter ces personnes en fonction du nombre de notifications déjà envoyées.

On peut par exemple imaginer, sur certaines alertes, contacter quelques personnes s'occupant de la supervision par courriel puis si le problème persiste après un temps déterminé les contacter par SMS ou bien contacter d'autres gens.

Installation

Récupérer les sources sur SourceForge puis suivre l'onglet Downloads du menu de navigation.

Pour installer un serveur Nagios, nous aurons besoin de deux archives : Nagios en lui-même, et les greffons de supervision, sans lesquels Nagios n'est rien.

Pré-requis

Nagios a, en plus des greffons, besoin de satisfaire un certain nombre de dépendances.

Sur une Mandrake, on comptera ainsi sur les paquetages GD de Thomas Boutell (libgd1-devel), ainsi que sur ceux installant Apache. Faites un urpmi apache libgd-devel pour installer le nécessaire.

Sur une autre distribution, comme RedHat ou Fedora, ce sera gd-devel. Yum, apt-rpm ou autres vous aideront.

gd-progs ou gd-utils pourra être utile plus tard lorsque viendra le moment de mettre de jolis dessins sur nos serveurs.

N'oubliez pas non plus que la bibliothèque GD s'appuie elle aussi sur d'autres bibliothèques comme les libjpeg, libpng et associées.

Compilation

La compilation de Nagios est un peu fastidieuse, car ne se réduisant pas à un simple ./configure && make install.

Nous avons pris l'option d'installer Nagios comme s'il était intégré à l'OS, afin d'avoir les fichiers de configuration dans /etc/nagios.

La première chose à faire est de créer un utilisateur pour Nagios, ainsi que son groupe :

 # groupadd nagios
 # useradd -g nagios -m -d /home/nagios -G apache nagios

Notez que cet utilisateur nagios fait aussi partie du groupe apache (nous sommes toujours sur une Mandrake), ce qui sera important pour plus tard. Modifiez ce groupe supplémentaire apache en www ou en ce qu'il convient pour votre distribution.

Ensuite vient le temps des choix. Pourquoi ? Parce que Nagios en version 1.x permet certaines choses que Nagios 2.x ne permettra pas, ou pas directement. En effet, pour Nagios 2.0, Ethan Galstad, l'auteur de Nagios, dans sa clairvoyance, a décidé de retirer les fonctionnalités permettant la mise en base de données des informations concernant les services, les serveurs, les performances, les commentaires, les états, les heures d'arrêt de service, etc. Ces extensions seront remplacés par l'event broker (le courtier - ? - d'évènements ).

Lancez la commande grep suivante pour voir de quoi nous parlons.

 $ ./configure --help | grep -E "mysql|pgsql"

N'oubliez pas d'installer les clients (y compris les paquetages de développement) PostgreSQL ou MySQL pour que le tout compile correctement.

Un autre point à voir est de savoir si l'on veut embarquer un Perl dans Nagios. Cela peut avoir son intérêt dans le cas d'une utilisation centrale de sondes Perl (il en existe un grand nombre), mais dans notre cas, nous allons utiliser le lanceur de sonde à distance nrpe.

 $ tar xvfz nagios-1.2.tar.gz
 ...
 $ cd nagios-1.2
 $ ./configure --prefix=/usr --sysconfdir=/etc/nagios \
               --localstatedir=/var/nagios --datadir=/usr/share/nagios/html \
               --sbindir=/usr/share/nagios/cgi-bin \
               --with-file-perfdata
 $ make all

Avant de lancer le make all, vous aurez pu vérifier que les chemins configurés sont les bons en regardant dans nagios-1.2/common/locations.h.

Quand la compilation s'est terminée (sans erreur normalement), on va pouvoir passer à l'installation (classique) :

 $ su -
 # make install

Il reste encore quelques opérations pour avoir un Nagios opérationnel :

Nous allons donc pouvoir passer à la configuration de Nagios.

Configuration de Nagios

Apache

Dans le fichier httpd.conf de votre Apache, incluez le fichier nagios.conf que nous allons écrire.

  Include conf/nagios.conf

Le fichier nagios.conf va contenir les directives suivantes :

Authentification

L'accès à Nagios doit être restreint, car il peut montrer des informations importantes voire confidentielles.

De plus, des actions peuvent être entreprises via l'interface web, actions qui vont de l'acquiescement d'une alarme au redémarrage d'un serveur si l'event handler est défini.

La définition des règles d'authentification est déjà écrite ci-dessus, il ne nous reste plus qu'à renseigner le fichier /etc/nagios/htpasswd. Cela se fait par le biais de l'utilitaire htpasswd fournit avec Apache.

 # htpasswd [-c] /etc/httpd/htpasswd nagios
 New password: ******¶
 Re-type new password: ******¶
 Updating password for user nagios

Cet utilisateur nagios doit correspondre non à l'utilisateur au sens POSIX créé tout à l'heure, mais à un contact défini dans /etc/nagios/contacts.cfg.

Configuration Nagios

Les fichiers de configuration de Nagios se trouvent dans le répertoire /etc/nagios.

Ces fichiers de configuration, à l'exception des fichiers nagios.cfg et cgi.cfg, utilisent une structure unique de définition des objets sur le principe suivant :

 define {
       param1 value
       param2 value
       ...
       paramn value
 }

Cela implique qu'aucun espace ne pourra être inséré dans les valeurs des paramètres. Il faudra donc y faire attention.

Pour tester la cohérence de vos fichiers de paramétrage, utilisez la commande :

 # /usr/bin/nagios -v ../etc/nagios.cfg

ou, si vous avez installé le script de lancement /etc/init.d/nagios :

  service nagios reload

ou encore, si vous n'êtes pas sur une distribution qui vous fournit le script service (qui devrait être obligatoire) :

  /etc/init.d/nagios reload

qui a le bon goût de cumuler vérification de configuration et lancement de Nagios.

Bien sûr, si vous n'aviez pas lancé Nagios auparavant, faites-le avec cette même commande en passant start au lieu de reload en paramètre.

Objets de Nagios

Au commencement est le serveur (host). Ce serveur n'est pas tout seul, il donc pouvoir le définir ainsi que ses congénères, qui peuvent ne pas être des serveurs mais tout équipement doté d'une interface réseau. Ces hôtes peuvent être regroupés dans un ou plusieurs groupes, chez nous à la fois par technologie (les linux avec les linux, etc.), mais aussi (nous assurons une prestation d'hébergement pour nos clients) par client.

Ce regroupement peut permettre d'agir sur un ensemble de machines, par exemple si l'on a prévu d'arrêter toute la plate-forme d'un client qui a 8 serveurs, nous prévoirons un arrêt sur le groupe du client, plutôt que perdre du temps à prévoir l'arrêt sur chacun des serveurs.

Viennent ensuite les services. Ces services correspondent en fait au produit des machines par les greffons et par les paramètres qui peuvent leur être appliqués. Si une machine a 200 systèmes de fichiers, il sera fait 200 fois appel au greffon check_disk, à chaque fois avec en paramètre le nom du système de fichier à vérifier, et avec les seuils de criticité associés. Idem pour le greffon check_proc, qui peut compter les processus actifs, les processus zombies, et les processus swapés (nous n'avons pas d'équivalent satisfaisant en français). Donc trois services différents.

Ces services s'appuient sur des greffons, qu'il faut donc définir. C'est le rôle des clauses command, qu'on retrouvera généralement dans un fichier de configuration checkcommands.cfg.

L'ordonnancement de la vérification des services se fait selon des calendriers définis par les clauses timeperiod (fichier timeperiods.cfg).

Le rôle de Nagios est donc de prévenir quelqu'un lorsqu'un problème survient. C'est le rôle des fichiers contacts.cfg (clauses contact, sans mauvais jeu de mots d'informaticien) et contactgroups.cfg (vous avez deviné la clause). L'escalade des avertissements et autres alertes entre les différents groupes d'intervenants se faisant dans le fichier escalations.cfg.

Enfin, les commandes externes, non-destinées au lancement de greffons sont centralisées dans le fichier misccommands.cfg, telles que l'envoi de courriels, de SMS (via l'utilisation d'outils tiers), etc.

Rapidement, passons les autres fichiers :

Quelques trucs de configuration

Cet article n'a pas pour but de paraphraser la documentation de Nagios, qu'elle soit en anglais ou en français grâce aux efforts de Opsyx et contributeurs, dont Xavier Dusart, traducteur principal de celle de NetSaint.

Les patrons

L'arrivée en 2002 de Nagios 1.04beta a vu l'introduction des patrons (templates) de configuration. Comme tous les services doivent être explicitement définis, autant réduire leurs définitions à leur plus simple expressions. Idem pour les serveurs. Inutile donc, si l'on a 35 serveurs Linux, 25 serveur Solaris et 40 équipements réseau des mêmes constructeurs, avec des contraintes de disponibilité identiques, de dupliquer manuellement les mêmes paramètres pour tout le monde.

Cela simplifie la lecture (seule l'information directement pertinente est visible à la définition du serveur/service), fini les oublis lors d'un changement de classe (passage d'une supervision aux heures de bureau à du 24h/24 quand des serveurs passent en production) si l'on doit modifier manuellement les timeperiods de 200 services sur 4 serveurs différents. Avec les patrons, il suffit de modifier le patron des services de chaque serveur, voire de modifier le patron des patrons si les 4 serveurs fournissent une même application.

Exemples :

  # definition du patron par défaut
  define service {
    name                            generic-service        ; le nom du patron
    register                        0                      ; On enregistre pas cet objet, ce n'est pas un vrai service
    active_checks_enabled           1
    passive_checks_enabled          1
    parallelize_check               1
    check_freshness                 0
    notifications_enabled           1
    event_handler_enabled           1
    flap_detection_enabled          0
    retain_status_information       1
    retain_nonstatus_information    1
    notification_interval           120
    notification_period             24x7
    notification_options            w,c,u,r
    max_check_attempts              3
    is_volatile                     0
    normal_check_interval           3
    retry_check_interval            1
    check_period                    24x7
    contact_groups                  network-admins
    }

Comme vous pouvez le voir, le patron voit un grand nombre de paramètres configurés, en fait, exactement les mêmes que pour un service normal. La seule différence se fait dans le paramètre register, positionné à 0, qui fait que la définition est considérée comme un patron.

Un patron peut étendre les informations d'un autre patron :

  define service {
    name                 switch1-service
    register                        0
    use                  generic-service  ; On lui dit d'utiliser les informations
                                          ; du patron 'generic-service'
    host_name            switch1
    }

Enfin, voici comment utiliser le patron pour définir un service Ping :

  # exemple de service utilisant un patron
  define service {
    use                  switch1-service  ; On lui dit d'utiliser les informations
                                          ; du patron 'switch1-service'
    service_description  Ping
    check_command        check_ping!200,50%!400,80%
    }

Notifications et escalades

Nagios vérifie régulièrement l'ensemble des services sur le parc configuré. Cet intervalle de temps est configurable pour chaque service à l'aide du champ normal_check_interval. Si le greffon renvoie un état différent de OK, une alerte en état soft est levée. Nagios vérifiera autant de fois que max_check_attempts lui indique le service toutes les retry_check_interval minutes d'intervalle. Si celui-ci reste en erreur après tous les essais, une première notification est envoyée.

Si après un intervalle de notification_interval minutes, le problème n'est toujours pas réglé, Nagios enverra une autre notification et continuera ainsi jusqu'à ce que le problème soit résolu ou acquitté.

Dans certains cas, il peut être utile de mettre en place des escalades sur les services. Le principe est simple, pour chaque service où l'on souhaite une escalade des notifications, il suffit de préciser à quels groupes de contacts Nagios devra envoyer les notifications. Cela se fait en fonction du nombre de notifications envoyées.

Voici un petit exemple :

  define serviceescalation {
    host_name              switch1
    service_description    Ping
    first_notification     3
    last_notification      5
    notification_interval  90
    contact_groups         network-admins,managers
    }

  define serviceescalation {
    host_name              switch1
    service_description    Ping
    first_notification     6
    last_notification      0
    notification_interval  60
    contact_groups         tout-le-monde
    }

On continue ici l'exemple des patrons : on possède un équipement réseau désigné par switch1. Par défaut, les notifications sont envoyées toutes les deux heures (120 minutes) au groupe de contacts network-admins. Grâce aux escalades que l'on vient de configurer, si le problème est toujours présent à la troisième notification, celle-ci sera envoyée aux groupes de contacts network-admins et managers. Les prochaines notifications seront envoyées toutes les 90 minutes. Enfin, si au bout de six notifications, au total, l'alerte continue, Nagios avertira le gens du groupe de contact tout-le-monde indéfiniment (d'où le 0 dans le champ last_notification) à une période de 60 minutes.

Dans tous les cas, toutes les personnes qui ont reçu la notification de l'erreur recevront la notification de retour à la normal du service.

Les gestionnaires d'évènements (event-handlers)

Les gestionnaires d'évènements sont des commandes externes optionnelles qui sont exécutées à chaque fois qu'un changement d'état d'un hôte ou d'un service a lieu. Une utilité triviale de ces gestionnaires d'évènements (particulièrement pour les services) réside dans la capacité de Nagios à résoudre les problèmes de manière préventive avant que quelqu'un ne reçoive une notification. Une seconde utilité est celle d'enregistrer les évènements relatifs aux hôtes ou services dans une base de données externe.

Dans la plupart des cas, les commandes de gestionnaires d'évènements seront des scripts écrits en shell ou en Perl. Ils doivent comporter au moins les macros suivantes comme arguments :

Les scripts examinent les valeurs des arguments qui leur sont passés et exécutent les actions nécessaires en fonction de ces valeurs. Le meilleur moyen de comprendre comment les gestionnaires d'évènements doivent fonctionner est de prendre un exemple. Aussi nous vous conseillons de voir le principe de mise en redondance de Nagios plus loin dans cet article.

La cosmétique

A l'aide des informations additionnelles sur les équipements, il est possible d'ajouter des logos, des descriptions, un lien telnet (qui connaît l'URL pour faire du SSH ?) vers les machines, etc. Tout ça vous permettant de reconnaître facilement et accéder directement à d'autres informations sur vos équipements.

Exemple :

  define hostextinfo {
    host_name             ts1000-1
    icon_image            base/cyclades_ts.gif
    vrml_image            base/cyclades_logo.png
    statusmap_image       base/cyclades_ts.png
    icon_image_alt        Serveur Terminaux
    }

L'icône donnée dans le champ icon_image sera affichée à chaque fois à coté du nom de la machine. Le champ vrml_image renseigne de l'image utilisée dans la vue en 3D. statusmap_image est utilisé dans la carte 2D (status map). Enfin, le texte donné dans icon_image_alt sera affiché en texte alternatif de l'icone.

On pourrait aussi rajouter un lien qui serait affiché dans les informations de l'équipement avec le champ notes_url que l'on pourrait par exemple faire pointer vers un logiciel de métrologie (qui a dit Cacti ? :-).

Ou encore compléter les champs 2d_coords et 3d_coords pour fixer l'emplacement de la machine sur les cartes 2D et 3D.

Attention cependant à la définition du chemin relatif vers les images. Les chemins se donnent de façon relative à un répertoire logos (nom codé en dur, nous semble-t'il) du répertoire image. Ce répertoire image étant lui-même un sous-répertoire de la partie Web de Nagios, ou plus exactement d'un paramètre de configuration des CGI. Ce paramètre est physical_html_path, et pointe (chez nous) sur /usr/share/nagios.

Les greffons

Les greffons officiels

Les greffons officiels sont disponibles sur SourceForge, projet nagios-plug.

Ils sont divisés en deux catégories : les greffons principaux (« core plugins ») et les greffons dit contribués, qui ne sont pas forcément maintenus, mais néanmoins distribués dans l'archive officielle.

D'autres greffons existent mais sont bien souvent d'un usage limité car destinés à un usage particulier. N'oubliez pas d'interroger votre moteur de recherche préféré (« Nagios » et « plugin » sont deux mots-clés indispensables).

La compilation des greffons officiels (pour ceux écrits en langage C) ne posent pas de problème particulier, sinon qu'il faut bien évidemment prêter attention aux dépendances, en particulier les bibliothèques permettant d'écrire des clients de service réseau, radius ou LDAP étant des exemples.

Lisez attentivement les messages d'erreur à la compilation, mais aussi et surtout les messages d'avertissement (qui ne sont pas des erreurs) indiqué par un gros WARNING émis par le ./configure. Ils vous indiqueront si tel ou tel greffon sera compilé ou non, sa ou ses dépendances ayant été trouvée(s) ou non.

Écrire son propre greffon

L'écriture d'un greffon doit respecter deux règles : légèreté et simplicité. En effet, ce greffon doit passer inaperçu dans son exécution, au sens où il ne doit pas se faire sentir sur la charge globale de la machine, et doit rester simple dans l'esprit d'un greffon Nagios. À ce titre, il doit accomplir une tâche et une seule, mais le faire bien.

Rappelons le but du greffon : renvoyer un code retour, ainsi qu'un petit texte explicatif sur sa sortie standard.

Pour prendre un exemple qui revient à la mode, les serveurs d'entrée de gamme que nous utilisons sur certains services n'ont plus de disques SCSI sur une carte RAID. Il va nous falloir vérifier que les miroirs logiciels mis en œuvre sous Linux fonctionnent comme il le faut.

Notre greffon va donc devoir lire le pseudo-fichier /proc/mdstats, analyser son contenu, éventuellement croiser avec /etc/fstab ou /proc/mounts (pour éviter de forker un nouveau processus ce qui prendra du temps et des ressources) afin de fournir le point de montage du système de fichier en plus du périphérique RAID qui défaille.

Tout d'abord, voici le script :

  #!/usr/bin/perl

  use strict;
  use warnings;
  use English;
  use Getopt::Long;
  use vars qw($PROGNAME $opt_V $opt_h $opt_t);
  use lib "/home/jfenal/cvs/nagios/nagios-plugins-1.4.0alpha1/plugins-scripts";
  use utils qw( %ERRORS &print_revision &support );

  use Data::Dumper;

  $PROGNAME="check_linuxraid";
  $REVISION=': check_linuxraid.pl,v 1.1 2004/07/26 08:33:29 jfenal Exp';

  sub print_usage {
      print "Usage:\n";
      print "  $PROGNAME\n";
      print "  $PROGNAME [-h | --help]\n";
      print "  $PROGNAME [-V | --version]\n";
      print "  $PROGNAME -t\n";
  }

  sub print_help {
      print_revision($PROGNAME, $REVISION);
      print "Copyright © 2004 Jérôme Fenal\n\n";
      print_usage();
      print "\n";
      print "Use -t to test the script, /proc/mdstat source used is internal to the script\n";
      print "\n";
      support();
  }

  my (%data, %slices, %types, %status, %alerts, %rcs);
  my $msg=''; # empty string

  Getopt::Long::Configure('bundling');
  GetOptions(
          "V"   => \$opt_V, "version" => \$opt_V,
          "t"   => \$opt_t, "test"    => \$opt_t,
          "h"   => \$opt_h, "help"    => \$opt_h
      );

  if ($opt_V) {
      print_revision($PROGNAME, $REVISION);
      exit $ERRORS{'OK'};
  }

  if ($opt_h) {
      print_help();
      exit $ERRORS{'OK'};
  }

  if (! $opt_t) {
      if (!open DATA, '< /proc/mdstat') {
          print "Unable to open /proc/mdstat\n";
          exit $ERRORS{'UNKNOWN'};
      }
  }

  while (<DATA>) {
      my $curdev;
      chomp;
      if (m/^(md\d+)\s*:\s*(.*)$/) {
          $curdev=$1;
          $data{$curdev} = $2;
      }
      $data{$curdev} .= " $1" if m/^\s+(.*)$/;
  }

  foreach my $md (keys %data) {
      foreach ( split / /, $data{$md}) {
          push @{$slices{$md}}, $_ if /\w+\[\d+\]/;
          $types{$md} = $_ if /raid\d/;
          $status{$md} = $1 if /\[([U_]+)\]/;
      
      }
      if ($status{$md} =~ /_/ ) {
          my $p=-1;
          while (($p = index($status{$md}, '_', $p+1)) != -1 ) {
              push @{$alerts{$md}}, $slices{$md}[$p];
          }
      }
      # on sort un CRITICAL si des miroirs n'ont qu'une patte
      if ($types{$md} eq 'raid1' && @{$slices{$md}} == 0 ) {
          $rcs{'CRITICAL'}++;
          $msg.=" $md(2few dev)";
      }
  }

  #print Dumper \%slices, \%types, \%alerts, \%status;

  foreach my $md (keys %alerts) {
      $msg .= " $md(";
      foreach my $slice ( @{$alerts{$md}} ) {
          $msg .= " $slice";
          if ($slice =~ /\(F\)/) {
              $rcs{'CRITICAL'}++;
          }
          elsif ($data{$md} =~ /recovery/) {
              # ça reconstruit
              $msg .= " rebuilding";
              $rcs{'WARNING'}++;
          } else {
              # il y a des cas où le device n'est pas failed, et où le miroir n'est
              # pas actif non plus (bug du driver md)
              $rcs{'CRITICAL'}++;
          }
      }
      $msg .= ")"
  }

  my $rc = $rcs{'CRITICAL'} ? $ERRORS{'CRITICAL'} :
              ( $rcs{'WARNING'} ?  $ERRORS{'WARNING'} : $ERRORS{'OK'} ) ;

  $msg =~ s/\(\s/\(/g;

  my %t = reverse %ERRORS;

  $msg = "All RAID devices sane (" . join(', ', keys %data). ")"
    if $rc == $ERRORS{'OK'};

  print "$t{$rc}:$msg\n";

  close DATA;
  exit $rc;

  __DATA__
  Personalities : [raid1]
  read_ahead 1024 sectors
  md0 : active raid1 sdb5[1] sda5[0]
        4200896 blocks [2/2] [_U]
        
  md1 : active raid1 sdb6[1] sda6[0]
        2104384 blocks [2/2] [UU]
        
  md2 : active raid1 sdb7[1] sda7[0]
        2104384 blocks [2/2] [UU]
        
  md3 : active raid1 sdc7[1] sdd8[2] sde5[0]
        1052160 blocks [2/2] [UU]
        
  md4 : active raid5 hdh1[3] hdg1[2] hdf1[1] hde1[0]
        360182016 blocks level 5, 256k chunk, algorithm 2 [4/4] [UUUU]
        
  md5 : active raid5 sdf1[2] sde1[3] sdg1[1] sdd1[4] sdc1[0]
        1638144 blocks level 5, 64k chunk, algorithm 0 [5/5] [UUUUU]
        
  md6 : active raid5 sde2[7] sdf2[4] sdg2[3] sdd2[6] sdc2[2] sdb2[1] sda2[0]
        104196864 blocks level 5, 64k chunk, algorithm 0 [7/6] [UUUUU_U]
        [===>.................]  recovery = 17.0% (2966244/17366144) finish=119.2min speed=2011K/sec
  md7 : active raid1 hde5[0](F) hdf7[1]
        39262720 blocks [2/1] [_U]
        
  md8 : active raid1 sda5[0]
        4200896 blocks [1/1] [U]
        
  unused devices: none

On utilise dans ce script un module venant des plugins Nagios : utils.pm. Il définit le hash qui sera utilisé par la suite pour la définition du code retour : %ERRORS, définit comme suit :

  %ERRORS = ( OK => 0, WARNING => 1, CRITICAL => 2, UNKNOWN => 3, DEPENDENT => 4 );

Rien de bien sorcier dans l'écriture de ce script, sinon que l'utilisation du hash %ERRORS permet d'éviter les impairs et d'avoir un nom sur un code retour. Attention néanmoins à ne pas faire de faute d'orthographe dans l'écriture de CRITICAL ou de WARNING, voire de UNKNOWN pour votre script. OK ne devrait pas poser de problème (encore que...).

L'option -t permet de tester le script en situation avec les données.

Si vous voulez utiliser ce script, n'oubliez pas de retirer la ligne use lib ou de mettre ce qu'il faut à cet endroit.

Configuration d'un agent nrpe

Principe de fonctionnement

nrpe, « Nagios Remote Plugin Executor », est un des moyens de supervision à distance offert par Nagios.

Il offre en effet la possibilité de profiter de la puissance des greffons, ceux-ci ne s'exécutant pas pour autant sur le serveur Nagios.

Le principe de fonctionnement est le suivant : les greffons sont installés sur la machine à superviser, compilés pour son architecture (car c'est elle qui va les lancer), ainsi que le serveur (daemon) nrpe. Le client de ce serveur, un greffon comme un autre, check_nrpe, est lui installé sur le serveur Nagios.

Le serveur nrpe voit ensuite sa configuration composée d'une liste de vérifications nommées, auxquelles correspondent un greffon avec ses paramètres, ainsi que quelques autres options de configuration pour le fonctionnement du serveur nrpe en lui-même.

Le serveur Nagios voit lui sa configuration s'enrichir d'appels au seul greffon check_nrpe, auquel on passe en paramètre le nom de la vérification à faire effectuer sur la machine supervisée. Ce check_nrpe initiera donc une connexion vers l'agent nrpe et lui demandera uniquement l'exécution d'une vérification. L'agent nrpe lancera ensuite le greffon considéré et retournera le code retour ainsi que le contenu de la sortie standard du greffon.

Si le serveur Nagios demande une vérification non configurée (i.e. un nom inexistant dans le fichier nrpe.cfg de l'agent nrpe), il se verra opposé une fin de non-recevoir, et positionnera le statut de la vérification à UNKNOWN.

On peut préciser des listes de machines autorisées à demander des vérifications dans la configuration de nrpe, de même qu'un lien SSL peut être mis en place pour éviter les écoutes entre greffon check_nrpe et agent nrpe.

Enfin, et c'est là le nœud du problème avec nrpe, les paramètres de seuils pour qu'une alarme soit remontée sont spécifiés sur la machine supervisée. Les implications de ce fait sont importantes : cela signifie que la configuration n'est pas centralisée sur le seul serveur Nagios, mais éclatée sur tout le parc.

Il faut donc trouver un moyen d'automatiser la création de la configuration, pour maintenir la cohérence entre les services configurés sur le serveur Nagios et ceux sur l'agent nrpe, gérer la quantité de services (nous avons par exemple des serveurs avec près de 200 systèmes de fichiers distincts, sans compter les montages d'un même système de fichier à plusieurs endroits -- montages bind sous Linux et lofs sous Solaris), et par-là même centraliser la configuration.

Déploiement

Il est très simple de mettre en œuvre la supervision via nrpe.

Le plus long est comme nous venons de le voir de configurer de façon synchrone la surveillance des systèmes de fichiers et autres greffons, dont la configuration apparaît à la fois sur le serveur Nagios (dans un fichier services-machine1.cfg inclus par nagios.cfg, par exemple) et sur la machine supervisée (dans nrpe.cfg).

L'idéal est donc d'utiliser un script Perl (Perl est maintenant installé en standard avec Solaris 8 et la plupart des systèmes d'exploitation propriétaires) qui prendra le contenu du fichier /etc/vfstab pour en extraire deux fichiers : new_nrpe.cfg dont le contenu est à reprendre pour la configuration de l'agent nrpe, et services-hostname.cfg à insérer dans le fichier de configuration de Nagios sur le serveur de supervision. Ce script est cnrpe.pl :

  #!/usr/local/bin/perl -w
  use strict;
  use vars qw/@nrpe @check_nrpe @line/;
  my $hostname;

  $hostname=qx/hostname/;
  $hostname=~ tr/[A-Z]/[a-z]/;
  chomp $hostname;

  $count=0;
  open VFSTAB, "< /etc/vfstab";
  while(<VFSTAB>) {
          chomp;
          s/#.*//; # drop comments
          next if /^\s*$/; # empty lines

          @line=split(/\s/);

          if ($line[3] =~ m/vxfs|ufs/ ) {
                  $nrpe[$count]=$line[0];
                  $check_nrpe[$count]=$line[2];
                  $count++;
          }

  }
  close VFSTAB;

  --$count;

  open STDOUT, "> new_nrpe.cfg";
  print << "EOT";
  #
  # nrpe.cfg pour $hostname
  #
  server_port=5666
  allowed_hosts=10.81.0.243
  nrpe_user=nagios
  nrpe_group=nagios
  debug=0

  # Service checks
  command[check_users]=/opt/nagios/libexec/check_users 10 15
  command[check_load]=/opt/nagios/libexec/check_load 5 10 15 20 25 30
  EOT

  foreach $i (0..$count) {
          print "command[check_disk".$i."]=/opt/nagios/libexec/check_disk 80 95 ";
          print $nrpe[$i]."\n";
  }


  open STDOUT, "> services-${hostname}.cfg";

  print << "EOT";
  # Definition du template pour ${hostname}
  define service{
          name                     ${hostname}-service
          use                      generic-service
          host_name                $hostname
          notification_interval    120
          notification_period      24x7
          notification_options     w,u,c,r
          max_check_attempts       3
          is_volatile              0
          normal_check_interval    3
          retry_check_interval     1
          contact_groups           sun-admins
          check_period             24x7
          register                 0
  }

  # Service definition
  define service {
          use                      ${hostname}-service
          service_description      SMTP
          check_command            check_smtp
  }

  define service {
          use                      ${hostname}-service
          service_description      load
          check_command            check_nrpe!check_load
  }

  define service {
          use                      ${hostname}-service
          service_description      users
          check_command            check_nrpe!check_users
  }
  EOT

  foreach $i (0..$count) {
          print << "EOT";
  define service{
          use                      ${hostname}-service
          description              $check_nrpe[$i]
          contact_groups           sun-admins
          check_command            check_nrpe!check_disk$i
  }
  EOT

  };

Ce script est un exemple de ce qu'il est possible de faire pour Solaris. Pour des raisons de place, nous n'avons pu vous mettre la version générique Linux et Solaris que nous utilisons. Sachez qu'il est ensuite possible, via des tables de dispatchs (des hash Perl), d'affiner les paramétrages des greffons machine par machine.

Ce script, une fois distribué sur toutes les machines du parc, permet de générer à la volée les deux fichiers nécessaires nrpe.conf et services-hostname.cfg. Il suffit ensuite de rapatrier via SSH le second, de le déposer au bon endroit (/etc/nagios pour nous) sur le serveur Nagios, et de relancer Nagios. Toutes opérations peuvent bien-sûr être encapsulées dans un script shell qui fera toutes les opérations.

Interface et utilisation

L'interface utilisateur de Nagios se fait par le biais d'un serveur Web, comme d'ailleurs la plupart des autres outils que nous utilisons. Cela permet une ubiquité de l'outil, ainsi qu'une indépendance de fonctionnement vis-à-vis des matériels et logiciels systèmes d'un poste client.

Revue de détail des menus

Non seulement ces différentes vues sont pléthoriques, mais en plus elles peuvent prendre divers paramètres afin de montrer tel ou tel groupe, serveur, service. Leur intérêt est donc limité, sauf dans le cas où l'on veut pouvoir donner l'accès à la vue de son parc à un client externe. Mais dans la majorité des cas, un PC avec un brouteur sur la « tactical overview » suffit amplement. Le son y est déjà activé, et il est toujours temps d'aller cliquer sur les boîtes rouges ou oranges pour voir le détail de ce qui cloche. D'ailleurs, c'est aussi le but des vues Service Problems, Host Problems, et Network outages.

Enfin, un historique des commentaires et des périodes d'arrêt prévues sont disponibles derrière les liens Comments et Downtime.

Quelques informations sont aussi disponibles sur le fonctionnement de Nagios en lui-même : paramétrage (dans les fichiers et dans ce qu'il est possible de configurer dans l'interface comme l'arrêt de la notification) via View config et Process Info, le temps d'un cycle complet de vérifications et quelques statistiques dans Performance Info, et enfin l'état actuel de la file des vérifications à venir.

Que faire quand un problème est remonté ?

Quand vous êtes avertis d'un problème, que ce soit par le biais de l'alarme sonore, par mail ou par SMS (via Kannel[8] par exemple), que faire ?

Déjà, connectez-vous à Nagios si ce n'est déjà fait. Cliquer sur les cases rouges ou oranges, et acquittez l'alarme. Ça vous évitera de casser les oreilles de vos collègues d'openspace. Si vous êtes en mesure de corriger le problème rapidement, et que vous voulez accélérer le retour à la normale, cliquer sur le lien Re-schedule the next check of this service pour un service, ou sur Schedule An Immediate Check Of All Services On This Host afin de remettre en début de file les prochaines vérifications pour le service ou la machine considérée. Cela permet deux choses : faire baisser le temps de détection de résolution du problème (si vous avez un contrat sur les performances avec vos clients), et surtout d'éviter d'attendre les 3 à 5 minutes (suivant votre configuration) avant la prochaine vérification.

Si vous ne pouvez corriger le problème de suite, acquittez-le quand même, il ne remontera plus d'alarme, mais sera toujours vérifié régulièrement par Nagios. Vous avez ainsi tout votre temps (façon de parler) pour ouvrir votre ticket d'incident (Nagios peut le faire pour vous) et corriger le problème.

Reporting

Nagios offre de belles possibilités de reporting, que ce soit du point de vue des machines supervisées que des services.

Les données auxquelles vous avez accès sont les suivantes, le reste est affaire de présentation : historique des résultats d'exécution des greffons, rapport de disponibilité des machines et services.

D'autres types de rapports sont à imaginer en fonction de votre utilisation et de vos besoins. Dans les faits, Nagios donne en standard des outils très flexibles en matière de reporting, le tout est de trouver les bonnes options, en adéquation avec ce que vous désirez réellement mesure en termes de qualité de service.

Si vous voulez aller plus loin, il vous est toujours possible de reprendre toutes les données dans les fichiers de journaux de Nagios, de les analyser, et d'en extraire l'information qui vous sied.

Pour ce qui est des informations de performance éventuellement remontées par les greffons, plusieurs projets existent pour les exploiter. Citons-en deux : APAN[5] et perfparse[6]. Gageons que vous saurez retrouver une personne francophone pour vous aider sur l'un des deux :)

Nagios redondant

Il est possible de configurer Nagios sur deux serveurs différents, de façon à continuer à avoir une supervision lors d'une interruption d'une liaison entre deux sites, pour peu que les moyens de prévenir soient eux-aussi redondants.

Le principe

On dispose d'une machine maître et d'une esclave. Les deux nagios vérifient chacun de leur côté tous les serveurs et les services. Seulement le nagios esclave n'envoi aucune notification, ni courriels ni SMS.

Si le maître tombe, l'esclave le détecte par deux moyens : le maître ne répond pas aux pings ou aucun processus avec le nom nagios ne tourne sur le maître.

Un évènement est alors déclenché sur l'esclave et celui ci se met alors à envoyer des notifications (courriels et SMS) pour le problème du maître et pour les éventuels autres problèmes.

Si le service nagios ou si le maître recommence à répondre aux requêtes de l'esclave, ce dernier arrête alors les notifications et tout revient dans l'ordre.

Configuration du maître

On ajoute un service via nrpe pour vérifier la présence d'un process nagios (/etc/nrpe.conf généré par le script cnrpe.pl).

 command[check_nagios]=/usr/lib/nagios/plugins/check_procs -c 1: -C nagios

et c'est tout ! Le maître n'est pas au courant de la présence de l'esclave.

Configuration de l'esclave

On désactive d'abord la notification (fichier /etc/nagios/nagios.cfg)

 enable_notifications=0

On crée ensuite deux gestionnaires d'évenements (events handlers) qui, suivant l'état du processus ou du serveur, activent ou désactivent la notification (/usr/lib/nagios/eventhandlers/handle-master-host-event) :

 #!/bin/sh
 
 # On ne prend des decision que lorsqu'on est sûr donc en état hard
 case "$2" in
 HARD)
        case "$1" in
        DOWN)
                # Le maître est tombé !
                # Il faut devenir la machine maître et
                # prendre la responsabilité de la supervision
                # du réseau, donc activer les notifications.
                /usr/lib/nagios/eventhandlers/enable_notifications
                ;;
        UP)
                # La machine maître est remontée !
                # Il faut reprendre la place d'esclave et
                # laisser le maître s'occuper de la supervision,
                # on désactive donc les notifications.
                /usr/lib/nagios/eventhandlers/disable_notifications
                ;;
        esac
        ;;
 esac
 exit 0

et /usr/lib/nagios/eventhandlers/handle-master-proc-event :

 #!/bin/sh
 
 # On ne prend des décisions que lorsqu'on est sûr, donc en état hard
 case "$2" in
 HARD)
        case "$1" in
        CRITICAL)
                # Le processus principal de Nagios ne tourne pas !
                # Il faut devenir la machine maître et
                # prendre la responsabilité de la supervision
                # du réseau, donc activer les notifications.
                /usr/lib/nagios/eventhandlers/enable_notifications
                ;;
        WARNING)
                ;;
        UNKNOWN)
                # Le processus principal de Nagios tourne peut
                # être... Nous ne faisons rien ici, mais pour
                # être sûr, on pourrait décider que l'esclave
                # devienne maître dans ces situations.
                ;;
        OK)
                # Le processus principal de Nagios refonctionne !
                # Il faut reprendre la place d'esclave et
                # laisser le maître s'occuper de la supervision,
                # on désactive donc les notifications.
                /usr/lib/nagios/eventhandlers/disable_notifications
                ;;
        *)
                ;;
        esac
        ;;
 esac
 exit 0

On définit ensuite deux nouvelles commandes pour gérer les évènements dans /etc/nagios/misccommands.cfg :

  #
  # COMMANDE POUR LA MISE EN PLACE DE LA REDONDANCE
  #
  # Les commandes suivantes sont des "event handlers", en fonction de l'état
  # du maître ou du service nagios, il donne la main à l'esclave pour la notification
  # ou la retire.
  #
 
  define command{
         command_name    handle-master-host-event
         command_line    /usr/lib/nagios/eventhandlers/handle-master-host-event $HOSTSTATE$ $STATETYPE$
  }
 
  define command{
         command_name    handle-master-proc-event
         command_line    /usr/lib/nagios/eventhandlers/handle-master-proc-event $SERVICESTATE$ $STATETYPE$
  }

On ajoute le gestionnaire d'évènement sur le serveur maître (/etc/nagios/hosts.cfg) :

  define host {
         use                     unix-host
         host_name               srvmaster
         alias                   srvmaster - Supervision
         address                 srvmaster
         event_handler           handle-master-host-event
         parents                 cisco1
  }

Puis le service vérifiant la présence d'un processus nagios chez l'esclave (/etc/nagios/services-divers.cfg) :

  define service {
         name                    Nagios
         use                     srvmaster-service
         check_command           check_nrpe!check_nagios
         event_handler           handle-master-proc-event
         service_description     Redondance Nagios
  }

Les limites

Ce que nous venons de mettre en place n'est que la surveillance d'un serveur Nagios par son collègue, avec remplacement automatique. Cela ne dispense nullement de répliquer le reste de la configuration entre les deux serveurs, qui, rappelons-le, ne communiquent pas entre eux. Et pour cette mise en œuvre de la redondance soit efficace, il vaut mieux que les configurations soient synchrones. Cela peut bien évidemment se faire par copie de fichiers de configuration, mais attention aux dépendances réseau (directive parent) : en effet, un routeur ne sera pas forcément vu par la même route, ni même par la même patte et donc adresse. Et nous ne parlons même pas des pares-feu qui peuvent être présent au milieu de tout ça :)

L'avenir

L'avenir de Nagios se dessine en deux étapes.

La version 2 est virtuellement prête, mais la documentation n'étant pas à jour, sa sortie en est différée. Cette version 2 verra arriver quelques améliorations dans la configuration, comme par exemple l'apparition de groupes de services, ce qui permettra de lancer une action (comme prévoir un arrêt de production) sur un ensemble de services. On notera également la disparition programmée du stockage des évènements, commentaires, etc. dans une base de données, avec un retour aux sources, et la seule possibilité d'utiliser des fichiers plats. Cela a un sens car Nagios, en tant que grand manitou de la supervision, doit fonctionner sans devoir dépendre d'éléments externes. Une autre raison invoquée est la relative mauvaise qualité du code gérant le stockage en base. Il sera néanmoins toujours possible de stocker des données en bases de données, mais via l'utilisation plus propre (mais du paramétrage supplémentaire) d'un courtier d'évènement (event broker).

La prochaine étape, dans un peu plus longtemps, sera la version 3, et où l'interface graphique ne sera plus écrite en C, mais en PHP, de façon à faciliter maintenance et évolutivité de l'interface. Un effort dans ce sens, pour Nagios 1.2, est déjà lancé : il s'agit de NagiosPHP (mais pourquoi tous les projets écrits en PHP voient-ils un PHP dans leur nom ?), disponible en [7]. Nous n'avons pas encore essayé, mais le développeur a l'air motivé et produit du code et de nouvelles versions régulièrement.

Conclusion

Nagios est un bon logiciel libre de supervision. Son faible coût d'acquisition négligeable est néanmoins compensé par une intégration moindre par rapport à un logiciel propriétaire souvent plus sexy. Mais l'expérience nous a prouvé qu'en quelques dizaines de jours hommes il était possible de mettre en œuvre Nagios avec tous les pré-requis d'une production 24h/24.

<mode pub=on>Il est souvent plus rapide et moins cher de passer par un intégrateur comme une SSLL ou une SSII que de perdre du temps à le mettre en place soit même.</mode>

En effet, le gros du travail avec Nagios est de savoir où commencer, ce qu'il faut superviser, et ce qu'on peut oublier, et surtout de mettre en place un cadre de travail évolutif (télé-distribution). Une fois ce travail fait, il sera relativement simple de faire évoluer les choses, et de rajouter ou enlever des sondes.

Un des gros points non abordés dans cet article est la mise en place d'une supervision hiérarchisée, avec un site central recevant les notifications de sites distants, de façon à limiter la bande passante utilisée sur les liaisons louées.

URLographie

Ours

Jérôme Fenal

jfenal@free.fr.

Jérôme est utilisateur de GNU/Linux depuis 1994, de divers Unix ou Unix-like (Domain/OS) depuis un peu plus longtemps.

Membre de Paris.pm.

Camille Barette

camille.barette@logicacmg.com.

Camille vient d'intégrer LogicaCMG où il a repris notre architecture Nagios. Il est à la base de la mise en œuvre de Nagios en redondance, et compte par la suite simplifier et automatiser la configuration par l'utilisation d'un annuaire LDAP.

[IE7, par Dean Edwards] [Validation du HTML] [Validation du CSS]