Superviser les switchs 3 com avec le SNMP V3
15/04/11 18:54 Classé dans: Techniques
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
SNMP V3 étant crypté, vérifier que les packages nécessaires à Perl sont installés.
Cela va sans dire, les paquets pour SNMP sont installés sur la machine supervisant les switchs.
La configuration sera basé sur la famille 4210. On définira tout d'abord un groupe SNMP
Ensuite définissons l'utilisateur
et finissons par la vue
Notre configuration étant prête, nous vérifions son fonctionnement à partir du serveur de supervision.
Le switch doit nous répondre comme ci-dessous
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 :
Malheureusement le résultat ressemble à ceci
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.
Nous rajouterons un paramètre x contenant le mot de passe privé. Voici les modifications à apporter :
initialisation des variables
Configuration des paramètres
Commande snmp
Vous pouvez récupérer le plugin dans sa totalité ici
Une fois le plugin installé dans libexec, ne pas oublier de le rendre exécutable
Saisir la commande suivante
vous devrez obtenir ceci pour un 3COM 4200 9 ports, par exemple :
Maintenant pour monitorer le trafic du port Ethernet 1/0/2, deux solutions. La première de prendre l'id SNMP de l'interface,
la deuxième de prendre le nom de l'interface, solution plus parlante,
ce qui nous donnera le même résultat
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](../../rw_common/plugins/blog/smiley_wink.png)
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) {et pour finir l'aide
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);
}
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](../../rw_common/plugins/blog/smiley_smile.png)
./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](../../rw_common/plugins/blog/smiley_wink.png)
blog comments powered by Disqus