Juil
21
2010

[Nagios] Visualiser la commande exécutée par Nagios


J’ai passé la journée à rechercher pourquoi mon event handler ne voulait pas fonctionner. J’avais l’impression que certaines macros ne fonctionnaient pas. Mais sur Nagios, comment pouvons nous voir la commande qu’il exécute avec les valeurs des arguments?

Et bien, la solution est ici : http://www.waggy.at/nagios/capture_plugin.htm

Sur ce site, vous allez trouvez un plugin perl qui est téléchargeable ici : http://www.waggy.at/nagios/capture_plugin.txt

 

Installation et configuration du plugin

 

Vous pouvez le placer avec vos autres plugins, le renommer en capture_plugin.pl et lui donner les bons droits.

L’emplacement du fichier log est défini dans cette variable :

my $LOG_FILE = « /tmp/captured-plugins.log »;

 

Utilisation du plugin

 

Si la commande que vous voulez debugger est la suivante :

$USER1$/check_nrpe -H $HOSTADDRESS$ -c restart_service -a $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ « $ARG1$ »

Il vous suffi de la modifier en ajoutant le plugin comme ceci :

$USER1$/capture_plugin.pl $USER1$/check_nrpe -H $HOSTADDRESS$ -c restart_service -a $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ « $ARG1$ »

Voilà, il ne vous reste plus qu’à tester et vérifier que votre commande est bien lancée dans le fichier log.

Exemple de fichier log :

 

Voici un exemple de log :

2010-6-21 16:32:29 —— debugging
cmd=[/usr/lib/nagios/plugins/check_nrpe ‘-H’ ‘192.168.0.1’ ‘-c’ ‘restart_service’ ‘-a’ ‘OK’ ‘HARD’ ‘4’ ‘mon service’]
output=[Restarting mon service (3rd soft critical state)
]
retcode=0

  • cmd –> Commande lancée par Nagios
  • output –> retour de la commande check_nrpe
  • retcode –> Code retour de la commande check_nrpe

Si vous avez d’autres solutions, n’hésitez pas 😉 J’ai essayé le mode debug, mais ça n’a pas trop fonctionné. En même temps, j’ai pas cherché beaucoup…

 

Code Sources :

 

Au cas où, je mets la source :

#!/usr/bin/perl -w
#
# Written 2007-03-24 by Wolfgang Wagner (aka wolle)
#
# $id: capture_plugin.pl v1.0
#
# Captures stdout&stderr in a file and returns orginial results to Nagios (http://www.nagios.org)
#
# Copyright 2007 by Wolfgang Wagner. All rights reserved.
#
# This software is licensed under the terms of the GNU General Public License Version 2 
# as published by the Free Software Foundation.
# It is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE WARRANTY OF DESIGN, 
# MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE.
#
# Check out http://www.waggy.at for possible future versions.
#

use strict;

# This plugin does not need any nagios utils. It just interfaces the original plugin.

my $LOG_FILE = "/tmp/captured-plugins.log";

my ($cmd, $ret_code, $output);
# First display all arguments
my ($numArgs, $argnum);
$numArgs = $#ARGV + 1;

# create the command-line

$cmd = $ARGV[0];
foreach $argnum (1 .. $#ARGV) {
  $cmd = $cmd . " '" . $ARGV[$argnum] . "'"
}

# prepare debug-output
# ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset, $dayOfWeek, $dayOfYear, $daylightSavings) = localtime(time);
my ($second, $minute, $hour, $dayOfMonth, $month, $yearOffset) = localtime(time);
my $year = 1900 + $yearOffset;
my $theTime = " $year-$month-$dayOfMonth $hour:$minute:$second";
# now execute the command

$output = `$cmd 2>&1`;
$ret_code = $?>>8;

# log the start, output, retcode & end

my $LogFile;
# open could be better: check success later; if unsuccessful return UNKNWON to Nagios
open (LogFile, ">>$LOG_FILE") || die ("Cannot open logfile");
print LogFile "$theTime ------ debugging\ncmd=[$cmd]\noutput=[$output]\nretcode=$ret_code\n-------\n";
close(LogFile);
# avoid access problems for others.
chmod 0777, $LOG_FILE;

# now return the original resutlt to Nagios
print $output;
exit "$ret_code";

Articles similaires

Au sujet de l'auteur: Olivier Legras

Auteur de ce Blog, je partage quelques unes de mes notes que je juge utile à vous comme à moi. Je suis très heureux de voir que mon blog a de plus en plus d'affluence. Merci à vous!

2 Comments + Add Comment

Laissez un commentaire



Je soutiens

Publicité :)

Mes derniers tweets