Table des matières
Si vous cherchez à écrire vos propres plugins pour Nagios, soyez sûrs d'avoir visiter ces autres ressources:
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.
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.
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.
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 |
---|---|
DISK OK - free space: / 3326 MB (56%); |
|
/=2643MB;5948;5958;0;5968 /boot=68MB;88;93;0;98 /home=69357MB;253404;253409;0;253414 /var/log=818MB;970;975;0;980 |
|
/ 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)
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!
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.
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.