Ce billet explique la façon de surveiller un BladeCenter avec Nagios via SNMP. Pour ce tutoriel, les essais ont été faits sur des chassis HS21 et HS22, en utilisant un Nagios Core 3.2 sur une machine CentOS 5.4. Nous allons nous pencher sur la surveillance des températures ainsi que sur le fonctionnement des ventilateurs.
Activer SNMP sur le BladeCenter
Si ce n’est déjà fait, l’activation de SNMP se fait en suivant ce cheminement :
- Se connecter sur l’Advanced Management Module
- Aller sous MM Control
- Network Protocols
- SNMP
Il suffit d’activer SNMP, ici on se contentera de la version 1 du protocole, renseigner la communauté, en général « public » et l’IP, ici je choisis 192.168.1.10, à adapter bien entendu.
Trouver de la documentation IBM sur leur MIB n’est pas une mince affaire, je n’ai pas non plus passer tout mon temps là-dessus, en gros voici ce que l’on peut rapidement exploiter, exemple avec ce listing snmpwalk :
$ snmpwalk -v1 -c public -O n 192.168.1.10 .1.3.6.1.4.1.2.3.51.2.2 .1.3.6.1.4.1.2.3.51.2.2.1.1.2.0 = STRING: "39.00 Centigrade" .1.3.6.1.4.1.2.3.51.2.2.1.5.1.0 = STRING: "23.00 Centigrade" .1.3.6.1.4.1.2.3.51.2.2.2.1.1.0 = STRING: "+4.81 Volts" .1.3.6.1.4.1.2.3.51.2.2.2.1.2.0 = STRING: "+3.26 Volts" .1.3.6.1.4.1.2.3.51.2.2.2.1.3.0 = STRING: "+11.85 Volts" .1.3.6.1.4.1.2.3.51.2.2.2.1.5.0 = STRING: "-4.85 Volts" .1.3.6.1.4.1.2.3.51.2.2.2.1.6.0 = STRING: "+2.48 Volts" .1.3.6.1.4.1.2.3.51.2.2.2.1.8.0 = STRING: "+1.76 Volts" .1.3.6.1.4.1.2.3.51.2.2.3.1.0 = STRING: "47% of maximum" .1.3.6.1.4.1.2.3.51.2.2.3.2.0 = STRING: "47% of maximum" (...)
On découvre quelques informations intéressantes, comme la température et l’état des ventilateurs :
- .1.3.6.1.4.1.2.3.51.2.2.1.1.2.0 Température interne
- .1.3.6.1.4.1.2.3.51.2.2.1.5.1.0 Température ambiante
- .1.3.6.1.4.1.2.3.51.2.2.3.1.0 Vitesse ventilateur 1 (en % du maximum)
- .1.3.6.1.4.1.2.3.51.2.2.3.2.0 Vitesse ventilateur 2 (en % du maximum)
Nagios
Coté Nagios, en principe nous n’aurions pas besoin de plugin particulier car nous interrogeons le BladeCenter via SNMP, mais voilà, les réponses ne sont pas directement exploitables si l’on veut recevoir des alertes. En effet, si l’on regarde par exemple une des températures, le résultat nous donnes : 39.00 Centigrade
, ce n’est pas directement évaluable, juste le 39.00
aurait été plus simple. Il faut donc manipuler cette chaine pour extirper le chiffre qui pourra être évaluer et Nagios pourra retourner un état OK
, WARNING
, CRITICAL
ou UNKNOWN
.
Le script PERL
Avis aux développeurs PERL, je n’ai quasiment jamais touché à ce langage, ce script a été pondu en m’inspirant d’autres plugins Nagios et en me documentant sur le vif, il y a peut-être des énormités, merci de m’en faire part ^.^
J’ai toutefois essayé de suivre la guideline Nagios en ce qui concerne les plugins PERL. Voici le script que j’ai appelé check_temperature_bladecenter.pl
pour surveiller les températures et recevoir des alertes :
#!/usr/bin/perl -w use lib "/usr/local/nagios/libexec"; use utils qw(%ERRORS &print_revision &support &usage); use Getopt::Long; Getopt::Long::Configure('bundling'); # # Deux subroutines pour afficher l'usage et une aide succinte # sub print_usage () { print "Usage: $0 -H <host> -w <warning_temperature> -c <critical_temperature> -t <mm|ambiant>\n"; } sub print_help () { print "\n"; print "\n"; print "$plugin_name nagios plugin version $version\n"; print "\n"; print "The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\n"; print "copies of the plugins under the terms of the GNU General Public License.\n"; print "For more information about these matters, see the file named COPYING.\n"; print "\n"; print "Copyright (c) 2012 Fabien Amann <fabien at feub.net>\n"; print "\n"; print "\n"; print "This plugin checks the temperatures of an IBM BladeCenter.\n"; print "\n"; print "\n"; print_usage(); print "\n"; print "Options:\n"; print " -H, --hostname=ADDRESS\n"; print " host name argument for server.\n"; print " -h, --help\n"; print " print detailed help screen.\n"; print " -V, --version\n"; print " print version information.\n"; print " -w, --warning=INTEGER\n"; print " temperature value at which a warning message will be gererated.\n"; print " -c, --critical=INTEGER\n"; print " temperature value at which a critical message will be gererated.\n"; print "\n"; print "\n"; } # # Valeurs par défaut # $TIMEOUT=15; $plugin_name="check_temperature_bladecenter"; $version="0.1"; # # Obtenir les options de ligne de commande proprement # GetOptions ("V" => \$opt_V, "version" => \$opt_V, "h" => \$opt_h, "help" => \$opt_h, "w=s" => \$opt_w, "warning=s" => \$opt_w, "c=s" => \$opt_c, "critical=s" => \$opt_c, "H=s" => \$opt_H, "hostname=s" => \$opt_H, "t=s" => \$opt_t, "temptype=s" => \$opt_t); # # Affiche les informations sur le plugin # if ($opt_V) { print "\n"; print "$plugin_name nagios plugin version $version\n"; print "\n"; print "The nagios plugins come with ABSOLUTELY NO WARRANTY. You may redistribute\n"; print "copies of the plugins under the terms of the GNU General Public License.\n"; print "For more information about these matters, see the file named COPYING.\n"; print "\n"; print "Copyright (c) 2012 Fabien Amann <fabien at feub.net>\n"; print "\n"; print "\n"; exit $ERRORS{'UNKNOWN'}; } # # Affiche l'aide du plugin # if ($opt_h) { print_help(); exit $ERRORS{'UNKNOWN'}; } # # Gère le timeout # $SIG{'ALRM'} = sub { print ("ERROR: No response from HTTP server (alarm)\n"); exit $ERRORS{"UNKNOWN"}; }; alarm($TIMEOUT); # # MIB BladeCenter # $mibAmbiant = ".1.3.6.1.4.1.2.3.51.2.2.1.5.1.0"; $mibMM = ".1.3.6.1.4.1.2.3.51.2.2.1.1.2.0"; if ($opt_t eq "mm"){ $resultat = `snmpwalk -v 1 -c public $opt_H $mibMM`; } else{ $resultat = `snmpwalk -v 1 -c public $opt_H $mibAmbiant`; } if ( $resultat ) { @temperature = split(/ /,$resultat); @temperature2 = split(/\"/,$temperature[3]); $temp = $temperature2[1]; if ( $temp < $opt_w ) { print "OK : Temperature $temp (w:$opt_w - c:$opt_c)"; exit $ERRORS{'OK'}; } elsif ( $temp < $opt_c ) { print "WARNING : Temperature $temp (limit critical : $opt_c)"; exit $ERRORS{'WARNING'}; } else { print "CRITICAL : Temperature :$temp (limit warning : $opt_w)"; exit $ERRORS{'CRITICAL'}; } } else { print "Unkonwn : No response\n"; exit $ERRORS{'UNKNOWN'}; } # # Fin #
Ce script se place sous /usr/lib/nagios/plugins/
. Il faut le rendre exécutable :
chmod +x /usr/lib/nagios/plugins/check_temperature_bladecenter.pl
Configuration Nagios
Entrons vraiment dans Nagios maintenant. En premier nous allons ajouter une nouvelle commande check_bc_temp
dans le fichier /etc/nagios/objects/command.cfg
:
# # Commande BladeCenter # define command { command_name check_bc_temp command_line /usr/bin/perl $USER1$/check_temp_bladecenter.pl -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -t $ARG3$ }
Ensuite, on ajoute un hôte BladeCenter. Il existe de nombreuses possibilités pour gérer Nagios, en ce qui me concerne j’ai un fichier par hôte avec les diiférents services de cet hôte, à adapter donc si vous utilisez une structure différente. Fichier /etc/nagios/hosts/bladecenter_hs22.cfg
:
# Hote BladeCenter define host{ use bladecenter host_name bladecenter_hs22 alias BladeCenter HS22 address 192.168.1.10 } # Service de "ping" define service{ use local-service host_name bladecenter_hs22 service_description PING check_command check_ping!100.0,20%!500.0,60% } # Ventilateur chassis 1 define service { use generic-service host_name bladecenter_hs22 service_description Chassis Fan 1 check_command check_snmpv1!| .1.3.6.1.4.1.2.3.51.2.2.3.1.0!\ 65!85!C!Chassis Fan 1 } # Température ambiante define service { use generic-service host_name bladecenter_hs22 service_description Chassis Temperature - Front Panel check_command check_bc_temp!35!45!ambiant action_url /cacti/graph_view.php?action=tree&tree_id=1&leaf_id=21 } # Température interne define service { use generic-service host_name bladecenter_hs22 service_description Chassis Temperature - Planar check_command check_bc_temp!65!85!mm action_url /cacti/graph_view.php?action=tree&tree_id=1&leaf_id=23 }
Au passage, la ligne action_url
permet de spécifier un lien qui sera affiché à droite du service dans Nagios, dans mon cas, je dirige vers les graphiques de l’hôte correspondant dans Cacti.
Tout est maintenant presque prêt, il ne reste plus qu’à ajouter notre hôte dans le fichier de configuration nagios.cfg
:
cfg_file=/etc/nagios/hosts/bladecenter_hs22.cfg
On test la nouvelle configuration et s’il n’y a pas d’erreurs, on redémarre Nagios pour prendre en compte le BladeCenter :
# nagios -v nagios.cfg # service nagios reload
On patiente un peu où on force la vérification pour voir le résultat.
- Nagios partie 1 : Installation de base
- Nagios partie 2 : Configuration de base
- Nagios partie 3 : Surveiller un hôte linux distant
- Nagios partie 4 : Surveillance VMware ESXi et vSphere
- Nagios partie 5 : Surveiller un BladeCenter IBM avec Nagios