La supervision

Nagios

Introduction

Cette partie est consacrée à la solution de supervision Nagios. Elle a pour but de vous montrer quelle est la configuration minimum à effecuter afin de faire tourner Nagios ainsi que les différentes interfaces de navigation du l'outil.

Les tests qui suivent ont été réalisés sur une machine avec Ubuntu 9.04 et Nagios 3.




Présentation

Nagios

Nagios est une solution open source sous licence GNU GPL. Elle permet de surveiller les machines et les services spécifiés et génère des alarmes en cas de mauvais fonctionnement.

Pour pouvoir faire tourner Nagios, il faut obligatoirement une machine sous Linux (ou Unix) et un serveur apache pour pouvoir accéder aux pages.

Parmi les fonctionnalités que proposent Nagios, on retrouve :

Nagios peut fonctionner avec 2 modes : avec utilisation d'une base de données ou en mode text.

Le premier comme son nom l'indique utilise une base de données pour le stockage des différentes informations que récupèrera Nagios tandis que le deuxième mode de fonctionnement utilisera des fichiers texte pour sauvegarder les données.




Configuration

Pour la suite, j'ai volontairement mis de côté l'installation afin de pouvoir se concentrer sur la configuration. De plus, l'installation a été réalisé sans l'utlisation d'une base de données.

Pour installer Nagios ou pour avoir plus de renseignements, veuillez vous référer à la documentation officielle.




Pour commencer nous allons définir le contact à notifier en cas d'alarme. Pour cela, il faut aller dans le fichier contacts.cfg

define contact{
        contact_name                    ktran
        alias                           Khai-Wen Tran
        email                           ktran@etudiant.univ-mlv.fr
        service_notification_period     24x7
        host_notification_period        24x7
        service_notification_options    w,u,c,r
        host_notification_options       d,u,r
        service_notification_commands   notify-service-by-email
        host_notification_commands      notify-host-by-email
        }


contact_name Nom du contact (login par exemple)
alias Nom complet du contact
email Adresse e-mail du contact
pager Numéro du contact pour les SMS
service_notification_period Correspond à la période de temps durant laquelle Nagios peut envoyer des notifications sur des problèmes liés aux services. Par défaut, la périod est 24x7. Toutes les périodes sont définies dans le fichier /etc/nagios3/timeperiods.cfg.
service_notification_options Définit à partir de quel(s) état(s) Nagios doit envoyer des notifications. Il existe 6 types :
  • r : lorsque le service est en état recovery (OK)
  • w : lorsque le service est en état warning (avertissement)
  • c : lorsque le service est en état critical (critique)
  • u : lorsque le service est en état unknown (inconnu)
  • f : lorsque le service est en état flapping (arrêt et démarrage)
  • n : pour ne pas recevoir de notification none (aucun)
Par défaut, toutes les options sont prises (excepté l'option n bien évidemment).
service_notification_commands Nom de la commande à utiliser pour l'envoyer de notifications sur les services. Les commandes se trouvent dans le fichier commands.cfg et on peut y rajouter des commandes personnalisées.
host_notification_period Correspond à la période de temps durant laquelle Nagios peut envoyer des notifications sur des problèmes liés à la machine. Par défaut, la périod est 24x7. Toutes les périodes sont définies dans le fichier /etc/nagios3/timeperiods.cfg.
host_notification_options Définit à partir de quel(s) état(s) Nagios doit envoyer des notifications. Il existe 6 types :
  • r : lorsque la machine est en état recovery (OK)
  • d : lorsque la machine est en état down (arrêtée)
  • u : lorsque la machine est en état unreachable (impossible à joindre)
  • f : lorsque la machine est en état flapping (arrêt et démarrage)
  • n : pour ne pas recevoir de notification none (aucun)
Par défaut, toutes les options sont prises (excepté l'option n bien évidemment).
host_notifications_commands Nom de la commande à utiliser pour l'envoyer de notifications sur la machine. Les commandes se trouvent dans le fichier commands.cfg et on peut y rajouter des commandes personnalisées.


define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/mail -s "Nagios Service Notification" $CONTACTEMAIL$ "[$DATE$] Le service $SERVICEDESC$ est $SERVICESTATE$"
        }

Voici un exemple de commande que j'ai utilisé pour mon envoyer de notification des services par e-mail. Comme on peut le voir le nom de la commande utilisée dans la définition du contact est vient en fait du nom défini au dessus. J'utilise mail avec les options de Nagios pour le contact et le service qui a provoqué l'alarme.

Pour pouvoir utiliser correctement les notifications, il faut s'assurer d'avoir installer au préalable les applications tierces permettant d'envoyer soit des e-mail, soit des sms, puis de modifier le fichier commands.cfg et de mettre les bonnes commandes.




Une fois nos contacts créés, il faut à présent les affecter à des groupes. La définition des groupes se trouve dans le fichier contactgroups.cfg

define contactgroup{
        contactgroup_name   sys-admin
        alias               System Administrator
        members             ktran
        }



contactgroup_name Nom du groupe de contacts
alias Nom complet du groupe de contacts
members Liste des contacts appartenant à ce groupe. Chaque contact est séparé par une virgule ",".



Nous avons fini de configurer la première partie de Nagios. Il nous reste à présent la configurer des différents équipements appartenant à notre réseau ainsi qur les services à surveiller pour chaque. Commençons tout d'abord par éditer la liste des équipements dans le fichier hosts.cfg :

define host{
        host_name                     data-server
        alias                         Data Storage Server
        address                       192.168.1.101
        max_check_attempts            5
        check_period                  24x7
        contact_groups                sys_admin
        notification_interval         30
        notification_period           24x7
        notification_options          d,u,r
        }


host_name Nom de la machine à surveiller
alias Nom complet de la machine à surveiller
address L'adresse IP de la machine
max_check_attempts Nombre de tentatives que Nagios va effectuer sur la machine lorsqu'elle retourne un état autre que OK.
check_period Définit la période de temps durant laquelle Nagios peut effectuer ses vérifications
contact_groups Définit le(s) groupe(s) de contacts à prévenir en cas d'alarme.
notification_interval Correponds à l'interval de temps à attendre entre 2 notifications.
notification_period Définit la période de temps durant laquelle Nagios peut envoyer des notifications
notification_options Définit les états à prendre en compte pour les notifications
  • r : lorsque la machine est en état recovery (OK)
  • d : lorsque la machine est en état down (arrêtée)
  • u : lorsque la machine est en état unreachable (impossible à joindre)
  • f : lorsque la machine est en état flapping (arrêt et démarrage)
  • n : pour ne pas recevoir de notification none (aucun)



On peut également définir des groupes de machines. Cela permet d'avoir une meilleure visibilité surtout au niveau de l'interface web de Nagios

define hostgroup{
        hostgroup_name    servers
        alias             Servers
        members           data-server
        }


hostgroup_name Nom du groupe de machines
alias Nom complet du groupe de machines
members Liste des machines appartenant à ce groupe. Chaque machine est séparée par une virgule ",".



Il ne reste plus qu'à définir les services que l'on désire surveiller.

define service{
        host_name               data-server
        service_description     check-disk-sda1
        check_command           check-disk!/dev/sda1
        max_check_attempts      5
        normal_check_interval   5
        retry_check_interval    3
        check_period            24x7
        notification_interval   30
        notification_period     24x7
        notification_options    w,c,r
        contact_groups          sys-admin
        }


host_name Nom de la machine sur laquelle tourne le service à surveiller
service_description Description sur service
check_command Nom de la commande à utiliser pour effectuer l'opération. Des commandes par défaut existent déjà dans le fichier checkcommands.cfg.
max_check_attempts Nombre maximum de tentatives à effectuer lorsque la commande reçoit une réponse autre que OK.
normal_check_interval Interval de temps entre 2 exécutions de la commande de vérification lors d'un usage normal ou lorsque le nombre maximum de tentatives est atteint.
retry_check_interval Interval de temps entre 2 exécutions de la commande de vérification lorsqu'un état autre que OK est détecté.
check_period Péiode de temps durant laquelle Nagios peut effectuer ses vérifications.
notification_interval Correponds à l'interval de temps à attendre entre 2 notifications.
notification_period Correspond à la période de temps durant laquelle Nagios peut envoyer des notifications sur des problèmes liés aux services.
notification_options Définit à partir de quel(s) état(s) Nagios doit envoyer des notifications.
  • r : lorsque le service est en état recovery (OK)
  • w : lorsque le service est en état warning (avertissement)
  • c : lorsque le service est en état critical (critique)
  • u : lorsque le service est en état unknown (inconnu)
  • f : lorsque le service est en état flapping (arrêt et démarrage)
  • n : pour ne pas recevoir de notification none (aucun)
contact_groups Définit le(s) groupe(s) de contacts à prévenir en cas d'alarme.



Tous les attributs décrits pour les fichiers de configurations sont celles qui sont strictement obligatoires pour le bon fonctionnement de Nagios. Il existe d'autres atttributs facultatifs que vous pourrez trouver dans la documentation officielle.




L'interface graphique

Nagios possède une interface graphique sobre mais permettant d'avoir une visualisation rapide du système. Grâce à cet interface, on peut visualiser la liste des machines que l'on surveille avec une vue au format liste ou topologique.

Les captures d'écrans ont été repris du site officiel car elles contiennent bien plus de machines et de services rendant ainsi le visuel plus parlant.

home Capture 1 : L'écran d'accueil

overview Capture 2 : La vue globale

hosts Capture 3 : La liste des machines surveillées

statusmap Capture 4 : La liste des machines sous une des formes topologiques (balloon)

service Capture 5 : La liste des services surveillés

log Capture 6 : Le journal des évènements

notifications Capture 7 : La liste des dernières notifications




Conclusion

Et voilà ! Désormais, vous savez quel est le minimum à connaître pour configurer les fichiers de nagios afin de mettre en place votre solution de supervision. Bien entendu, ceci n'est qu'une petite partie mais j'espère qu'elle vous aura été utile :).
Il ne vous reste plus qu'à aller tester et approfondir de votre côté !