PDA

View Full Version : Statut de services avec check_nt


kharfud
07-18-2007, 11:28 AM
Bonjour bande d'Oreonistes !
Je me demandais s'il existait un moyen simple d'interpréter l'output de check_nt pour qu'Oreon puisse reconnaître le bon statut de chaque check_nt. Pour le moment j'utilise l'équivalent du script service_submit_check_result, qui attend de trouver dans l"output les mots clés OK, WARNING ou CRITICAL. Or check_nt ne renvoie pas ces mots dans sa chaine de caractères.

J'ai des idées (modifier le code source de check_nt par exemple) mais il me faudrait idéalement une solution rapide. Je manque de temps.

Merci d'avance !

Kharf

near
07-18-2007, 12:30 PM
Nagios n'interprète pas l'output mais le code de sortie.

kharfud
07-18-2007, 03:12 PM
J'ai fait un lapsus, désolé.
Mais ca ne m'avance pas beaucoup de faire de la sémantique :|
Il reste que le script ne fait que rechercher les mots OK WARNING et CRITICAL dans la chaine renvoyée par le check. Que fait-on dans le cas d'un check (check_nt en l'occurrence) qui ne fournit pas ce genre de chaine?

near
07-18-2007, 03:20 PM
Au risque de me répèter, Nagios n'interprète pas l'output mais le code de sortie :)

Un peu de théorie s'impose : http://fr.wikipedia.org/wiki/Flux_standard

Maintenant que tu sais ça, Nagios renvoit 0 (OK), 1 (Warning), 2 (Critical) dans le stderr de mémoire.

kharfud
07-18-2007, 03:38 PM
Ouais.... les codes de sortie des programmes... pas bête.
Sauf que..... voici le plugin utilisé par NSCA pour récupérer les états de check :
#!/bin/sh
:# Arguments:
:# $1 = host_name (Short name of host that the service is
:# associated with)
:# $2 = svc_description (Description of the service)
:# $3 = state_string (A string representing the status of
:# the given service - "OK", "WARNING", "CRITICAL"
:# or "UNKNOWN")
:# $4 = plugin_output (A text string that should be used
:# as the plugin output for the service checks)
:#
:# Convert the state string to the corresponding return code
:return_code=-1
:case "$3" in
OK)
return_code=0
;;
WARNING)
return_code=1
;;
CRITICAL)
return_code=2
;;
UNKNOWN)
return_code=-1
;;
esac

1. pipe the service check info into the send_nsca program, which
2. in turn transmits the data to the nsca daemon on the central
3. monitoring server
/bin/echo -e "$1\t$2\t$return_code\t$4\n" | /usr/local/nagios/etc/send_nsca @ipserveur-centrale -c /usr/local/nagios/var/send_nsca.cfg

Ici le code de sortie est recréé manuellement a partir de la chaine retournée par le check.
C'est pas surprenant ca?
Quand tu dis que "nagios" renvoie les codes correspndants, tu parles des checks n'est-ce pas? (je n'aime pas parler de "nagios" a tout bout de chant, on ne sais plus de quoi on parle a la longue.. "nagios" ca ne veut pas dire grand chose).
Et ta réponse entre les lignes serait donc : "modifie le script pour récupérer le code sur la sortie d'erreur du check et non a partir de la chaine de caractères du check". J'ai bon ?
OK, donc je teste ceci :
[root@parefeu plugins]# touch SORTIES
[root@parefeu plugins]# ./check_load -w 15,10,5 -c 30,25,20 2>SORTIES
OK - load average: 0.00, 0.00, 0.00|load1=0.000;15.000;30.000;0; load5=0.000;10.000;25.000;0; load15=0.000;5.000;20.000;0;
[root@parefeu plugins]# cat SORTIES
[root@parefeu plugins]#

C'est bizarre, les checks de Nagios ne semblent pas renvoyer grand chose sur la sortie d'erreur... C'est peut-etre pour ca qu'on utilise la chaine ???

A moins que je n'aie pas compris de quoi tu parles. Dans ce cas merci de parler plus précisément.

kharfud
07-18-2007, 04:36 PM
Autant pour moi....
J'aurais du me souvenir qu'on utilise $? pour récupérer le code erreur. Du coup j'ai modifié mon script en conséquence :
#!/bin/sh

echo -e "Check_nsca\n\n"
echo -e "Utilisation : ./check_nsca <Nom de l'hote (identique a celui definit dans nagios)> <Nom du service (identique a celui definit dans Nagios)> <check a envoyer (chemin absolu)>\n\n\n"

# Convert the state string to the corresponding return code

$3
return_code=$?

# pipe the service check info into the send_nsca program, which
# in turn transmits the data to the nsca daemon on the central
# monitoring server

/bin/echo -e "$1\t$2\t$return_code\t`$3`\t$5\t$6\n" | /usr/local/nsca/send_nsca -H X.X.X.X -c /usr/local/nsca/send_nsca.cfg -to 20

Ca a l'air de marcher. Vous voyez un inconvénient à cette façon de faire? Comment faites-vous, vous autres ?