Announcement

Collapse
No announcement yet.

Statut de services avec check_nt

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statut de services avec check_nt

    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

  • #2
    Nagios n'interprète pas l'output mais le code de sortie.

    Comment


    • #3
      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?

      Comment


      • #4
        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.

        Comment


        • #5
          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 :
          Code:
          #!/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 :
          Code:
          [[email protected] plugins]# touch SORTIES
          [[email protected] 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;
          [[email protected] plugins]# cat SORTIES
          [[email protected] 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.
          Last edited by kharfud; 18 July 2007, 15:05.

          Comment


          • #6
            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 :
            Code:
            #!/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 ?

            Comment

            Working...
            X