Création d’un plugin pour Icinga / Nagios

Dans la suite logique de la mise en place d’Icinga, nous allons voir comment créer notre premier script bash pour Icinga et comment l’ajouter au localhost.

Pour commencer, voici 2 liens sur la création de plugin pour Nagios :

Et une traduction rapide du tableau du premier lien :

Valeur Numérique Statut Description
0 OK Le plugin a été capable de vérifier le service et celui-ci semble fonctionner correctement.
1 Warning Le plugin a été capable de vérifier le service mais celui-ci semble au dessus de certains seuil d’alerte ou il ne fonctionne pas correctement.
2 Critical Le plugin a détecté que le service ne fonctionnait pas ou qu’il était au-dessus d’un seuil critique.
3 Unknow Des arguments incorrects ont été passé au plugin ou des échecs de bas niveau interne au plugin (par exemple : ne peut ouvrir un socket TCP) qui l’empêchent d’exécuter l’opération spécifiée. Les erreurs de niveau supérieur (tels que les erreurs de résolution de noms, timeout socket, etc) sont en dehors du contrôle des plugins et ne devrait généralement pas être déclarés comme des états inconnus.

Ce tableau comprend le valeur que notre script doit retourner à Icinga pour définir les états « Ok », « Warning », « Critical » et « Unknow ».

Le script

Pour mettre en pratique le tableau ci-dessus, nous allons créer le fichier « monscript.sh » contenant le code suivant :

# !/bin/bash
 
if [ -e "/root/fichier" ]; then
	echo "Fichier trouvé"
	exit 0
else
	echo "Fichier non trouvé"
	exit 2
fi

Ce script tout simple va vérifier si un fichier existe et nous renvoyer un état critique si le fichier est introuvable.

Mise en place du script

On commence par copier le script dans le répertoire « libexec » d’Icinga et on lui associe les bons droits.

cp monscript.sh /usr/local/icinga/libexec/
chown icinga:icinga /usr/local/icinga/libexec/monscript.sh 
chmod u+x /usr/local/icinga/libexec/monscript.sh

Ensuite, nous devons créer un service auquel nous associons ce script puis nous rajouterons le service à notre serveur. Nous devons nous rendre dans le répertoire « etc/objects » d’Icinga et éditer le fichier « commands.cfg »

cd /usr/local/icinga/etc/objects/
vi commands.cfg

Et on rajoute le contenu suivant :

# 'check_fichier'
define command{
        command_name    check_fichier
        command_line    $USER1$/monscript.sh
        }

Le paramètre « command_name » définit le nom utilisé pour appeler le service dans la configuration d’un serveur ou d’un groupe de serveur. Le paramètre « command_line » dit quel script il faut appeler, la variable « $USER1$ » correspond au chemin « /usr/local/icinga/libexec ».

Maintenant nous devons rajouter notre commande dans le fichier de configuration de notre serveur. Nous allons donc éditer le fichier « localhost.cfg » :

vi localhost.cfg

Et on ajoute les lignes suivantes dedans :

define service{
        use                             local-service         ; Name of service template to use
        host_name                       localhost
        service_description             Check File
        check_command                   check_fichier
        }

« use » défini le template utilisé par le service (voir le fichier « templates.cfg »). Le paramètre « check_command » définit quelle commande est appelée, il faut reporter le « command_name » utilisé dans le fichier « commands.cfg ». Je pense que les paramètres « host_name » et « service_description » possèdent des noms assez explicites.

Enfin, il ne vous reste plus qu’à redémarrer Icinga via la commande :

/etc/init.d/icinga restart

Si vous avez des messages d’erreurs vérifier vos modifications, pour commencer je vous conseille de rajouter le service puis de redémarrer une première fois « Icinga », puis de rajouter le service au serveur et de redémarrer « Icinga » une nouvelle fois.

Notre script dans Icinga

Une fois que tout est en place, vous devriez voir dans « Icinga » notre nouveau service.

Etat critique :

Etat OK :

On peut voir au passage un petit soucis au niveau des accents.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.