Autsch
Mittwoch, 6. Mai 2009
Seit heute haben wir das check_hpasm Plugin bei uns inder Firma im Einsatz. Da die HP-Agents immer mal wieder die Lust verlieren und dann keine SNMP-Traps mehr rausschicken, habe ich die Hardwareüberwachung jetzt in Nagios integriert. Das ganze Thema hat auch nahezu auf Anhieb funktioniert, wäre da die Idee im Raum gestanden, die gesammlten Werte (Temperatur, Lüfter, etc.) per NagiosGrapher aufzubereiten.
Im Prinzip ist das Plugin schreiben für den NagiosGrapher kein großes Hexenwerk. Am Anfang sollte man sich überlegen, was man wie graphen möchte um dann die passenden Werte per Regular-Expression zu ermitteln damit man diese dem RRD-Tool per Skript zu schmeißen kann. Alles schon 100x erledigt.
Aber es wäre ja zu einfach, wenn es genau in diesem Fall auf Anhieb funktioniert hätte.
Das Problem ist eigentlich ganz einfach – Nicht jeder Server hat die identische Anzahl Lüfter oder Prozessoren. Manche haben 2 Lüfter (z.B. DL-360), manche auch 8 (z.B. DL-380). Manche sind redundant, andere nicht. Um das ganze z vereinfachen hat sich HP auch etwas überlegt und bei jedem Modell, unter andere sogar bei gleichen Model (G4 und G4p) , die Temperaturfühler anderst belegt und sortiert. Ist im G4 die I/O-Zone der Fühler 1 ist im G4p der Fühler 3 dafür zuständig.
Um das ganze möglichst mit einem Skript zu erschlagen, stand der Gedanke im Raum einfach alle Parameter, egal ob vorhanden oder nicht, auszuwerten.
Tja … und damit begannen die Probleme.
Warum sich der NagiosGrapher bei einer nicht matchenden Regex für diesen Graph gleich beendet und kein RRD erstellt, war ziemlich einfach zu finden – OpenSource sei Dank. Der Nachteil von OpenSource ist unter anderem der, dass man davo auch ganz leicht Kopfschmerzen bekommen kann.
Wer GOTO in Perl verwendet, frisst auch kleine Kinder.
# Taking PerfData if ( $perfdata =~ m/$_->{graph_perf_regex}/i ) { my $value = $1; $value =~ s/,/\./; $values{ $_->{graph_value} } = $value; $check = "TRUE"; $ng->print_log("REGEX: ". 'match='. $value) if ($opt_verbose & $LOG_DEBUG_REGEX); } else { $ng->print_log("REGEX: NO MATCH.") if ($opt_verbose & $LOG_DEBUG_REGEX); $ng->print_log ("VALUES: ".$log_header."No matching perfdata values found...") if ($opt_verbose & $LOG_VALUES_NOK); goto OUT; }
Nachdem ich das
goto OUTauf die Schnelle mal rausgeschmissen hab, wurde zumindest das RRD angelegt und der Graph dazu erstellt. Unschönerweise werden natürlich jetzt auch für alle anderen ungefähr matchenden Regular-Expressions Graphen angelegt. check_hpasm_system und check_hpasm_iml sind nur ungefähr das gleiche. Naja … Das werden wir morgen fixen.
Wer Interesse am kompletten “Bugfix” hat, kann sich gerne melden.
