PDA

View Full Version : comment superviser le traffic de switch HP


Cajiss
09-07-2007, 06:17 PM
j'ai nagios 2.9 et centréon 1.4.1 qui tournent sur une débian etch avec les plugins 1.4.9.

je cherche un moyen de grapher l'évolution du traffic sur mes switchs.

j'ai essayer avec les plugins fournis d'origine, mais rien de concluant. J'ai souvent (no output!) comme avec check_centréon_traffic qui utilise check_centreon_snmp_traffic.

je viens de tester check_snmp_int, il me donne une information de ce type : Usage: /usr/local/nagios/libexec/check_snmp_int [-v] -H -C [-2], et après avoir modifié plusieurs valeurs, je crois bien que ce plugin est prévu pour des interfaces pc et non des switchs...?

j'ai actuellement un début de graph en utilisant check_snmp avec une oid de la mib2(pointant sur l'interface 1 du switch) qui me donne des valeurs warning car j'ai mis volontairement un seuil très bas, mais ce n'est pas le but.

j'aimerais savoir comment vous faites et ce que vous utilisez pour superviser des switchs HP au niveau du traffic réseau.

j'aimerais naturellement pouvoir avoir le traffic de l'ensemble des ports du switchs et non le traffic un par un comme je l'ai vu sur quelques posts, car j'ai une trentaine de switchs de 24 ports mini à superviser.

merci d'avance

un centréoniste débutant

julien60
09-10-2007, 09:48 AM
Bonjour à toi,
Pour ma part je supervise mes switchs HP (2524 et 2626) avec le check centreon, c'est à dire le check_centreon_traffic et cela fonctionne très bien. As-tu essayer d'executer le check en ligne de commande ? Mes arguments pour superviser chaque ports sont les suivants avec en exemple le port 1 (le numero du port est le premier argument) : !1!80!90!public!1

Cajiss
09-10-2007, 02:48 PM
j'ai également la command check_centreon_traffic, mais elle fait appelle au plugin check_centreon_snmp_traffic dont voici le début du contenu : (histoire de voir si c'est le même que le tien ou pas)

#! /usr/bin/perl -w
################################################## #################
# Oreon is developped with GPL Licence 2.0
#
# GPL License: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
#
# Developped by : Julien Mathis - Romain Le Merlus
# Christophe Coraboeuf - Sugumaran Mathavarajan
#
################################################## #################
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# For information : contact@merethis.com
################################################## ##################
#
# Script init
#

use strict;
use Net::SNMP qw(:snmp oid_lex_sort);
use FindBin;
use lib "$FindBin::Bin";
use lib "/usr/local/nagios/libexec";
use utils qw($TIMEOUT %ERRORS &print_revision &support);
if (eval "require oreon" ) {
use oreon qw(get_parameters);
use vars qw(%oreon);
%oreon=get_parameters();
} else {
print "Unable to load oreon perl module\n";
exit $ERRORS{'UNKNOWN'};
}
use vars qw($PROGNAME);
use Getopt::Long;
use vars qw($opt_V $opt_h $opt_v $opt_C $opt_b $opt_k $opt_u $opt_p $opt_H $opt_D $opt_i $opt_n $opt_w $opt_c $opt_s $opt_T);

# Plugin var init

my($proc, $proc_run, @test, $row, @laste_values, $last_check_time, $last_in_bits, $last_out_bits, @last_values, $update_time, $db_file, $in_traffic, $out_traffic, $in_usage, $out_usage);

$PROGNAME = "$0";
sub print_help ();
sub print_usage ();

Getopt::Long::Configure('bundling');
GetOptions
("h" => \$opt_h, "help" => \$opt_h,
"u=s" => \$opt_u, "username=s" => \$opt_u,
"p=s" => \$opt_p, "password=s" => \$opt_p,
"k=s" => \$opt_k, "key=s" => \$opt_k,
"s" => \$opt_s, "show" => \$opt_s,
"V" => \$opt_V, "version" => \$opt_V,
"i=s" => \$opt_i, "interface=s" => \$opt_i,
"n" => \$opt_n, "name" => \$opt_n,
"v=s" => \$opt_v, "snmp=s" => \$opt_v,
"C=s" => \$opt_C, "community=s" => \$opt_C,
"b=s" => \$opt_b, "bps=s" => \$opt_b,
"w=s" => \$opt_w, "warning=s" => \$opt_w,
"c=s" => \$opt_c, "critical=s" => \$opt_c,
"T=s" => \$opt_T,
"H=s" => \$opt_H, "hostname=s" => \$opt_H);

if ($opt_V) {
print_revision($PROGNAME,'$Revision: 1.2 $');
exit $ERRORS{'OK'};
}

if ($opt_h) {
print_help();
exit $ERRORS{'OK'};

Getopt::Long::Configure('bundling');
}

##################################################
##### Verify Options
##

if (!$opt_H) {
print_usage();
exit $ERRORS{'OK'};
}
my $snmp = "1";
if ($opt_v && $opt_v =~ /^[0-9]$/) {
$snmp = $opt_v;
}

if ($snmp eq "3") {
if (!$opt_u) {
print "Option -u (--username) is required for snmpV3\n";
exit $ERRORS{'OK'};
}
if (!$opt_p && !$opt_k) {
print "Option -k (--key) or -p (--password) is required for snmpV3\n";
exit $ERRORS{'OK'};
}elsif ($opt_p && $opt_k) {
print "Only option -k (--key) or -p (--password) is needed for snmpV3\n";
exit $ERRORS{'OK'};
}
}

if ($opt_n && !$opt_i) {
print "Option -n (--name) need option -i (--interface)\n";
exit $ERRORS{'UNKNOWN'};
}

if (!$opt_C) {
$opt_C = "public";
}

if (!$opt_i) {
$opt_i = 2;
}

if (!$opt_b) {
$opt_b = 95;
}

if ($opt_b =~ /([0-9]+)/) {
my $bps = $1;
}
my $critical = 95;
if ($opt_c && $opt_c =~ /[0-9]+/) {
$critical = $opt_c;
}
my $warning = 80;
if ($opt_w && $opt_w =~ /[0-9]+/) {
$warning = $opt_w;
}
my $interface = 0;
if ($opt_i =~ /([0-9]+)/ && !$opt_n){
$interface = $1;
} elsif (!$opt_n) {
print "Unknown -i number expected... or it doesn't exist, try another interface - number\n";
exit $ERRORS{'UNKNOWN'};
}

if ($critical <= $warning){
print "(--crit) must be superior to (--warn)";
print_usage();
exit $ERRORS{'OK'};
}

#################################################
##### Plugin snmp requests
##

my $OID_DESC =$oreon{MIB2}{IF_DESC};
my $OID_OPERSTATUS =$oreon{MIB2}{IF_OPERSTATUS};
my @operstatus = ("up","down","testing", "unknown", "dormant", "notPresent", "lowerLayerDown");

# create a SNMP session
my ($session, $error);
if ($snmp eq "1" || $snmp eq "2") {
($session, $error) = Net::SNMP->session(-hostname => $opt_H, -community => $opt_C, -version => $snmp);
if (!defined($session)) {
print("UNKNOWN: SNMP Session : $error\n");
exit $ERRORS{'UNKNOWN'};
}
}elsif ($opt_k) {
($session, $error) = Net::SNMP->session(-hostname => $opt_H, -version => $snmp, -username => $opt_u, -authkey => $opt_k);
if (!defined($session)) {
print("UNKNOWN: SNMP Session : $error\n");
exit $ERRORS{'UNKNOWN'};
}
}elsif ($opt_p) {
($session, $error) = Net::SNMP->session(-hostname => $opt_H, -version => $snmp, -username => $opt_u, -authpassword => $opt_p);
if (!defined($session)) {
print("UNKNOWN: SNMP Session : $error\n");
exit $ERRORS{'UNKNOWN'};
}
}

#getting interface using its name instead of its oid index

if ($opt_n) {
my $result = $session->get_table(Baseoid => $OID_DESC);
if (!defined($result)) {
printf("ERROR: Description Table : %s.\n", $session->error);
$session->close;
exit $ERRORS{'UNKNOWN'};
}
foreach my $key ( oid_lex_sort(keys %$result)) {
if ($result->{$key} =~ m/$opt_i/) {
my @oid_list = split (/\./,$key);
$interface = pop (@oid_list) ;
}
}
}

my $OID_IN =$oreon{MIB2}{IF_IN_OCTET}.".".$interface;
my $OID_OUT = $oreon{MIB2}{IF_OUT_OCTET}.".".$interface;
my $OID_SPEED = $oreon{MIB2}{IF_SPEED}.".".$interface;

# Get desctiption table

if ($opt_s) {
my $result = $session->get_table(Baseoid => $OID_DESC);
if (!defined($result)) {
printf("ERROR: Description Table : %s.\n", $session->error);
$session->close;
exit $ERRORS{'UNKNOWN'};
}
foreach my $key ( oid_lex_sort(keys %$result)) {
my @oid_list = split (/\./,$key);
my $index = pop (@oid_list) ;
my $interface_status = $session->get_request(-varbindlist => [$OID_OPERSTATUS.".".$index]);
if (!defined($result)) {
printf("ERROR: Interface Status Request : %s", $session->error);
exit $ERRORS{'UNKNOWN'};
}
print "Interface $index :: $$result{$key} :: ".$operstatus[$interface_status->{$OID_OPERSTATUS.".".$index} - 1]."\n";
}
exit $ERRORS{'OK'};
}

J'ai (no output!) comme information, j'ai !A1!80!90!public!1 comme argument, A1 étant le nom du 1er port et la ligne de commande est : $USER1$/check_centreon_snmp_traffic -H $HOSTADDRESS$ -i $ARG1$ -w $ARG2$ -c $ARG3$ -C $ARG4$ -v $ARG5$

J'ai testé en changeant la version snmp, l'interface mais toujours pareil.

Cajiss
09-10-2007, 02:57 PM
Par contre, si j'utilise un service avec ce plugin : $USER1$/check_snmp_int -H $HOSTADDRESS$ -C public -n $ARG1$ -k -w 200,400 -c 0,600

Cajiss
09-10-2007, 02:58 PM
j'ai des informations différentes selon le port indiqué en argument :

A1 : A18:DOWN,(ainsi que quelques autres), A1:UP (0.1KBps/3.4KBps), : 10 int NOK : CRITICAL
A2 : A20:UP (2.7KBps/4.5KBps), A2:UP (29.3KBps/9.4KBps):2 UP: OK
A20 :A20:UP (2.7KBps/4.5KBps):1 UP: OK

merci au modérateur de fusionner mes réponses, mais pas moyens tout mettre sur une seule réponses, il me dit que j'ai plus de 4 image dedans. désolé

julien60
09-10-2007, 04:32 PM
Bizarre ton switch moi mes interfaces ont seulement un numéro. C'est quel modèle ?

Cajiss
09-10-2007, 04:50 PM
HP procurve 4104gl - HPJ4887A (c'est le coeur du réseau ne fibre)

julien60
09-10-2007, 06:09 PM
Dans ton dossier de plugins (de base /usr/local/nagios/libexec) tape cette commande :
./check_centreon_snmp_traffic -H IPduSwitch -s
Paste les résultats ici ensuite.

Cajiss
09-10-2007, 06:23 PM
172.16.1.1 étant le switch en question :

debian-nagios:/usr/local/nagios/libexec# ./check_centreon_snmp_traffic -H 172.16.1.1 -s
Can't locate Config/IniFiles.pm in @INC (@INC contains: /usr/local/nagios/libexec /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .) at /usr/local/nagios/libexec/oreon.pm line 27.
BEGIN failed--compilation aborted at /usr/local/nagios/libexec/oreon.pm line 27.
Compilation failed in require at ./check_centreon_snmp_traffic line 34.
BEGIN failed--compilation aborted at ./check_centreon_snmp_traffic line 34.

boyerf
09-10-2007, 06:33 PM
Ton plugins te colle déja une erreur.... il ne trouve pas le fichier IniFiles.pm
Faut que tu corriges ça avant d'aller plus loin.

Cajiss
09-11-2007, 09:28 AM
un grand merci pour votre aide, suite à vos remarques, j'ai recherché sur le forum et j'ai trouvé une solution ici : http://forum.oreon-project.org/showthread.php?t=2706

je l'ai donc appliqué :

perl -MCPAN -e shell
cpan> install Config::IniFiles

le fichier configIniFiles est alors créé et le plugin fonctionne.

Je me permet de reposer une question déjà vu plusieur fois sur ce forum mais à la quelle je n'ai pas vu de solution :

quelqu'un a t il une solution pour pouvoir avoir le traffic de tous les ports du switch avec un seul service ?

julien60
09-11-2007, 10:08 AM
Pour ma part j'ai du crée un service pour chaque port ! Et puis c'est difficile à exploiter un plugins qui te renvoie une centaine d'infos. C'est surement possible a faire néanmoins.

GLobulle
09-12-2007, 04:03 PM
C'est interessant comme problème. Je risque de me retrouver dans la mème situation prochainement donc on va essayer de faire avancer le débat ^^

Si j'ai bien suivi tu cherche à observer l'utilisation de la capacité de commutation de ton coeur de réseau et récupérer un voyant d'erreur dans le cas ou il arriverait à saturation, juste ?

M'est avis que ce n'est pas en monitorant le traffic de chaques interfaces que on pourrait y arriver.

Comme le précise julien60 juste au dessus on peut pas vriament exploiter le cumul des stats de centaines d'interfaces...

Par contre il y aurait peut etre moyen d'arriver à un résultat en regardant plutot la charge processeur du switch non ? en prime tu pourrait voir sur un graph avec ods les pics de traffic du réseau.

J'ai vu qu'avec check_snmp_load on pouvait vérifier la charge d'un cpu d'élément actif cisco. En trouvant l'OID correspondant chez HP ya surement de faire un truc bien.

MAJ:"Linux, Windows, Cisco, AS400, HP Procurve, LinkProof, Blucoat, Nokia, Fortinet, Netscreen,HP-UX." plugin compatible procurve ^^

imacduc
02-11-2008, 11:04 AM
Bonjour,
Je cherche à récuperer un max d'info sur un switch HP Procurve J3289A.
Du style : Nb de collisions, Tps de réponse, Traffic > tout cela sur chacun des ports si possible.

plugin - check_centreon_snmp_traffic :
debian:/usr/local/nagios/libexec# ./check_centreon_snmp_traffic -H @IP -s
Interface 1 :: ei0 HP ProCurve 10/100 Hub Agent 100Mbit Network Interface :: up
Interface 2 :: ei1 HP ProCurve 10/100 Hub Agent 10Mbit Network Interface :: up
Interface 3 :: lo0 HP Agent Software Loopback Interface :: up


J'ai du mal à comprendre le résultat : s'agit-il des modules installés sur le switch (Interface 1 et 2) ?

debian:/usr/local/nagios/libexec# ./check_centreon_snmp_traffic -H @IP -C public -w 80 -c 90 -v 2 -i 1
Traffic In : 3.65 Mb/s (3.7 %), Out : 365.09 b/s (0.0 %) - Total RX Bits In : 23.55 GB, Out : 15.35 Gb|traffic_in=3652159,3Bits/s traffic_out=365,1Bits/s
debian:/usr/local/nagios/libexec# ./check_centreon_snmp_traffic -H @IP -C public -w 80 -c 90 -v 2 -i 2
Traffic In : 3.53 kb/s (0.0 %), Out : 23.94 kb/s (0.2 %) - Total RX Bits In : 4.83 GB, Out : 25.85 Gb|traffic_in=3529,1Bits/s traffic_out=23939,5Bits/s

Comment faire pour récuperer des info sur chaque port precisement ?

plugin - check_snmp_load.pl :
J'ai vu aussi que la surcharge cpu du switch permettait de conclure à une surcharge réseau... pkoi pas :

debian:/usr/local/nagios/libexec# ./check_snmp_load.pl -H @IP -C public -2 -w 70 -c 90 -T hp
Argument "noSuchObject" isn't numeric in printf at ./check_snmp_load.pl line 508.
CPU used 0.0% (<70) : OK

On la retrouve dans centreon : **ePN /usr/local/nagios/libexec//check_snmp_load.pl: "Argument "noSuchObject" isn't numeric in sprintf at /usr/local/nagios/bin/p1.pl line 79,".

Qqun serait me dire d'où vient cette erreur ?

imacduc
02-19-2008, 05:29 PM
Un ptit Up ;)

imacduc
02-27-2008, 10:13 AM
Please help ! :)