Maintenant que votre environnement de supervision est prêt et que vous comprenez comment est structuré Nagios, il est temps de découvrir son fonctionnement. Nous allons voir ensemble les éléments qui constituent le système de supervision : les plugins, la command, le host et le service. Puis nous mettrons en place la supervision d'un équipement et du service associé : le serveur Nagios lui-même. Oui, nous allons superviser le serveur Nagios avec Nagios !
Avant de se plonger dans la configuration minimale de Nagios, il est important que vous compreniez son schéma de fonctionnement.
Découvrez comment Nagios se supervise lui-même
Le fonctionnement de Nagios se base sur quatre éléments essentiels :
les plugins. Vous les connaissez, ce sont des programmes exécutables par Nagios : binaires compilés, script Perl, script Bash, etc. ;
la command. Cet objet appartient à Nagios et permet de définir le lancement d’un plugin ;
le host. Cet objet appartient à Nagios et représente tous les équipements à superviser. Ils possèdent généralement une adresse IP et peuvent répondre aux pings ICMP standards.
le service. Cet objet appartient à Nagios et représente toutes les données à superviser sur un host. On peut citer, entre autres, les services réseaux, par exemple les ports ouverts d’un switch ou des services applicatifs, le service SSH ou HTTP d’un serveur, mais aussi la charge CPU.
Dans cette section, nous allons voir ensemble comment fonctionne chacun de ces éléments.
Les plugins
Au plus bas niveau se situe le plugin. Ce programme contient, en fin de compte, toute l’intelligence de Nagios. C’est lui qui est responsable de contacter le host ou le service à superviser, de tester son statut et de récupérer les données associées.
La notion la plus importante à comprendre ici réside dans le fait que le plugin fonctionne de manière autonome et indépendante !
Je vous propose cette petite manipulation : exécutez le plugin check_ping
sous le compte nagios
(qui est le compte du service Nagios) de manière indépendante, en lançant la commande suivante :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping
Cette commande produit la sortie suivante :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping check_ping: Impossible de décomposer les arguments Utilisation : check_ping -H <host_address> -w <wrta>,<wpl>% -c <crta>,<cpl>% [-p packets] [-t timeout] [-4|-6]
Le plugin vous indique ici qu’il attend un minimum d’arguments, notamment l’adresse du host à vérifier (adresse IP ou nom si Nagios a accès à un DNS), ainsi que les deux arguments :
w
, pour le seuil WARNING, etc
, pour le seuil CRITICAL.
Ces deux arguments prennent pour valeur le temps nécessaire au retour du ping et/ou le pourcentage de paquets perdus par le réseau.
Relancez alors cette commande avec les arguments :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping -H localhost -w 40,40% -c 60,60%
Le premier argument demande de vérifier que le serveur localhost
est bien défini de la même manière que dans le fichier /etc/hosts
du serveur. Le second argument indique un seuil WARNING à 40 ms et/ou 40 % de paquets perdus. Le troisième argument indique un seuil CRITICAL à 60 ms et/ou 60 % de paquets perdus. Bien entendu, ces seuils ne devraient pas se déclencher avec une vérification sur localhost ! Observez le résultat de cette commande :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping -H localhost -w 40,40% -c 60,60% PING OK - Paquets perdus = 0%, RTA = 0.05 ms|rta=0.049000ms;40.000000;60.000000;0.000000 pl=0%;40;60;0
Vous pouvez constater que le plugin renvoie OK
avec un certain nombre d’informations, notamment le temps d’aller-retour de la requête ainsi que le pourcentage de paquets perdus. Ces informations sont comparées aux seuils passés en paramètre afin de déterminer le statut de cette supervision. Vous comprenez ici que ce sont bien les PLUGINS qui, de manière indépendante, déterminent le statut de l’objet à superviser.
Deuxième manipulation : lancez la commande suivante afin de sonder le site www.openclassrooms.fr :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping -H www.openclassrooms.fr -w 05,40% -c 20,60%
Ici, les seuils WARNING et CRITICAL concernant le temps aller-retour de la requête ont diminué à 5 ms et 20 ms. Exécutez la commande et observez le résultat :
nagios@NagiosDebian:/usr/local$ /usr/local/nagios/libexec/check_ping -H www.openclassrooms.fr -w 05,40% -c 20,60% PING WARNING - Paquets perdus = 0%, RTA = 10.69 ms|rta=10.685000ms;5.000000;20.000000;0.000000 pl=0%;40;60;0
Le plugin renvoie un statut WARNING car le temps aller-retour de la requête dépasse les 5 ms, mais reste inférieur à 20 ms.
Les commandes
Au-dessus des plugins se trouvent les commandes Nagios. Deux caractéristiques les définissent :
leur nom. L’idée est de bien nommer ces commandes pour que leurs rôles soient intelligibles au premier coup d’œil, et
le chemin vers le plugin à lancer avec, éventuellement, les arguments associés.
Pour définir une commande qui exécuterait le plugin check_ping
sur localhost comme vu précédemment, il faut ajouter, dans un fichier de configuration Nagios, la syntaxe suivante :
define command { command_name check-ping-localhost command_line /usr/local/nagios/libexec/check_ping -H localhost -w 40,40% -c 60,60% }
Et c’est tout ! Comme vous pouvez le constater, le nom de la commande est très explicite, et la ligne de la commande correspond parfaitement à notre exécution précédente.
Mais attendez :rappelez-vous du chapitre 3 de cette deuxième partie, et notamment de la notion de USER MACROS. Vous avez pu constater que Nagios proposait par défaut une première macro nommée $USER1$
, qui référençait justement le chemin vers les plugins. Vous pouvez donc transformer cette déclaration de commande :
define command { command_name check-ping-localhost command_line $USER1$/check_ping -H localhost -w 40,40% -c 60,60% }
Ainsi, si à l’avenir vos plugins changent de place, vous n’aurez pas à toucher à votre configuration de commande : il vous suffira, tout simplement, de modifier le fichier resource.cfg
!
Les hosts
Maintenant que vous disposez d’une commande vous permettant d’effectuer un check_ping
avec vos propres arguments, il faut définir l’objet Nagios host afin d’ajouter sa supervision.
L’objet Nagios host dispose d’un peu plus de directives que l’objet command. Ces directives sont parfaitement documentées ici.
Vous allez devoir définir les directives minimales suivantes :
host_name : c’est le nom de l’objet tel qu’il sera reconnu par Nagios. Le champ est libre, mais il faut être le plus précis possible afin d’éviter les confusions ;
address : l’adresse IP ou le nom pour joindre l’objet (par exemple,
locahost
,www.unsupersite.com
, etc.) ;max_check_attemps : cette directive spécifie à Nagios le nombre de tentatives successives maximum renvoyant un résultat négatif avant que Nagios considère ce résultat comme fiable et passe l’objet au statut déclenchant des notifications. C’est une directive très importante sur laquelle vous devrez vous documenter sérieusement, notamment pour maîtriser les notions de statut SOFT et HARD ;
check_command : c’est cette directive qui fait la liaison entre votre commande précédemment définie et cet objet host !
Bref, pour reprendre notre exemple précédent, il faut ajouter, dans un fichier de configuration Nagios, la syntaxe suivante :
define host { host_name Nagios Server address localhost check_command check-ping-localhost max_check_attempts 3 }
Les services
Dernier élément de configuration : les services, qui sont des objets obligatoirement rattachés à un host. Pour les observer en détails, lancez dans un premier temps la commande suivante :
nagios@NagiosDebian:~$ /usr/local/nagios/libexec/check_ssh
Vous avez maintenant compris que cette commande exécutait un plugin Nagios. Et il est fort probable que ce plugin teste la réponse d’un service SSH. Elle doit renvoyer la sortie suivante :
nagios@NagiosDebian:~$ /usr/local/nagios/libexec/check_ssh check_ssh: Impossible de décomposer les arguments Utilisation: check_ssh [-4|-6] [-t <timeout>] [-r <remote version>] [-p <port>] <host>
Le seul paramètre obligatoire indiqué par ce plugin est host. Relancez donc la commande avec ce paramètre, fixé à la valeur locahost
:
nagios@NagiosDebian:~$ /usr/local/nagios/libexec/check_ssh localhost
SSH OK - OpenSSH_7.4p1 Debian-10+deb9u4 (protocol 2.0) | time=0,005931s;;;0,000000;10,000000
Le plugin renvoie ici le statut OK
, le service SSH est bien disponible sur localhost.
Tout comme pour le host, il faut, afin de superviser ce service, commencer par créer la commande associée :
define command { command_name check-ssh-localhost command_line $USER1$/check_ssh localhost }
Ensuite, il faut définir un objet service. Cet objet possède ses propres directives, qui sont très bien documentées ici :
Voici la liste des directives minimale pour l’objet service :
service_description : c’est l’identifiant du service. Il doit être unique pour chaque host ;
host_name : c’est la référence à l’objet host hébergeant le service à superviser. Attention : la valeur de cette directive doit correspondre à celle de la directive
host_name
de l’objet host concerné ;check_command : cette directive permet d’indiquer la commande à exécuter pour effectuer la supervision ;
max_check_attempt : possède la même signification que pour le host.
La définition d’un tel objet service donnerait quelque chose comme :
define service { service_description SSH sur Nagios Server host_name Nagios Server check_command check-ssh-localhost max_check_attempts 3 }
Place à la pratique !
Créez un nouveau fichier nagios-server.cfg
dans votre répertoire de travail/usr/local/nagios/opencr_conf
, en utilisant la commande suivante :
touch /usr/local/nagios/opencr_conf/nagios-server.cfg
Rassemblez les lignes précédemment vues dans la section précédente dans ce fichier :
define command { command_name check-ping-localhost command_line $USER1$/usr/local/nagios/libexec/check_ping -H localhost -w 40,40% -c 60,60% } define command { command_name check-ssh-localhost command_line $USER1$/check_ssh localhost } define host { host_name Nagios Server address localhost check_command check-ping-localhost max_check_attempts 3 } define service { service_description SSH sur Nagios Server host_name Nagios Server check_command check-ssh-localhost max_check_attempts 3 }
Enregistrez votre fichier et lancez la commande testNagios
pour effectuer une première vérification :
nagios@NagiosDebian:~$ testNagios
Le résultat de cette commande devrait ressembler à :
Nagios Core 4.4.2 Copyright (c) 2009-present Nagios Core Development Team and Community Contributors [...] Total Warnings: 4 Total Errors: 0 Things look okay - No serious problems were detected during the pre-flight check
Vous allez constater trois avertissements sur notre configuration minimale pour le service, et un avertissement sur celle du host. C’est normal, certaines directives ne sont pas encore définies, mais ce n’est pas bloquant ! Pour que le service prenne cela en compte, vous pouvez le relancer avec la commande restartNagios
.
nagios@NagiosDebian:~$ restartNagios
nagios@NagiosDebian:~$
Si tout se passe bien, cette commande ne devrait rien renvoyer en sortie. Pour vérifier que votre nouvelle configuration a bien été prise en compte, rendez-vous sur l’interface d’administration de Nagios. Dans un premier temps, cliquez sur le lien « Hosts » à gauche de la page :
Vous y retrouvez votre nouvel équipement supervisé « Nagios Server ». Cliquez maintenant sur le lien « Services » à gauche de la page :
Vous y retrouvez la supervision de votre service « SSH sur Serveur Nagios » sur le host « Nagios Server ».
Vous venez d’ajouter votre serveur Nagios et son service SSH en supervision. Je vous invite maintenant à étudier le contenu du fichier /usr/local/nagios/libexec
Vous allez y découvrir la définition d’un host nommé localhost
, et de huit services définis sur le même modèle que les vôtres. Vous venez de comprendre comment Nagios se supervise lui-même !
define host { use linux-server host_name localhost alias localhost address 127.0.0.1 } define service { use local-service host_name localhost service_description PING check_command check_ping!100.0,20%!500.0,60% } define service { use local-service host_name localhost service_description Root Partition check_command check_local_disk!20%!10%!/ } [...]
Vous remarquerez cependant quelques différences dans la définition de la directive check_command avec, notamment, l’utilisation du caractère !
. Je reviendrai sur ce point dans la troisième partie de ce cours, lorsque je parlerai du plugin check_http
.
En résumé
Dans ce chapitre, vous avez pu ajouter un nouvel équipement : le serveur Nagios lui-même, ainsi que son service à superviser. Ceci vous a permis d’observer les premiers retours des sondes sur l’interface d’administration Nagios.
Je vous propose justement, dans le prochain chapitre, d’étudier dans le détail le fonctionnement de cette interface Web.