Surveillance réseau · 7 min read · Nov 18, 2025

Ajouter un nouvel hôte et des services à surveiller par Icinga 2

Dans ce tutoriel, je vais vous montrer comment ajouter un nouvel hôte à surveiller par Icinga 2 et comment les services de l’hôte, tels qu’un serveur HTTP web, peuvent être surveillés par Icinga. Je vais également vous montrer comment créer votre propre commande de plugin Icinga personnalisée afin de surveiller les services UDP dans votre infrastructure réseau.

Icinga 2 fournit une infrastructure de plug-in qui lui permet de mettre en œuvre facilement des vérifications de serveur et de service ainsi que des notifications. Ce fait permet aux administrateurs système et aux programmeurs de construire de nouvelles fonctionnalités pour Icinga 2 et de créer des commandes spéciales spécialisées dans la vérification de différents aspects d’un hôte, d’un service réseau ou d’une fonctionnalité réseau.

Icinga 2 stocke les définitions d’hôtes avec des attributs d’objet utilisés pour les règles de service, les notifications, les dépendances et les objets de temps d’arrêt planifié dans le fichier hosts.conf qui se trouve dans le répertoire /etc/icinga2/conf.d/. Dans ce fichier, vous pouvez ajouter une nouvelle définition d’hôte afin qu’elle soit vérifiée par le processus de surveillance Icinga2. Dans l’exemple ci-dessous, nous allons ajouter une nouvelle définition afin que notre routeur de passerelle par défaut puisse être vérifié périodiquement par Icinga2 pour voir s’il est en ligne via des vérifications ICMP.

nano /etc/icinga2/conf.d/hosts.conf

Allez à la fin du fichier et ajoutez les lignes suivantes pour ajouter la nouvelle définition d’hôte.

object Host "Router" {  
  address = "192.168.1.1"  
  check_command = "hostalive"  
}

Par exemple, sur le routeur principal, nous voulons également vérifier l’état du serveur HTTP web qui est utilisé pour l’authentification et les configurations. Les lignes ci-dessous vérifieront le serveur web sur le routeur pour voir si le serveur HTTP est actif et répond avec les codes HTTP appropriés.

object Service "http" {  
  host_name = "Router"  
  check_command = "http"  
}

Surveiller le serveur web avec Icinga 2

Pour qu’Icinga 2 prenne en compte les nouvelles définitions d’hôtes et commence à surveiller périodiquement la nouvelle ressource, vous devez redémarrer le processus en émettant la commande suivante.

systemctl restart icinga2.service

Pour vérifier l’état de l’hôte nouvellement ajouté, dans ce cas, le routeur, connectez-vous au panneau Web Icinga 2 et naviguez vers Vue d’ensemble -> Hôtes. Dans le panneau de droite, vous devriez voir l’état de l’hôte nouvellement ajouté, comme illustré dans l’image ci-dessous qui décrit l’état de notre routeur. Les vérifications des hôtes sont essentiellement effectuées via le protocole ICMP et Icinga2 affichera le temps de réponse moyen pour un hôte dans le panneau web.

État de l'hôte Icinga 2

Si vous souhaitez afficher l’état des vérifications de service HTTP de l’hôte, naviguez vers Vue d’ensemble -> Groupes de services et cliquez sur Vérifications HTTP. Dans le panneau de droite, vous devriez voir l’état du service HTTP du routeur, comme illustré dans la capture d’écran suivante.

État du service de l'hôte

Icinga 2 est livré avec une série de commandes prédéfinies qui peuvent être utilisées pour surveiller un large éventail de services. Mais ces commandes par défaut ne suffisent parfois pas pour vérifier des services personnalisés. Dans ce cas, une approche consiste à créer votre propre script de commande personnalisé qui peut être appelé par Icinga 2 pour surveiller le service. Dans l’exemple ci-dessous, nous allons vous montrer comment ajouter un nouveau script de commande personnalisé afin de vérifier l’état de différents services UDP sur votre réseau. La commande personnalisée doit être paramétrée et doit contenir au moins deux paramètres, sous la forme de –H nom d’hôte ou IP et –p numéro de port. Le script de commande personnalisé pour vérifier un port de service UDP doit être placé dans le répertoire /usr/lib/nagios/plugins/ et doit avoir le contenu comme déclaré dans l’extrait ci-dessous.

nano /usr/lib/nagios/plugins/check_udpport

Extrait du fichier check_udpport.

#!/bin/bash  
while getopts H:p: option  
do  
 case "${option}"  
in  
H) addr=${OPTARG};;  
p) port=${OPTARG};;  
 esac  
done  
   
/bin/nc -vz -u "$addr" "$port" > /dev/null 2>&1  
   
stat=`echo $?`  
   
if test $stat -eq 0; then  
echo "Port $port est ouvert sur $addr"  
exit 0  
else  
echo "Port $port n'est pas ouvert sur $addr"  
exit 2  
fi

Plugin UDP personnalisé Icunga

Essayons de comprendre comment fonctionne ce script. Comme vous pouvez le voir, le plugin n’est rien d’autre qu’un simple script Bash. Nous utilisons une expression de contrôle while pour parcourir deux paramètres définis par les lettres H et p. Les deux lettres de variables shell H et p sont paramétrées et analysées comme arguments de ligne de commande à l’aide de l’instruction case. L’instruction case testera si les paramètres existent et les déclarera pour les variables addr et port. Ensuite, les variables $ addr et $ port seront ajoutées comme options de commande pour la commande netcat, qui, en retour, vérifiera si le numéro de port, défini dans la variable $port, est ouvert pour l’hôte avec l’adresse IP définie par la variable $addr. La sortie de la commande netcat et les erreurs éventuelles ne sont pas d’intérêt pour ce plugin, donc elles seront rejetées dans le fichier noir Linux /dev/null. Ce dont nous avons besoin, c’est du code de sortie de la commande netcat. Après que netcat ait vérifié le port sur l’hôte, il renverra toujours un code de sortie 0 si le port UDP sondé est ouvert. Le reste de la commande est assez simple. Une instruction conditionnelle if-else imprimera ce qui suit : si le port UDP est ouvert sur l’adresse IP spécifiée, imprimez la chaîne avec le contenu ‘le port est ouvert’ pour cette adresse IP d’hôte avec l’ajout du code de sortie 0. Le code de sortie 0 est toujours le code de succès ou de non-erreur renvoyé par un processus sous Linux. Si le port UDP n’est pas ouvert (le code de sortie de netcat sera autre que 0), imprimez la chaîne qui dit ‘le port n’est pas ouvert’ pour l’hôte et ajoutez le code de sortie de 2. Les codes de sortie ajoutés après chaque chaîne imprimée dans ce script ont une grande signification pour les vérifications Icinga2, comme expliqué ci-dessous.

Code de retour du plugin de commande pour l’état de service ou l’état d’hôte dans Icinga 2 :

0 = OK pour les services et UP pour les hôtes

1 = WARNING pour les services et UP ou DOWN/UNREACHABLE pour les hôtes (l’hôte est instable ou change fréquemment d’état)

2 = CRITICAL pour les services et DOWN/UNREACHABLE pour les hôtes

3 = UNKNOWN DOWN/UNREACHABLE

Donc, fondamentalement, Icinga 2 exécutera ce script avec les paramètres d’hôte et de port et il renverra deux états : soit le port UDP n’est pas accessible et vous alertera que le service UDP de l’hôte est critique, soit le port UDP est accessible et vous informera que le service UDP fonctionne dans de bonnes conditions et est OK.

Après avoir modifié le fichier de script, enregistrez et fermez-le et assurez-vous que le fichier peut être lancé en ajoutant les permissions d’exécution avec la commande suivante.

chmod +x /usr/lib/nagios/plugins/check_udpport

Ensuite, pour tester si le script fonctionne comme prévu, exécutez la commande contre un port UDP ouvert et un port UDP fermé sur un hôte de votre réseau en émettant la syntaxe ci-dessous.

Ici, le serveur TFTP est vérifié pour l’hôte 192.168.1.2.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 69 

Simulez les vérifications contre un port UDP que vous savez être fermé.

/usr/lib/nagios/plugins/check_udpport –H 192.168.1.2 –p 68

Tester le port UDP

Pour que ce nouveau plugin personnalisé soit largement utilisé dans Icinga 2, ajoutez une nouvelle définition de commande dans le fichier de configuration des commandes Icinga 2, comme montré dans l’exemple ci-dessous.

nano /etc/icinga2/conf.d/commands.conf

Allez au bas de ce fichier et ajoutez la définition de commande comme suit :

object CheckCommand "myudp" {  
  command = [ PluginDir + "/check_udpport" ]  
    
    arguments = {  
    "-H" = "$addr$"  
    "-p" = "$port$"  
}  
  vars.addr = "$address$"  
}

Ajouter une définition de commande Icinga

Le nom de la commande qui sera utilisée dans les configurations Icinga 2 pour appeler la commande check_udpport serait “ myudp “. Nous n’avons pas besoin de spécifier l’adresse lorsque nous appelons la commande pour une définition d’hôte de service car elle est codée en dur par la macro Icinga 2 $address$.

Pour vérifier si la commande fonctionne comme prévu, ajoutez une nouvelle définition de service pour un hôte afin de vérifier si un service UDP spécifique est ouvert ou non sur cet hôte. Par exemple, pour vérifier si le port DHCP est ouvert pour l’hôte 192.168.1.2, ajoutez la définition ci-dessous dans le fichier hosts.conf d’Icinga2.

object Service "dhcp" {  
  host_name = "Pi.hole"  
  check_command = "myudp"  
vars.port = "67"  
}

Ajouter une vérification de port UDP dans Icinga 2

Ensuite, redémarrez Icinga 2 pour refléter les changements et naviguez vers le panneau Web Icinga 2, Vue d’ensemble -> Hôtes, cliquez sur votre hôte spécifique et vérifiez l’état du service UDP, comme montré dans la capture d’écran ci-dessous.

État du service UDP

C’est tout ! Vous avez réussi à ajouter un hôte et ses services seront périodiquement vérifiés par l’application de surveillance réseau Icinga 2. Pour d’autres configurations personnalisées concernant le moteur de surveillance Icinga 2 et le script de commande personnalisé, visitez la page de documentation à l’adresse suivante : https://www.icinga.com/docs/icinga2/latest/doc/03-monitoring-basics/#check-commands

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.