PDA

View Full Version : [plugin] traffic total d'un switch


flox
05-23-2007, 02:33 PM
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


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


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

MrBrown
05-24-2007, 03:34 PM
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

flox
05-24-2007, 04:23 PM
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

furtif
05-25-2007, 10:16 AM
Ton probleme est également le mien. Si tu trouves une solution, n'hésite pas :)

flox
05-25-2007, 10:42 AM
Je croit qu'il n'éxiste pas de solution mériacle, il faut développer et c'est pas mon fort ...

flox
05-28-2007, 09:45 AM
Si quelqu'un, sait faire une addition en perl et pourrait adapter le plugin check_graph_traffic.pl sa serait géniale !:D

Merci

flox
06-04-2007, 10:43 AM
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:

#! /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:
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:

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:
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 )

one
06-04-2007, 10:59 AM
Euh, moi je sais que passé 10 secondes d'éxecution, ca ne marche plus chez moi ...

flox
06-04-2007, 11:32 AM
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:

#! /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:
#!/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

furtif
06-08-2007, 01:31 PM
Il me sort que j'ai aucune interfaces ..



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

flox
06-11-2007, 05:41 PM
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:


...
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 +++

furtif
06-12-2007, 04:38 PM
Merci, mais pourrais tu mettre en fichier join le script au complet ? (petit prob avec mon check_graph_traffic ^^