Hallo ich bin dabei ein Nagios-Plugin für Solaris zu schreiben. Es soll die temperatur-sensoren abfragen mit Hilfe von prtpicl. Es funktioniert auf einer SunFire 490, SunFire V440 und 250 was anderes schönes habe ich leider nicht zur Verfügung zum testen.
Sieht die Ausgabe von prtpicl -v -c temperature-sensor auf allen Suns gleich aus? Ich habe unten das perl-plugin, wer möchte kann es auch selbst probieren. Ich kann es noch parametrisieren. Zur Arbeitsweise: Wenn die temperatur des Sensor unter HighWarningThreshold - $warn ist, dann ist alles im grünen Bereich, falls die Temperatur darüber ist, dann gebe ich warning an Nagios zurück. Wenn die Temperatur HighWarningThreshold übersteigt, dann gebe ich critical zurück. Das hat den Sinn, dass man bei critical noch eine Chance hat nach der Klimaanlage zu sehen oder den Rechner herunter fährt.
#!/usr/bin/perl -w
# File: check_solaris_sensors
# Purpose: prtpicl output parser
# Author: Michael Rennecke
# Date: 2009/07/08
# Version: 0.2
use strict;
my $warn = 15;
my $prtpicl = "/usr/sbin/prtpicl";
my @diag = ();
my @sensor_data = ();
my $state = 0;
my $output = "";
unless(open(DIAG, "$prtpicl -v -c temperature-sensor | ")) {
print STDERR "Initialization error - Can't execute $prtpicl -v -c temperature-sensor!\n";
exit(3);
}
while(<DIAG>){
push(@diag, $_);
}
close(DIAG);
unless( @diag > 0) {
print STDERR "Can't find any temperature-sensor!\n";
exit(3);
}
sub change_state {
if ($_[0] > $state) {
$state = $_[0];
}
}
my $sensor = undef;
my $warning = undef;
my $critical = undef;
my $temperature = undef;
my $get_temp = 0;
foreach my $line (@diag) {
$get_temp = 0;
if ($line =~ /\s*([a-zA-Z0-9_]+)\s*\(temperature-sensor/) {
$sensor = $1;
} elsif ($line =~ /:HighWarningThreshold\s*(\d+)/) {
$warning = $1;
} elsif ($line =~ /:Temperature\s*(\d+)/) {
$temperature = $1;
$get_temp = 1;
}
if ($get_temp == 1) {
if ($temperature <= $warning - $warn) {
&change_state(0);
} elsif ($temperature <= $warning) {
&change_state(1);
} else {
&change_state(2);
}
$output = "$output $sensor: ${temperature}°C ";
}
}
if ($state == 0) {
$output = "Temperature OK --$output \n";
} elsif ($state == 1) {
$output = "Temperature WARNING --$output \n";
} elsif ($state == 2) {
$output = "Temperature CRITICAL --$output \n";
} else {
$output = "Temperature UNKNOWN --$output \n";
}
print STDOUT "$output";
exit ($state);