Announcement

Collapse
No announcement yet.

[plugin] traffic total d'un switch

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

  • [plugin] traffic total d'un switch

    Bonjour,
    je souhaiterai pouvoir récupérer le traffic total entrant dans un switch Cisco 3750 et le total sortant via du SNMP.

    Le probleme c'est qu'en observant la mib, je n'est pas trouver d'OID rapportant directement cette valeur il existe les entrées "ifInOctets" qui ramènent le traffic, mais en fonction de chaque port.

    Je pensai me basé sur le plugin check_graph_traffic ou check_graph_snmp_value...

    Ce que j'ai deja trouver:

    $ snmpwalk x.x.x.x -v 2c -c public ifInOctets

    Code:
    IF-MIB::ifInOctets.1 = Counter32: 2901522513
    IF-MIB::ifInOctets.2 = Counter32: 187416500
    IF-MIB::ifInOctets.3 = Counter32: 187416140
    IF-MIB::ifInOctets.4 = Counter32: 187417040
    IF-MIB::ifInOctets.5 = Counter32: 187416080
    IF-MIB::ifInOctets.6 = Counter32: 0
    IF-MIB::ifInOctets.10101 = Counter32: 135588957
    IF-MIB::ifInOctets.10102 = Counter32: 3147295368
    IF-MIB::ifInOctets.10103 = Counter32: 1488356188
    IF-MIB::ifInOctets.10104 = Counter32: 0
    IF-MIB::ifInOctets.10105 = Counter32: 1911296646
    IF-MIB::ifInOctets.10106 = Counter32: 675297704
    IF-MIB::ifInOctets.10107 = Counter32: 73776812
    IF-MIB::ifInOctets.10108 = Counter32: 4249199832
    IF-MIB::ifInOctets.10109 = Counter32: 360590882
    IF-MIB::ifInOctets.10110 = Counter32: 213406018
    IF-MIB::ifInOctets.10111 = Counter32: 999731274
    IF-MIB::ifInOctets.10112 = Counter32: 3592818479
    IF-MIB::ifInOctets.10113 = Counter32: 11905518
    IF-MIB::ifInOctets.10114 = Counter32: 1600976440
    IF-MIB::ifInOctets.10115 = Counter32: 768
    IF-MIB::ifInOctets.10116 = Counter32: 484092041
    IF-MIB::ifInOctets.10117 = Counter32: 2046953276
    IF-MIB::ifInOctets.10118 = Counter32: 0
    IF-MIB::ifInOctets.10119 = Counter32: 0
    IF-MIB::ifInOctets.10120 = Counter32: 542392325
    IF-MIB::ifInOctets.10121 = Counter32: 4213360267
    IF-MIB::ifInOctets.10122 = Counter32: 16355968
    IF-MIB::ifInOctets.10123 = Counter32: 0
    IF-MIB::ifInOctets.10124 = Counter32: 1364913736
    IF-MIB::ifInOctets.10125 = Counter32: 4051392104
    IF-MIB::ifInOctets.10126 = Counter32: 0
    IF-MIB::ifInOctets.10127 = Counter32: 1102503276
    IF-MIB::ifInOctets.10128 = Counter32: 1950811082
    IF-MIB::ifInOctets.14501 = Counter32: 0
    au niveau du plugin: check_graph_traffic voila mes interfaces

    $ ./check_graph_traffic.pl -H x.x.x.x -C public -s
    Code:
    Interface 1 :: Vlan1
    Interface 2 :: Vlan2
    Interface 3 :: Vlan3
    Interface 4 :: Vlan4
    Interface 5 :: Vlan5
    Interface 6 :: Vlan6
    Interface 10101 :: GigabitEthernet1/0/1
    Interface 10102 :: GigabitEthernet1/0/2
    Interface 10103 :: GigabitEthernet1/0/3
    Interface 10104 :: GigabitEthernet1/0/4
    Interface 10105 :: GigabitEthernet1/0/5
    Interface 10106 :: GigabitEthernet1/0/6
    Interface 10107 :: GigabitEthernet1/0/7
    Interface 10108 :: GigabitEthernet1/0/8
    Interface 10109 :: GigabitEthernet1/0/9
    Interface 10110 :: GigabitEthernet1/0/10
    Interface 10111 :: GigabitEthernet1/0/11
    Interface 10112 :: GigabitEthernet1/0/12
    Interface 10113 :: GigabitEthernet1/0/13
    Interface 10114 :: GigabitEthernet1/0/14
    Interface 10115 :: GigabitEthernet1/0/15
    Interface 10116 :: GigabitEthernet1/0/16
    Interface 10117 :: GigabitEthernet1/0/17
    Interface 10118 :: GigabitEthernet1/0/18
    Interface 10119 :: GigabitEthernet1/0/19
    Interface 10120 :: GigabitEthernet1/0/20
    Interface 10121 :: GigabitEthernet1/0/21
    Interface 10122 :: GigabitEthernet1/0/22
    Interface 10123 :: GigabitEthernet1/0/23
    Interface 10124 :: GigabitEthernet1/0/24
    Interface 10125 :: GigabitEthernet1/0/25
    Interface 10126 :: GigabitEthernet1/0/26
    Interface 10127 :: GigabitEthernet1/0/27
    Interface 10128 :: GigabitEthernet1/0/28
    Interface 14501 :: Null0
    Avez vous des idées de comment pouvoir avoir ce traffic total ? existe t il un OID spécifique ? faut t il modifier le plugin pour lui faire additionner tous les ports ?

    Merci de vos réponses
    Last edited by flox; 25 May 2007, 16:40.
    Debian 4.0 Etch / Noyau 2.6

    Oreon 1.4-5 / Nagios 2.6

  • #2
    Le plus simple serait de modifier le plugin check_graph_traffic pour additionner les valeurs de chaque port. Sinon si tu as du temps et du courage , il faudrait chercher dans les mibs proprietaires de cisco systems.
    Un pti' lien qui pourrait t'aider : http://www.oidview.com/mibs/9/md-9-1.html

    Comment


    • #3
      Je pense bien qu'il faudrais modifier le script en perl, mais je ne connait pas du tout ce langage.
      D'autre part cela peut etre plus compliqué si tous les ports du switch ne sont pas utilisé, il faudarais alors prendre en compte uniquement les ports UP...

      Pour une OID spécifique j'ai deja chercher mais je ne trouve rien de concluant
      Debian 4.0 Etch / Noyau 2.6

      Oreon 1.4-5 / Nagios 2.6

      Comment


      • #4
        Ton probleme est également le mien. Si tu trouves une solution, n'hésite pas

        Comment


        • #5
          Je croit qu'il n'éxiste pas de solution mériacle, il faut développer et c'est pas mon fort ...
          Debian 4.0 Etch / Noyau 2.6

          Oreon 1.4-5 / Nagios 2.6

          Comment


          • #6
            Si quelqu'un, sait faire une addition en perl et pourrait adapter le plugin check_graph_traffic.pl sa serait géniale !

            Merci
            Debian 4.0 Etch / Noyau 2.6

            Oreon 1.4-5 / Nagios 2.6

            Comment


            • #7
              Bonjour,
              je vient de réaliser un petit script en shell, afin de calculer le traffic total en se basant sur le plugin check_graph_traffic:

              Code:
              #! /usr/bin/sh -fv
              
              #variables
              host=$1
              com=$2
              vers=$3
              
              in=0
              out=0
              varin=0
              varout=0
              i=0
              j=0
              
              #interfaces up comptabiliser
              snmpwalk $host  -c $com -v $vers Ifoperstatus | grep up | grep -v 14501 | cut -d "." -f2 | cut -d " " -f1 > temp
              
              nb=`more temp | wc -l`
              
              for i in `more temp`  ; do
                      varin=`/usr/share/nagios2/plugins/eventhandlers/check_graph_traffic.pl -H $host -C $com -v $vers -i $i | cut -d " " -f4`
                      in=`sh scriptbc $in+$varin`
              done
              for j in `more temp`  ; do
                      varout=`/usr/share/nagios2/plugins/eventhandlers/check_graph_traffic.pl -H $host -C $com -v $vers -i $j | cut -d " " -f10`
              
                      out=`sh scriptbc $out+$varout`
              done
              
              #conversion en Mo
              out=`sh scriptbc $out/100`
              in=`sh scriptbc $in/100`
              
              
              echo OK: Traffic total des $nb interfaces du switch $host IN: $in Mo/s OUT: $out Mo/s TOTAL IN/OUT: `sh scriptbc $out+$in` Mo/s
              
              rm temp
              exit 0

              test en ligne de commande:
              Code:
              sh ./check_switch_total x.x.x.x public 2c
              OK: Traffic total des 29 interfaces du switch sd21 IN: 39.47 Mo/s OUT: 27.93 Mo/s TOTAL IN/OUT: 67.40 Mo/s
              -> Temps d'execution 12 secondes !!, mais sa marche

              Mon problème est avec Oreon, en fait il ne me remonte aucune valeurs:

              Code:
              OK: Traffic total des 0 interfaces du switch x.x.x.x IN: Mo/s OUT: Mo/s TOTAL IN/OUT: Mo/s

              Intégration à Oreon

              command check_switch_total:
              Code:
              sh $USER1$/check_switch_total $HOSTADDRESS$ $ARG1$ $ARG2$
              les parametres sont bon !

              Le problème viendrait il du temps d'éxécution trop long?

              Merci de vos réponses

              Ps( je suis pas très doué en prog lol )
              Debian 4.0 Etch / Noyau 2.6

              Oreon 1.4-5 / Nagios 2.6

              Comment


              • #8
                Euh, moi je sais que passé 10 secondes d'éxecution, ca ne marche plus chez moi ...

                Comment


                • #9
                  Je vient de trouver l'erreur et sa marche (12 secondes de calcul):

                  Erreur toute bête je me base sur un script pour le calcul avec virgule "scriptbc", et oreon n'aimait pas qu'il n'est pas de chemin absolu !

                  Voila le script modifié si cela interesse quelqu'un cela fonctionne pour des switchs cisco !

                  il se base sur deux script a avoir absoluement check_graph_traffic et scriptbc

                  check_total_switch:
                  Code:
                  #! /usr/bin/sh -fv
                  
                  #variables
                  host=$1
                  com=$2
                  vers=$3
                  warning=$4
                  critical=$5
                  
                  #Chemin des plugins
                  rep=/usr/share/nagios2/plugins/eventhandlers
                  
                  in=0
                  out=0
                  varin=0
                  varout=0
                  i=0
                  j=0
                  
                  
                  #interfaces up comptabiliser
                  
                  
                  nb=`snmpwalk $host  -c $com -v $vers Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1 | wc -l`
                  
                  
                  for i in `snmpwalk $host  -c $com -v $vers Ifoperstatus | grep up | grep -v 101 | cut -d "." -f2 | cut -d " " -f1`  ; do
                          varin=`$rep/check_graph_traffic.pl -H $host -C $com -v $vers -i $i | cut -d " " -f4`
                  
                          in=`sh $rep/scriptbc $in+$varin`
                  
                  
                  done
                  for j in `snmpwalk $host  -c $com -v $vers Ifoperstatus | grep up | grep -v 101 | cut -d "." -f2 | cut -d " " -f1`  ; do
                          varout=`$rep/check_graph_traffic.pl -H $host -C $com -v $vers -i $j | cut -d " " -f10`
                  
                          out=`sh $rep/scriptbc $out+$varout`
                  done
                  
                  #conversion en Mo
                  out=`sh $rep/scriptbc $out/100`
                  in=`sh $rep/scriptbc $in/100`
                  
                  echo OK: Traffic total des $nb interfaces du switch $host IN: $in Mo/s OUT: $out Mo/s TOTAL IN/OUT: `sh $rep/scriptbc $out+$in` Mo/s
                  
                  exit 0
                  scriptbc:
                  Code:
                  #!/bin/sh
                  # scriptbc - Enveloppant pour 'bc' qui renvoie le réltat d'un calcul.
                  
                  if [ $# -eq 0 ]; then
                     echo "SYNTAXE: $(basename $0) <valeur-opéteur-valeur>" >&2
                        echo "ou $(basename $0) [-p] [X] <valeur-opéteur-valeur>" >&2
                           echo "où signifie le nombre de démales" >&2
                              echo "Exemples: $(basename $0) 35/6" >&2
                                 echo "ou $(basename $0) -p 4 35.4\*0.215" >&2
                                 fi
                  
                                 if [ $1 = "-p" ]; then
                                    precision=$2
                                       shift 2
                                       else
                                          precision=2  # valeur par déut
                                          fi
                  
                                          bc -q << EOF
                                          scale=$precision
                                          $*
                                          quit
                                          EOF
                  Last edited by flox; 4 June 2007, 12:11.
                  Debian 4.0 Etch / Noyau 2.6

                  Oreon 1.4-5 / Nagios 2.6

                  Comment


                  • #10
                    Il me sort que j'ai aucune interfaces ..

                    Code:
                    OK: Traffic total des 0 interfaces du switch 193.34.16.246 IN: Mo/s OUT: 27.98 M             o/s TOTAL IN/OUT: Mo/s
                    Tu sais d'ou sa peut venir ? Et puis 27 Mo/s c'est un peu boc ^^ pour du 100Mbit
                    Last edited by furtif; 8 June 2007, 13:44.

                    Comment


                    • #11
                      Pour ceux que sa intéresse voila le plugin check_graph_traffic.pl adapté, pour avoir le total de la bande passante (compatible uniquement avec les swtichs Cisco), le gros intèrêt c'est de pouvoir grapher les valeurs.


                      Le code modifier:

                      Code:
                      ...
                      use vars qw($opt_V $opt_h $opt_g $opt_v $opt_C $opt_b $opt_H $opt_D $opt_i $opt_n $opt_w $opt_c $opt_s $opt_S $opt_T $opt_step $step $VAR $varin $total $varout $total2 $VAR2);
                      
                      ...
                      ######  Get IN bytes
                      
                      my $in_bits;
                      my $result = $session->get_request(-varbindlist => [$OID_IN]);
                      if (!defined($result)) {
                          printf("ERROR: IN Bits :  %s", $session->error);
                          if ($opt_n) { print " - You must specify interface name when option -n is used";}
                          print ".\n";
                          $session->close;
                          exit $ERRORS{'UNKNOWN'};
                      }
                      #$in_bits =  $result->{$OID_IN} * 8;
                      
                      
                      ##########################################################################################
                      ##########################################################################################
                      $total=0;
                      foreach $VAR (`snmpwalk $opt_H  -c $opt_C -v $opt_v Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`) {
                             $varin = `snmpwalk $opt_H -c $opt_C -v $opt_v ifInOctets.$VAR`;
                             $varin =~ s/.*:\s*//;
                             $total=$total+$varin;
                              }
                             $in_bits = $total * 8;
                      ##########################################################################################
                      ##########################################################################################
                      
                      
                      
                      #######  Get OUT bytes
                      
                      my $out_bits;
                      $result = $session->get_request(-varbindlist => [$OID_OUT]);
                      if (!defined($result)) {
                          printf("ERROR: Out Bits : %s", $session->error);
                          if ($opt_n) { print " - You must specify interface name when option -n is used";}
                          print ".\n";
                          $session->close;
                          exit $ERRORS{'UNKNOWN'};
                      }
                      #$out_bits = $result->{$OID_OUT} * 8;
                      
                      
                      
                      ##########################################################################################
                      ##########################################################################################
                      $total2=0;
                      foreach $VAR2 (`snmpwalk $opt_H  -c $opt_C -v $opt_v Ifoperstatus | grep up | grep 101 | cut -d "." -f2 | cut -d " " -f1`) {
                             $varout = `snmpwalk $opt_H -c $opt_C -v $opt_v ifOutOctets.$VAR2`;
                             $varout =~ s/.*:\s*//;
                             $total2=$total2+$varout;
                             }
                             $out_bits = $total2 * 8;
                      ##########################################################################################
                      ##########################################################################################
                      
                      ...
                      Modification de la ligne 220 à 260 du script

                      voila +++
                      Debian 4.0 Etch / Noyau 2.6

                      Oreon 1.4-5 / Nagios 2.6

                      Comment


                      • #12
                        Merci, mais pourrais tu mettre en fichier join le script au complet ? (petit prob avec mon check_graph_traffic ^^

                        Comment

                        Working...
                        X