Announcement

Collapse
No announcement yet.

"Executed Check Command Line" OK mais plugin renvoi No output returned from plugin

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

  • "Executed Check Command Line" OK mais plugin renvoi No output returned from plugin

    Bonjour,

    Je viens de développer un petit plugin pour monitorer quelques valeurs de base pour des onduleurs, mais visiblement quelque chose cloche.

    - quand je l’exécute en ligne de commande OK (Avec le user Nagios ou centreon)
    Retour: Tout est OK ! Batterie onduleur en % 97

    - quand je l'exécute avec "Argument Example" dans la création/modification de commande OK
    {"data-align":"none","data-size":"full","title":"1536152263-test-commande-centreon.jpg","data-attachmentid":153457}

    - quand je regarde la "Executed Check Command Line" dans les services détails de mon host monitoré j'ai la commande qui s'affiche bien.
    /usr/lib/nagios/plugins/check_onduleur.pl X.X.X.X com_snmp

    Mais sur mon monitoring j'ai un (No output returned from plugin), et je ne comprends pas pourquoi.

    Voici mon plugin en question:

    Code:
    #! /usr/bin/perl -W
    
    ##upsBasicStateOutputState (ro) .1.3.6.1.4.1.318.1.1.1.11.1.1
    #Retour:    .1.3.6.1.4.1.318.1.1.1.11.1.1.0 = STRING: "0001010000000000001000000000000000000000000000000000000000000000"
    #     Flag 1: Abnormal Condition Present
    #     Flag 2: On Battery
    #
    ##upsAdvBatteryRunTimeRemaining (ro) .1.3.6.1.4.1.318.1.1.1.2.2.3
    #Retour:    .1.3.6.1.4.1.318.1.1.1.2.2.3.0 = Timeticks: (262500) 0:43:45.00
    #Valeur = temps restant sur batterie
    #
    ##upsBasicBatteryTimeOnBattery (ro) .1.3.6.1.4.1.318.1.1.1.2.1.2
    #Retour:    inconnue, s'affiche uniquement quand l'onduleur est sur batterie ?
    #
    #upsAdvBatteryCapacity (ro) .1.3.6.1.4.1.318.1.1.1.2.2.1
    #Retour:    .1.3.6.1.4.1.318.1.1.1.2.2.1.0 = Gauge32: 100
    
    use warnings;
    
    my $num_args= $#ARGV + 1;
    if($num_args != 2){
        print "\nUsage: ./onduleur.pl \@IP Community \n";
        exit;
    }
    
    my $COM=$ARGV[1];
    my $IP=$ARGV[0];
    
    #$1=SNMP Community / $2=IP@ host
        # On test dabord si la commande fonctionne et que l'hote distant répond
        my $OnduleurStatus = 'snmpwalk '.$IP.' -v 1 -c '.$COM.' 1.3.6.1.4.1.318.1.1.1.11.1.1 2>&1 | grep "Timeout"';
        system "$OnduleurStatus";
        if($? == 0) {
            print "Timeout:: host unreachable ? \n";
            exit 3;
        }
    
        ################################# Recup des flags #################################
        # Ensuite il faut voir si un état anormale est présent sur l'onduleur. Pour cela on récupère les flags !
        my $OnduleurFlag = 'snmpwalk '.$IP.' -v 1 -c '.$COM.' 1.3.6.1.4.1.318.1.1.1.11.1.1';
        # On récupère le resultat du snmpwalk
        my $resultat = qx($OnduleurFlag);
        # On éclate le resultat pour récupérer uniquement les flags (suite de 0 et 1)
        my @res_split = split(/"/, $resultat);
        # le résultat du split est sensé ressembler à ça:
        #$res_split[0] < .1.3.6.1.4.1.318.1.1.1.11.1.1.0 = STRING: > puis $res_split[1] < 0001010000000000001000000000000000000000000000000000000000000000 > puis $res_split[2] < >
        my $res = $res_split[1];
        # On peut fixer des valeurs pour tester
        #my $res = "0001010000000000001000000000000000000000000000000000000000000000";
        # Ensuite on découpe nos flags 1 par 1
        my @FlagsTab = split(//, $res);
        # Flag 1: Abnormal Condition Present
        my $Flag1 = $FlagsTab[0];
        # Flag 2: On Battery
        my $Flag2 = $FlagsTab[1];
        # Replace Battery
        my $Flag5 = $FlagsTab[4];
        ###################################################################################
    
        # On test une condition anormale avec le flag 1
        if($Flag1 == 0) {
            #L'onduleur est OK
            # On affiche le % de charge de l'onduleur
            my $OnduleurBatCap = 'snmpwalk '.$IP.' -v 1 -c '.$COM.' 1.3.6.1.4.1.318.1.1.1.2.2.1';
            my $resultat2 = qx($OnduleurBatCap);
            my @res_split2 = split(/:/, $resultat2);
            my $res2 = $res_split2[3];
            print "Tout est OK ! Batterie onduleur en % $res2";
            exit 0;
        } else {
        # L'onduleur n'est pas OK /!\
            #On test si l'onduleur est sur batterie avec le flag 2
            if($Flag2 == 0){
            # L'onduleur n'est pas sur batterie, mais quelque chose ne vas pas.
                if($Flag5 == 0){
                    # La batterie est bonne
                    print "L'onduleur repport un état anormale mais pas de coupure électrique voir pour plus d information https:// $IP \n";
                    exit 1;
                } else {
                    print "L'onduleur indique qu'il faut changer la batterie. \n";
                    exit 1;                
                }
            } else {
                # L'onduleur est sur batterie, une coupure de courant est en cours ou un autre problème d'alimentation electrique !
                # On effectue d'autre snmpwalk pour avoir le temps restant sur batterie!
                my $OnduleurRunTimeRemaining = 'snmpwalk '.$IP.' -v 1 -c '.$COM.' 1.3.6.1.4.1.318.1.1.1.2.2.3';
                system "$OnduleurRunTimeRemaining";
                exit 2;
            }
        }
    
    __END__

    Si quelqu'un à une idée je suis preneur.
    Last edited by LaBanane; 5th September 2018, 15:59.

  • #2
    Bon j'ai pas mal cherché et j'ai vérifié d'autre point.

    Mon plugin est en centreon:centreon (owner:group). avec des droits en 775.
    Quand je test ma commande: sudo -u centreon-engine /usr/lib/nagios/plugins/check_onduleur.pl X.X.X.X comSNMP
    Le retour est OK: Tout est OK. Batterie onduleur en pourcentage 100
    Le echo $? retourne 0 ou 1 ou 2 ou 3 en fonction de mon exit.

    Mais j'ai tjs un retour: (No output returned from plugin) et le service reste tjs en vert quoi qu'il arrive.

    Donc je ne comprends pas. J'avais déjà fait des scripts simple sur Nagios je n'avais pas eu ce problème.

    Voila donc quelqu'un avec une idée passe par la ...

    Cordialement,

    Comment


    • #3
      he ben on peut dire qu'il est actif se forum .....
      Bon j'ai résolue mon problème, je suis passé du perl au shell et ... hop ça fonctionne !

      Voici la même mais en shell:
      Code:
      #! /bin/sh
      ##upsBasicStateOutputState (ro) .1.3.6.1.4.1.318.1.1.1.11.1.1
      #Retour:    .1.3.6.1.4.1.318.1.1.1.11.1.1.0 = STRING: "0001010000000000001000000000000000000000000000000000000000000000"
      #     Flag 1: Abnormal Condition Present
      #     Flag 2: On Battery
      #
      ##upsAdvBatteryRunTimeRemaining (ro) .1.3.6.1.4.1.318.1.1.1.2.2.3
      #Retour:    .1.3.6.1.4.1.318.1.1.1.2.2.3.0 = Timeticks: (262500) 0:43:45.00
      #Valeur = temps restant sur batterie
      #
      ##upsBasicBatteryTimeOnBattery (ro) .1.3.6.1.4.1.318.1.1.1.2.1.2
      #Retour:    inconnue, s'affiche uniquement quand l'onduleur est sur batterie ?
      #
      #upsAdvBatteryCapacity (ro) .1.3.6.1.4.1.318.1.1.1.2.2.1
      #Retour:    .1.3.6.1.4.1.318.1.1.1.2.2.1.0 = Gauge32: 100
      
      STATE_OK=0
      STATE_WARNING=1
      STATE_CRITICAL=2
      STATE_UNKNOWN=3
      
      num_args=$#
      if [ $num_args -ne 2 ]; then
          echo "Usage: ./onduleur.pl \@IP Community"
          exit
      fi
      
      COM=$2
      IP=$1
      
      # On test dabord si la commande fonctionne et que l'hote distant répond
      TestTimeout=$(snmpwalk $IP -v 1 -c $COM 1.3.6.1.4.1.318.1.1.1.11.1.1 2>&1 | grep "Timeout")
      if [ $? -eq 0 ]; then
          echo "Timeout:: host unreachable ? "
          exit $STATE_UNKNOWN
      fi
      
      ################################# Recup des flags #################################
      # Ensuite il faut voir si un état anormale est présent sur l'onduleur. Pour cela on récupère les flags !
      OnduleurFlag=$(snmpwalk $IP -v 1 -c $COM 1.3.6.1.4.1.318.1.1.1.11.1.1)
      # On éclate le resultat pour récupérer uniquement les flags (suite de 0 et 1)
      res="$(echo $OnduleurFlag | cut -d\" -f 2)"
      # On peut fixer des valeurs pour tester
      #$res = "0001010000000000001000000000000000000000000000000000000000000000"
      
      # Ensuite on découpe nos flags 1 par 1
      # Flag 1: Abnormal Condition Present
      Flag1=${res:0:1}
      # Flag 2: On Battery
      Flag2=${res:1:1}
      # Replace Battery
      Flag5=${res:4:1}
      ###################################################################################
      
      # On test une condition anormale avec le flag 1
      if [ "$Flag1" = "0" ]; then
          #L'onduleur est OK
          # On affiche le % de charge de l'onduleur
          OnduleurBatCap=$(snmpwalk $IP -v 1 -c $COM 1.3.6.1.4.1.318.1.1.1.2.2.1)
          res2=$(echo $OnduleurBatCap | cut -d: -f 4)
          echo "Tout est OK. Batterie onduleur $res2 %"
          exit $STATE_OK
      else
      # L'onduleur n'est pas OK /!\
          #On test si l'onduleur est sur batterie avec le flag 2
          if [ "$Flag2" = "0" ]; then
          # L'onduleur n'est pas sur batterie, mais quelque chose ne vas pas.
              if [ "$Flag5" = "0" ]; then
                  # La batterie est bonne
                  echo "L'onduleur repport un état anormale mais pas de coupure électrique voir pour plus d information http://$IP "
                  exit $STATE_WARNING
              else
                  echo "L'onduleur indique qu'il faut changer la batterie."
                  exit $STATE_WARNING                
              fi
          else
              # L'onduleur est sur batterie, une coupure de courant est en cours ou un autre problème d'alimentation electrique !
              # On effectue d'autre snmpwalk pour avoir le temps restant sur batterie!
              OnduleurRunTimeRemaining=$(snmpwalk $IP -v 1 -c $COM 1.3.6.1.4.1.318.1.1.1.2.2.3)
              echo $OnduleurRunTimeRemaining | cut -d")" -f 2
              exit $STATE_CRITICAL
          fi
      fi

      Comment


      • #4

        Hello I am new with Nagios and Centreon environments.

        I'm having a problem similar to yours, wanting to execute a command of my own on a service assigned to a Host, it goes gray and I get the error "No output returned from plugin" But if I consult from an external console with "watch -n 5 snmpget" I get the correct answer.

        I wanted to open a new topic in the forum but I can not find the option. Could you help me please?


        Goodbye, sorry for the inconvenience.

        Comment

        Working...
        X