Nagios est un logiciel permettant de superviser (par définition, les surveiller) des serveurs d’un réseau.

Ce tutoriel explique comment installer et configurer Nagios3 sous Debian 7.11.0. Si vous utilisez une distribution (ou version) différente il pourrait y avoir quelques divergences de paramétrage.

Toutes les manipulations à venir seront à effectuer en tant que super-utilisateur de la machine.


Installation de Nagios

Mettre à jour la distribution

Exécutez la commande suivante :

apt-get update -y && apt-get upgrade -y

Cette commande permet de mettre à jour la liste des paquets de Debian et de mettre à jour les paquets installés sur votre système Debian.

Installer Nagios

Exécutez la commande suivante :

apt-get install nagios3

Pendant l’installation il vous sera demandé de renseigner un mot de passe pour l’utilisateur administrateur de Nagios ;

A l’installation de Nagios, 2 dossiers principaux sont créés :

  • /etc/nagios3/ : contient les fichiers de configuration de Nagios, c’est dans celui-ci que nous configurerons les services de supervision à utiliser pour les clients. Il contient notamment :
nagios.cfg

Fichier qui contient la configuration du serveur

cgi.cfg

Fichier qui contient les droits des utilisateurs de Nagios

htpasswd.users

Fichier qui contient la liste des utilisateurs Nagios

conf.d

Dossier qui contiendra les fichiers de configuration pour chaque client à superviser

  • /etc/nagios-plugins/ : contient le dossier config/ qui lui contient les services disponibles pour la supervision des clients.

Une fois installé pour pouvez déjà accéder à Nagios à l’adresse http://IPServeur/nagios3/, avec les identifiants administrateurs suivants :

  • Utilisateur : nagiosadmin
  • Mot de passe : mot de passe que vous avez choisi pendant l’installation

Configuration de Nagios

Créer un utilisateur Nagios

Comme dit plus haut, le fichier htpasswd.users va contenir les utilisateurs de Nagios. Pour pouvoir créer un utilisateur, vous devez utilisez la commande htpasswd de la manière suivante :

htpasswd /etc/nagios3/htpasswd.users nomutilisateur

Un mot de passe vous sera ensuite demandé pour l’utilisateur.

Définir les droits d’un utilisateur Nagios

Un utilisateur fraîchement créé n’a pas de droit sur Nagios. Si vous vous rendez sur l’interface vous remarquerez que l’utilisateur n’a même pas le droit de consulter les informations sur les hôtes de Nagios.

La configuration des droits de l’utilisateur se fera dans le fichier cgi.cfg comme dit précédemment. Si vous souhaitez créer un utilisateur standard permettant seulement la consultation, par exemple, la configuration du fichier ce sera de la manière suivante :

Éditez le fichier cgi.cfg :

nano /etc/nagios3/cgi.cfg

Repérez la ligne suivante :

authorized_for_system_information=nagiosadmin

Cette option permet d’autoriser un utilisateur à accéder à toutes les informations sur Nagios ;

Ajoutez le nom de l’utilisateur standard après nagiosadmin : chaque utilisateur doit être séparé par une virgule « , » ;

Repérez la ligne suivante :

authorized_for_all_services=nagiosadmin

Cette option permet d’autoriser un utilisateur à accéder à la liste des services de Nagios ;

Ajoutez le nom de l’utilisateur standard après nagiosadmin : chaque utilisateur doit être séparé par une virgule « , » ;

Repérez la ligne suivante :

authorized_for_all_hosts=nagiosadmin

Cette option permet d’autoriser un utilisateur à accéder à la liste des hôtes supervisés par Nagios. Les services visibles sur l’interface Nagios sont liés à ces hôtes ;

Ajoutez le nom de l’utilisateur standard après nagiosadmin : chaque utilisateur doit être séparé par une virgule « , » ;

Enregistez les modification ;

Relancer le service nagios3 :

service nagios3 reload

Configuration d’un hôte

Nous ne verrons ici que quelques services de supervision, libre à vous de tester les autres services disponibles pour votre réseau.

Plus tôt, nous avons vue que le dossier /etc/nagios3/conf.d/ contiendrait les fichiers de configuration des hôtes de Nagios.  Chaque hôte aura son propre fichier de configuration .cfg. Il est possible de configurer plusieurs hôtes dans un même fichier mais, par soucis de d’organisation je vous conseille de créer un fichier par client : ce fichier aura le nom du client en question.

Pour l’exemple, nous allons superviser un serveur web nous le nom sera Website. Vous devrez donc adapter les manipulation à venir à votre cas.

Nagios met a disposition le fichier /etc/nagios3/conf.d/localhost_nagios2.cfg qui est un exemple de configuration d’un hôte. Nous allons faire une copie de ce fichier en la renommant website.cfg.

Faite une copie du fichier localhost_nagios2.cfg :

cp /etc/nagios3/conf.d/localhost_nagios2.cfg /etc/nagios3/conf.d/website.cfg

Éditez le fichier de configuration que vous venez de créer :

nano /etc/nagios3/conf.d/website.cfg

Le contenu de votre fichier devrait être plus ou moins comparable à ceci :

# A simple configuration file for monitoring the local host
# This can serve as an example for configuring other servers;
# Custom services specific to this host are added here, but services
# defined in nagios2-common_services.cfg may also apply.
#

define host{
 use generic-host ; Name of host template to use
 host_name localhost
 alias localhost
 address 127.0.0.1
 }

# Define a service to check the disk space of the root partition
# on the local machine. Warning if < 20% free, critical if
# < 10% free space on partition. define service{  use generic-service ; Name of service template to use  host_name localhost  service_description Disk Space  check_command check_all_disks!20%!10%  } # Define a service to check the number of currently logged in # users on the local machine. Warning if > 20 users, critical
# if > 50 users.

define service{
 use generic-service ; Name of service template to use
 host_name localhost
 service_description Current Users
 check_command check_users!20!50
 }

# Define a service to check the number of currently running procs
# on the local machine. Warning if > 250 processes, critical if
# > 400 processes.

define service{
 use generic-service ; Name of service template to use
 host_name localhost
 service_description Total Processes
 check_command check_procs!250!400
 }

# Define a service to check the load on the local machine.

define service{
 use generic-service ; Name of service template to use
 host_name localhost
 service_description Current Load
 check_command check_load!5.0!4.0!3.0!10.0!6.0!4.0
 }

Ce qui va nous intéressé ici est la fonction define host qui permet de définir un hôte et define service qui permet de lui attribuer des services ;

Supprimez les defines service jusqu’à ce qu’il ne vous en reste plus qu’un et commentez ce dernier. De cette manière vous aurez toujours un modèle pour définir un service dans votre fichier. Il ne dverait rester que la définition de l’hôte et celle d’un service comenté :

define host{
 use generic-host ; Name of host template to use
 host_name localhost
 alias localhost
 address 127.0.0.1
 }

# host_name : permet de définir un nom court utilisé pour identifier l'hôte
# alias : permet de définir (ou pas) un nom plus long ou une description utilisée pour identifier l'hôte. 
# address : permet de définir l'adresse IP de l'hôte
# define service{
#  use generic-service ; Name of service template to use
#  host_name localhost
#  service_description Disk Space
#  check_command check_all_disks!20%!10%
#  }

# host_name : permet de renseigner le nom de l'hôte
# service_description : permet de définir la description du service. Si un hôte à plusieurs services, ils ne doivent pas avoir la même description !
# check_commande : permet de définir le nom de la commande à utilisé et ses arguments (nous verrons cela prochainement)

Si vous souhaitez approfondir la configuration de votre hôte, vous pouvez consulter ce site.

Définir un hôte

Nous allons pour commencer définir l’hôte en question à l’aide de la fonction define host :

define host{
 use generic-host ; Name of host template to use
 host_name website
 alias website
 address @IPHôte
 }

Ajouter une sonde ICMP (ping)

Ce service permet de contrôler la présence sur le réseau des hôtes de Nagios.

Dans le dossier /etc/nagios-plugins/config/ vous trouvez le fichier ping.cfg qui contient les différents commandes disponibles pour ce service. La commande qui va nous intéresser est nommée check_ping et ressemble à ceci :

# 'check_ping' command definition
define command{
 command_name check_ping
 command_line /usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w '$ARG1$' -c '$ARG2$'
 }

Nagios exécutera cette commande :

/usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w '$ARG1$' -c '$ARG2$'

Cette commande comprend 3 paramètres que vous nous devrons renseigner au moment de la définition du service dans le fichier de configuration de l’hôte :

-H ‘$HOSTADDRESS$’

Adresse IP de l’hôte

-w ‘$ARG1$’

Informations sur le temps maximum de l’envoie en secondes et le pourcentage paquets que l’on accepte de perdre.

-c $ARG2$’

Informations sur le temps maximum de réponse en secondes et le pourcentage de paquets que l’on veut en retour.

Nous verrons prochainement comment les paramétrer ;

Éditez le fichier de configuration de votre hôte :

nano /etc/nagios3/conf.d/website.cfg

Créer un nouveau service utilisant la commande check_ping de la manière suivante :

define service{
 use generic-service ; Name of service template to use
 host_name website
 service_description PING
 check_command check_ping!100.0,20%!500.0,60%
 }

La partie la plus intéressé et celle après la définition de du nom de la commande (check_ping). Nous avons vue précédemment que la commande comprendre 3 paramètres dont 2 arguments :

/usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w '$ARG1$' -c '$ARG2$'

Le paramètres $HOSTADDRESS$ est automatiquement complété. c’est Nagios lui-même qui ira chercher l’adresse IP de l’hôte (que nous avons définit dans define host) auquel le service est associé.

Il nous faut seulement paramétrer les arguments $ARG1$ et $ARG2$. Les arguments doivent être placés après le nom de la commande à utiliser et chacun doit être séparé par un point d’exclamation « ! ». De plus, si un argument demande plusieurs paramètre (comme c’est le cas pour la commande check_ping), alors chaque paramètre doit être séparé par une virgule « , ».

A noter qu’en fonction de la commande utilisée, le paramétrage des arguments n’est pas le même ; il vous faudra vous renseigner dans la documentation de Nagios pour savoir comment chacun se paramètre.

Dans le cas de la commande check_ping, les arguments doivent être paramétré de la manière suivante :

  • $ARG1$ : cet argument demande 2 paramètres, le temps d’envoie et le pourcentage de paquet que l’on accepte de perdre pendant l’envoie. Il se configure de la manière suivante :
    • TempDeRéponse,%dePerte (exemple : 100.0,20%)
  • $ARG2$ : cet argument demande 2 paramètres, le temps de réponse et le pourcentage de paquet que l’on veut en retour. Il se configure de la manière suivante :
    • TempDeRéponse,%deRetour (exemple : 500.0,60%)

Enregistrez les modifications ;

Vérifiez qu’il n’y ait pas d’erreur dans les fichiers de configuration de Nagios :

nagios3 -v /etc/nagios3/nagios.cfg

Cette commande contrôle les fichiers de configuration de Nagios (dont ceux des hôtes) afin de vérifier qu’il n’y ait aucune erreur de syntaxe ou autre ;

Si vous n’avez aucune erreur, relancez le service nagios3 (à faire a chaque modifications d’un fichier de configuration) :

service nagios3 reload

Depuis l’interface Nagios, vous devriez voir dans la liste des services (Current Status > Services) le service que vous venez de créé avec le statut PENDING. Si tout ce passe bien, le statut devrait passer à OK si l’hôte réponse.

Ajouter une sonde SSH

Ce service permet de contrôler l’accès SSH aux hôtes Nagios. Dans le dossier /etc/nagios-plugins/config/ vous trouverez le fichier ssh.cfg qui contient les commandes disponibles.

Nous allons utiliser la commande check_ssh qui permet de contrôler que le service ssh de l’hôte est fonctionnel :

# 'check_ssh' command definition
define command{
 command_name check_ssh
 command_line /usr/lib/nagios/plugins/check_ssh '$HOSTADDRESS$'
 }

Éditez le fichier de configuration de votre hôte :

nano /etc/nagios3/conf.d/website.cfg

Créer un nouveau service utilisant la commande check_ssh de la manière suivante :

define service{
 use generic-service ; Name of service template to use
 host_name website
 service_description SSH
 check_command check_ssh
 }

Comme nous avons pu le voir, la commande ne comporte pas d’argument. De ce fait, vous n’avez rien à renseigner après le nom de celle-ci ;

Enregistrez les modifications ;

Vérifiez qu’il n’y ait pas d’erreur dans les fichiers de configuration de Nagios :

nagios3 -v /etc/nagios3/nagios.cfg

Si vous n’avez aucune erreur, relancez le service nagios3 :

service nagios3 reload

Depuis l’interface Nagios, vous devriez voir dans la liste des services (Current Status > Services) le service que vous venez de créé avec le statut PENDING. Si tout ce passe bien, le statut devrait passer à OK si l’hôte réponse.

Ajouter une sonde HTTP

Ce service permet de contrôler l’accès via le protocole HTTP. Dans le dossier /etc/nagios-plugins/config/ vous trouverez le fichier http.cfg qui contient les commandes disponibles.

Nous allons utiliser la commande check_http qui permet de contrôler que le service http de l’hôte est fonctionnel :

# 'check_http' command definition
define command{
 command_name check_http
 command_line /usr/lib/nagios/plugins/check_http -H '$HOSTADDRESS$' -I '$HOSTADDRESS$'
 }

Éditez le fichier de configuration de votre hôte :

nano /etc/nagios3/conf.d/website.cfg

Créer un nouveau service utilisant la commande check_http de la manière suivante :

define service{
 use generic-service ; Name of service template to use
 host_name website
 service_description HTTP
 check_command check_http
 }

Comme nous avons pu le voir, la commande ne comporte pas d’argument. De ce fait, vous n’avez rien à renseigner après le nom de celle-ci ;

Enregistrez les modifications ;

Vérifiez qu’il n’y ait pas d’erreur dans les fichiers de configuration de Nagios :

nagios3 -v /etc/nagios3/nagios.cfg

Si vous n’avez aucune erreur, relancez le service nagios3 :

service nagios3 reload

Depuis l’interface Nagios, vous devriez voir dans la liste des services (Current Status > Services) le service que vous venez de créé avec le statut PENDING. Si tout ce passe bien, le statut devrait passer à OK si l’hôte réponse.


Ce tutoriel est terminé. Vous pouvez continuer la supervision en supervisant un hôte Linux via NRPE, un hôte Windows via NSCP, un actif (comme un switch) via SNMP.

Si vous avez des problèmes, où que vous trouvez que certains points sont mal expliqués (ou faux), n’hésitez pas à m’avertir.