Vous êtes ici:

Menu

Superviser les switchs 3 com avec le SNMP V3

Je vous propose, dans cet article, une modification du plugin check_centreon_snmp_traffic livré avec le package Centreon pour superviser les switchs 3com avec le SNMP V3. En effet, la gestion SNMP V1 et V2 ne pose aucun problème avec le plugin. Par contre la gestion du SNMP V3 est beaucoup plus complexe. Les informations sur Internet ne m'ont pas donné satisfaction, j'ai pris mon courage à deux mains et je vous livre donc mes recherches et mes solutions. Si vous avez des informations non décrites dans cet articles ou des corrections à me signaler, n'hésitez pas à me contacter.
La distribution pour Nagios-Centreon sera une debian 5

Pré requis


SNMP V3 étant crypté, vérifier que les packages nécessaires à Perl sont installés.
apt-get install libcrypt-des-perl libdigest-sha1-perl libdigest-hmac-perl libcrypt-rijndael-perl

Cela va sans dire, les paquets pour SNMP sont installés sur la machine supervisant les switchs.

Configuration SNMPV3 du switch 3 COM


La configuration sera basé sur la famille 4210. On définira tout d'abord un groupe SNMP
snmp-agent group v3 netGRP privacy read-view netVUE write-view netVUE notify-view netVUE

Ensuite définissons l'utilisateur
snmp-agent usm-user v3 netadmin netGRP authentication-mode md5 azerty98 privacy-mode des56 supervision

et finissons par la vue
snmp-agent mib-view included 45ldrRW internet


Vérification du fonctionnement du SNMPV3


Notre configuration étant prête, nous vérifions son fonctionnement à partir du serveur de supervision.
snmpget -v 3 -u netadmin -l authPriv -a MD5 -A azerty98 -x DES -X supervision "IP du SWITCH" sysUpTime.0

Le switch doit nous répondre comme ci-dessous
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (26550) 0:04:25.50


Supervision du traffic avec le plugin check_centreon_snmp_traffic


Le but de cet article est de pouvoir superviser le trafic d'une interface quelconque d'un switch 3COM. La configuration se fait en deux étapes. On détermine avec le plugin les noms des interfaces et ensuite on réalise la configuration du port intéressé. Dans notre exemple, nous essayons de lister nos interfaces avec la commande suivante :
./check_centreon_snmp_traffic -H "IP du SWITCH" -v 3 -s -u netadmin -p azerty98 

Malheureusement le résultat ressemble à ceci
UNKNOWN: SNMP Session : Time synchronization failed during discovery

Après quelques recherches sur Internet non concluante, je me résigne à décortiquer le code de ce plugin et avec l'aide de la documentation de la librairie perl NET::SNMP, j'en arrive au conclusion suivante : pour faire fonctionner le plugin avec le SNMPV3 des switchs 3COM, il faut passer le paramètre du mot de passe privé (supervision dans notre exemple). Il y a peut-être d'autre solution, notamment avec le paramètre k mais n'étant pas un expert du SNMPV3 je suis à l'écoute de toutes propositions.

Modification du plugin


Nous rajouterons un paramètre x contenant le mot de passe privé. Voici les modifications à apporter :
initialisation des variables
use vars qw($opt_V $opt_h $opt_P $opt_64bits $opt_v $opt_C $opt_b $opt_k $opt_u $opt_p $opt_x $opt_H $opt_D $opt_i $opt_n $opt_w $opt_c $opt_s $opt_T $opt_a $opt_r $opt_S);

Configuration des paramètres
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,
"P=s" => \$opt_P, "--snmp-port=s" => \$opt_P,
"k=s" => \$opt_k, "key=s" => \$opt_k,
"x=s" => \$opt_x, "privpasswd=s" => \$opt_x,
"s" => \$opt_s, "show" => \$opt_s,
"V" => \$opt_V, "version" => \$opt_V,
"i=s" => \$opt_i, "interface=s" => \$opt_i,
"64-bits" => \$opt_64bits,
"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, "r" => \$opt_r,
"S" => \$opt_S,
"a=s" => \$opt_a, "cache=s" => \$opt_a,
"H=s" => \$opt_H, "hostname=s" => \$opt_H);

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

Commande snmp
} elsif ($opt_p) {
if ($opt_x) {
($session, $error) = Net::SNMP->session(-hostname => $opt_H, -version => $snmp, -username => $opt_u, -authpassword => $opt_p, -privpassword => $opt_x, -port => $opt_P);
} else {
($session, $error) = Net::SNMP->session(-hostname => $opt_H, -version => $snmp, -username => $opt_u, -authpassword => $opt_p, -port => $opt_P);
}
et pour finir l'aide
    print "\nUsage:\n";
print "$PROGNAME\n";
print " -H (--hostname) Hostname to query (required)\n";
print " -C (--community) SNMP read community (defaults to public)\n";
print " used with SNMP v1 and v2c\n";
print " -v (--snmp_version) 1 for SNMP v1 (default)\n";
print " 2 for SNMP v2c\n";
print " 3 for SNMP v3\n";
print " -P (--snmp-port) SNMP port (default: 161)\n";
print " -k (--key) snmp V3 key\n";
print " -x (--privpasswd) snmp V3 key\n";
print " -p (--password) snmp V3 password\n";
print " -u (--username) snmp v3 username \n";
print " -s (--show) Describes all interfaces number (debug mode)\n";
print " -i (--interface) Set the interface number (2 by default)\n";
print " -n (--name) Allows to use interface name with option -i instead of interface oid index\n";
print " (ex: -i \"eth0\" -n, -i \"VMware Virtual Ethernet Adapter for VMnet8\" -n\n";
print " (choose an unique expression for each interface)\n";
print " -w (--warn) Signal strength at which a warning message will be generated\n";
print " (default 80)\n";
print " -c (--crit) Signal strength at which a critical message will be generated\n";
print " -T Set maximum bandwidth\n";
print " -S Show link speed in output\n";
print " -V (--version) Plugin version\n";
print " -r Regexp Match Mode\n";
print " -a (--cache) Updates cache file every n hours instead of doing snmpwalk for every check (default: 3)\n";
print " -h (--help) usage help\n";
}

sub print_help () {
print "##############################################\n";
print "# Copyright (c) 2004-2011 Centreon #\n";
print "# Bugs to http://trac.centreon.com #\n";
print "# Modification by Eric Coquard #\n";
print "# Bugs to eric.coquard\@free.fr #\n";
print "##############################################\n";
print_usage();
print "\n";
}

Vous pouvez récupérer le plugin dans sa totalité ici

Fonctionnement du plugin


Une fois le plugin installé dans libexec, ne pas oublier de le rendre exécutable Happy Saisir la commande suivante
./check_centreon_snmp_traffic -H "IP du SWITCH" -v 3 -s -u netadmin -p azerty98 -x supervision

vous devrez obtenir ceci pour un 3COM 4200 9 ports, par exemple :
Interface 14 :: NULL0 :: up
Interface 16 :: InLoopBack0 :: up
Interface 4031 :: Vlan-interface501 :: up
Interface 4227614 :: Aux1/0/0 :: up
Interface 4227626 :: Ethernet1/0/1 :: up
Interface 4227634 :: Ethernet1/0/2 :: up
Interface 4227642 :: Ethernet1/0/3 :: up
Interface 4227650 :: Ethernet1/0/4 :: up
Interface 4227658 :: Ethernet1/0/5 :: up
Interface 4227666 :: Ethernet1/0/6 :: up
Interface 4227674 :: Ethernet1/0/7 :: up
Interface 4227682 :: Ethernet1/0/8 :: down
Interface 4227689 :: GigabitEthernet1/0/9 :: up
Interface 4227697 :: GigabitEthernet1/0/10 :: down

Maintenant pour monitorer le trafic du port Ethernet 1/0/2, deux solutions. La première de prendre l'id SNMP de l'interface,
/check_centreon_snmp_trafficV1 -H "IP du SWITCH" -v 3 -i 4227634 -u netadmin -p azerty98 -x supervision

la deuxième de prendre le nom de l'interface, solution plus parlante,
./check_centreon_snmp_trafficV1 -H "IP du SWITCH" -v 3 -n -i Ethernet1/0/2 -u netadmin -p azerty98 -x supervision

ce qui nous donnera le même résultat
Traffic In : 2.79 kb/s (0.0 %), Out : 62.48 kb/s (0.1 %) |traffic_in=2787,1Bits/s;80000000;95000000;0;100000000 traffic_out=62484,7Bits/s;80000000;95000000;0;100000000


Il nous reste plus que la configuration du plugin dans Centreon, mais ceci fera l'objet d'un autre article. En espérant vous avoir aidé Winking



blog comments powered by Disqus
 Vous êtes ici: