Chapitre 71. API pour les plugins Nagios

Autres Ressources

Si vous cherchez à écrire vos propres plugins pour Nagios, soyez sûrs d'avoir visiter ces autres ressources:

Vue d'ensemble du plugin

Les scripts et exécutables doivent faire deux choses (au minimum) afin d'être considérés comme plugins Nagios

  • Sortir avec une des différentes valeurs de retour possibles

  • Retourner au moins une ligne de texte vers le STDOUT

Le fonctionnement interne de votre plugin n'intéresse pas Nagios. Votre plugin peut contrôler l'état d'un port TCP, exécuter une requête sur une base de données, vérifier l'espace disque restant, ou faire tout à fait autre chose dont il a besoin pour effectuer son contrôle.

Code de retour

Nagios détermine l'état de l'hôte ou du service en évaluant le code de retour du plugin. Le tableau suivant nous montre une liste des différents codes de retour valides, ainsi que l'état du service ou de l'hôte correspondant.

Code de retour du plugin

Etat du service

Etat de l'hôte

0

OK

UP

1

WARNING

UP ou DOWN/UNREACHABLE*

2

CRITICAL

DOWN/UNREACHABLE

3

UNKNOWN

DOWN/UNREACHABLE

Si l'option use_aggressive_host_checking est activée, les codes de retour 1 donneront un état DOWN ou UNREACHABLE pour l'hôte. Sinon, les codes de retour 1 donneront un état UP pour l'hôte. Le processus par lequel Nagios détermine si une machine est DOWN ou UNREACHABLE est traité ici.

Spécifications pour la sortie du plugin

Au minimum, les plugins doivent retourner au moins du texte en sortie. A partir de Nagios 3, les plugins peuvent optionnellement retourner plusieurs lignes de texte en sortie. Les plugins peuvent aussi retourner optionnellement des données de performance qui pourront être traitées par une application externe. Le format basique pour la sortie d'un plugin est décrit ci-dessous:

TEXT OUTPUT | OPTIONAL PERFDATALONG TEXT LINE 1LONG TEXT LINE 2…LONG TEXT LINE N | PERFDATA LINE 2PERFDATA LINE 3…PERFDATA LINE N

Les données de performance (ici en orange) sont optionnelles. Si un plugin renvoie des données de performance dans sa sortie, elles doivent être séparées du texte en utilisant le symbole 'pipe' ou 'tube' ( | ). Les lignes supplémentaires de texte de sorties (ici en bleu) sont aussi optionnelles.

Exemples de sorties de plugin

Voyons quelques exemples de sorties de plugin possibles…

Cas 1: Une ligne en sortie (texte seulement)

Imaginons que notre plugin ne retourne qu'une seule ligne de texte en sortie, cela ressemblerait à ceci:

DISK OK - free space: / 3326 MB (56%);

Si le plugin est utilisé pour effectuer un contrôle d'un service, la ligne entière de sortie sera écrite dans la macro $SERVICEOUTPUT$.

Cas 2: Une ligne en sortie (texte et données de performance)

Un plugin peut retourner optionnelement des données de performance pouvant être utilisées par des applications externes. Pour ce faire, les données de performance doivent être séparées du texte par un 'pipe' ou 'tube' ( | ) comme ceci:

DISK OK - free space: / 3326 MB (56%);
|
/=2643MB;5948;5958;0;5968

Si le plugin est utilisé pour effectuer un contrôle de service, la partie en rouge du message de sortie du plugin (à gauche du séparateur 'pipe') sera écrite dans la macro $SERVICEOUTPUT$ et la partie orange du message de sortie du plugin (à droite du séparateur 'pipe' ) sera écrite dans la macro $SERVICEPERFDATA$ .

Cas 3: Plusieurs lignes de sortie (texte et données de performance)

Un plugin peut optionnellement retourner plusieurs lignes de texte et de données de performance, comme suit:

DISK OK - free space: / 3326 MB (56%); | /=2643MB;5948;5958;0;5968/ 15272 MB (77%);/boot 68 MB (69%);/home 69357 MB (27%);/var/log 819 MB (84%); | /boot=68MB;88;93;0;98/home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980

Si le plugin est utilisé pour effectuer un contrôle de service, la partie en rouge de la première ligne du message de sortie du plugin (à gauche du séparateur 'pipe') sera écrite dans la macro $SERVICEOUTPUT$. Les parties oranges de la première ligne et suivantes seront concaténées (avec des espaces) et seront stockées dans la macro $SERVICEPERFDATA$. es parties bleues de la 2ème à la 5ème ligne du message de sortie du plugin seront concaténées (avec comme séparateur le caractère 'nouvelle ligne' [ ] ) et seront stockées dans la macro $LONGSERVICEOUTPUT$.

Le contenu final de chaque macro est listé ci-dessous:

Macro

Valeur

$SERVICEOUTPUT$

DISK OK - free space: / 3326 MB (56%);

$SERVICEPERFDATA$

/=2643MB;5948;5958;0;5968 /boot=68MB;88;93;0;98 /home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980

$LONGSERVICEOUTPUT$

/ 15272 MB (77%);\n/boot 68 MB (69%);\n/var/log 819 MB (84%);

Dans le cas de plusieurs lignes en sortie, vous disposez des options suivantes pour retourner les données de performance:

  • Vous pouvez choisir de ne pas retourner de données de performance

  • Vous pouvez retourner des données de performances seulement sur la première ligne

  • Vous pouvez retourner des données de performance seulement sur les lignes suivantes (après la première)

  • Vous pouvez retourner des données de performance aussi bien sur la première ligne que les suivantes (comme montré si dessous)

Restriction de longueur de message de sortie de plugin

Nagios ne lira que les premiers 4KB des données qui seront retournées par le plugin. Ceci dans le but d'empêcher les plugins à déverser des Mégas ou des Gigas de données à Nagios. Cette limite de 4KB est assez facile à modifier si vous en ressentez le besoin. Il suffit de modifier la valeur de la définition nommée MAX_PLUGIN_OUTPUT_LENGTH dans le fichier include/nagios.h.in du code source et de recompiler Nagios. Il n'y a rien d'autre à faire!

Exemples

Si vous êtes à la recherche d'exemples de plugins à étudier, Je vous recommande de télécharger les plugins officiels Nagios et de jeter un œil sur les différents scripts des plugins en C, Perl ou encore Shell. Des information sur l'obtention des plugins Nagios officiels peuvent être trouvées ici.

Plugins Perl

Nagios peut utiliser en option un interpréteur Perl intégré qui peut accélérer l'exécution des plugins codés en Perl. Plus d'informations sur le développement des plugins en Perl utilisant l'interpréteur Perl intégré disponibles ici.