1
0
mirror of https://github.com/opinkerfi/nagios-plugins.git synced 2025-04-20 06:13:40 +02:00
This commit is contained in:
Sidney Souza 2017-03-29 14:46:33 +00:00 committed by GitHub
commit 60ccbf9e8d

View File

@ -4,9 +4,9 @@
# check_apcext.pl - APC Extra gear monitoring plugin for Nagios # check_apcext.pl - APC Extra gear monitoring plugin for Nagios
# 05.02.07 Paul Venezia # 05.02.07 Paul Venezia
# #
# v0.0.1 # v0.0.2
#
# #
# vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
use Net::SNMP; use Net::SNMP;
use Getopt::Std; use Getopt::Std;
@ -18,8 +18,8 @@ sub getmasked_values ($$);
sub f2c ($); sub f2c ($);
if ($ARGV[0] =~ /(--help|-h|help)/ || !defined$ARGV[0]) { if ($ARGV[0] =~ /(--help|-h|help)/ || !defined$ARGV[0]) {
&usage; &usage;
exit 0; exit 0;
} }
my $opts = 's:lmC:H:p:w:c:'; my $opts = 's:lmC:H:p:w:c:';
@ -35,6 +35,14 @@ my $metric = $opt{m};
my $list = $opt{l}; my $list = $opt{l};
my $sensor_int_name = $opt{s}; my $sensor_int_name = $opt{s};
my ($session, $error) = Net::SNMP->session(
-hostname => $host,
-community => $comm,
-version => 'snmpv2c',
-port => "161"
);
my ($oid, $oidbase, $fval, $unit, $outmsg); my ($oid, $oidbase, $fval, $unit, $outmsg);
my $retval = 0; my $retval = 0;
my %rpduamps; my %rpduamps;
@ -47,14 +55,14 @@ my %oids = (
'sensor_key' => 5, 'sensor_key' => 5,
'sensor_val' => 9, 'sensor_val' => 9,
#'cdef' => '$val * 0.1' #'cdef' => '$val * 0.1'
}, },
'nbmshum' => { 'nbmshum' => {
'label' => 'Humidity', 'label' => 'Humidity',
'unit' => '%', 'unit' => '%',
'oidbase' => '.1.3.6.1.4.1.5528.100.4.1.2.1', 'oidbase' => '.1.3.6.1.4.1.5528.100.4.1.2.1',
'sensor_key' => 5, 'sensor_key' => 5,
'sensor_val' => 8, 'sensor_val' => 8,
}, },
'nbmsairflow' => { 'nbmsairflow' => {
'label' => 'Air Flow', 'label' => 'Air Flow',
'unit' => 'CFM', 'unit' => 'CFM',
@ -62,7 +70,7 @@ my %oids = (
'sensor_val' => 8, 'sensor_val' => 8,
'sensor_key' => 5, 'sensor_key' => 5,
'mod' => 'lt' 'mod' => 'lt'
}, },
'nbmsaudio' => { 'nbmsaudio' => {
'label' => 'Audio Level', 'label' => 'Audio Level',
'unit' => '', 'unit' => '',
@ -70,170 +78,166 @@ my %oids = (
'sensor_val' => 7, 'sensor_val' => 7,
'sensor_key' => 5, 'sensor_key' => 5,
'mod' => '' 'mod' => ''
}, },
'rpduamps' => { 'rpduamps' => {
'label' => 'Power Output', 'label' => 'Power Output',
'unit' => 'Amps', 'unit' => 'Amps',
'oid' => '.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.', 'oid' => '.1.3.6.1.4.1.318.1.1.12.2.3.1.1.2.',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acscstatus' => { 'acscstatus' => {
'label' => 'Status', 'label' => 'Status',
'unit' => '', 'unit' => '',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.1.0' 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.1.0'
}, },
'acscload' => { 'acscload' => {
'label' => 'Cooling Load', 'label' => 'Cooling Load',
'unit' => 'kW', 'unit' => 'kW',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.3.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.3.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acscoutput' => { 'acscoutput' => {
'label' => 'Cooling output', 'label' => 'Cooling output',
'unit' => 'kW', 'unit' => 'kW',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.2.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.2.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acscsupair' => { 'acscsupair' => {
'label' => 'Supply Air', 'label' => 'Supply Air',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.8.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.8.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acscretair' => { 'acscretair' => {
'label' => 'Return Air', 'label' => 'Return Air',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.10.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.10.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acscairflow' => { 'acscairflow' => {
'label' => 'Airflow', 'label' => 'Airflow',
'unit' => 'CFM', 'unit' => 'CFM',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.4.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.4.0',
}, },
'acscracktemp' => { 'acscracktemp' => {
'label' => 'Rack Inlet Temp', 'label' => 'Rack Inlet Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.6.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.6.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acsccondin' => { 'acsccondin' => {
'label' => 'Cond Inlet Temp', 'label' => 'Cond Inlet Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.30.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.30.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acsccondout' => { 'acsccondout' => {
'label' => 'Cond Outlet Temp', 'label' => 'Cond Outlet Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.28.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.4.1.2.28.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcstatus' => { 'acrcstatus' => {
'label' => 'Status', 'label' => 'Status',
'unit' => '', 'unit' => '',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.1.0' 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.1.0'
}, },
'acrcload' => { 'acrcload' => {
'label' => 'Cooling Load', 'label' => 'Cooling Load',
'unit' => 'kW', 'unit' => 'kW',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.2.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.2.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcoutput' => { 'acrcoutput' => {
'label' => 'Cooling Output', 'label' => 'Cooling Output',
'unit' => 'kW', 'unit' => 'kW',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.3.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.3.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcairflow' => { 'acrcairflow' => {
'label' => 'Airflow', 'label' => 'Airflow',
'unit' => 'CFM', 'unit' => 'CFM',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.4.0' 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.4.0'
}, },
'acrcracktemp' => { 'acrcracktemp' => {
'label' => 'Rack Inlet Temp', 'label' => 'Rack Inlet Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.6.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.6.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcsupair' => { 'acrcsupair' => {
'label' => 'Supply Air', 'label' => 'Supply Air',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.8.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.8.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcretair' => { 'acrcretair' => {
'label' => 'Return Air', 'label' => 'Return Air',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.10.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.10.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcfanspeed' => { 'acrcfanspeed' => {
'label' => 'Fan Speed', 'label' => 'Fan Speed',
'unit' => '%', 'unit' => '%',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.16.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.16.0',
'cdef' => '$val * .10', 'cdef' => '$val * .10',
}, },
'acrcfluidflow' => { 'acrcfluidflow' => {
'label' => 'Fluid Flow', 'label' => 'Fluid Flow',
'unit' => 'GPM', 'unit' => 'GPM',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.21.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.21.0',
'cdef' => '$val * .10', 'cdef' => '$val * .10',
'mod' => 'lt' 'mod' => 'lt'
}, },
'acrcflenttemp' => { 'acrcflenttemp' => {
'label' => 'Entering Fluid Temp', 'label' => 'Entering Fluid Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.23.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.23.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
'acrcflrettemp' => { 'acrcflrettemp' => {
'label' => 'Returning Fluid Temp', 'label' => 'Returning Fluid Temp',
'unit' => 'degF', 'unit' => 'degF',
'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.25.0', 'oid' => '.1.3.6.1.4.1.318.1.1.13.3.2.2.2.25.0',
'cdef' => '$val * .10' 'cdef' => '$val * .10'
}, },
); );
if ($list) { if ($list) {
my ($baseoid, $int_name_id, $value_id) = @_; my ($baseoid, $int_name_id, $value_id) = @_;
my ($session, $error) = Net::SNMP->session( my $response = $session->get_table(-baseoid => ".1.3.6.1.4.1.5528.100.2.1.1");
-hostname => $host,
-community => $comm, my $err = $session->error;
-version => 1,
# -translate => [-octetstring => 0x0], if ($err){
-port => "161" $retval = 3;
); $outmsg = "UNKNOWN";
my $response = $session->get_table(-baseoid => ".1.3.6.1.4.1.5528.100.2.1.1"); $session->close();
my $err = $session->error; print "$outmsg $err - SNMP Error connecting to $host\n";
if ($err){ exit $retval;
$retval = 3; }
$outmsg = "UNKNOWN";
$session->close(); my %sensor;
print "$outmsg $err - SNMP Error connecting to $host\n"; foreach my $key (keys %{$response}) {
exit $retval; my ($type, $id) = (split(/\./, $key))[-2,-1];
} next if ($type != 1 and $type != 4);
my %sensor; next if ($id < 2000000000);
foreach my $k (keys %{$response}) { if ($type == 1) {
my ($type, $id) = (split(/\./, $k))[-2,-1]; $sensor{$id}->{"int_name"} = $response->{$key};
next if ($type != 1 and $type != 4); } else {
next if ($id < 2000000000); $sensor{$id}->{"friendly_name"} = $response->{$key};
if ($type == 1) {
$sensor{$id}->{"int_name"} = $response->{$k};
} else {
$sensor{$id}->{"friendly_name"} = $response->{$k};
} }
} }
print <<" EO"; print <<" EO";
Specify a sensor by using the -s and the INTERNAL name of the sensor Specify a sensor by using the -s and the INTERNAL name of the sensor
Detected sensors: Detected sensors:
EO EO
printf("\t%-32s %s\n", "Friendly Name", "Internal Name"); printf("\t%-32s %s\n", "Friendly Name", "Internal Name");
foreach my $id (sort { $sensor{$a}->{"friendly_name"} cmp $sensor{$b}->{"friendly_name"} } keys %sensor) { foreach my $id (sort { $sensor{$a}->{"friendly_name"} cmp $sensor{$b}->{"friendly_name"} } keys %sensor) {
printf ("\t%-32s %s\n", "\"$sensor{$id}->{friendly_name}\"", "\"$sensor{$id}->{int_name}\""); printf ("\t%-32s %s\n", "\"$sensor{$id}->{friendly_name}\"", "\"$sensor{$id}->{int_name}\"");
} }
@ -248,34 +252,26 @@ Detected sensors:
$oidbase = $oids{$param}->{oidbase}; $oidbase = $oids{$param}->{oidbase};
} }
my ($session, $error) = Net::SNMP->session(
-hostname => $host,
-community => $comm,
-version => 1,
# -translate => [-octetstring => 0x0],
-port => "161"
);
if ($param eq "rpduamps") { if ($param eq "rpduamps") {
# $param = "RackPDU"; # $param = "RackPDU";
my $i; for (my $i=1;$i<4;$i++) {
for ($i=1;$i<4;$i++) { my $phoid = $oid . $i;
my $phoid = $oid . $i; my $response = $session->get_request($phoid);
my $response = $session->get_request($phoid); my $err = $session->error;
my $err = $session->error;
if ($err){ if ($err){
$retval = 3; $retval = 3;
$outmsg = "UNKNOWN"; $outmsg = "UNKNOWN";
$session->close(); $session->close();
print "$outmsg $err - SNMP Error connecting to $host\n"; print "$outmsg $err - SNMP Error connecting to $host\n";
exit $retval; exit $retval;
} }
$rpduamps{$i} = $response->{$phoid};
} $rpduamps{$i} = $response->{$phoid};
$session->close; }
#$crit = ($crit * 10); $session->close;
#$warn = ($warn * 10); #$crit = ($crit * 10);
#$warn = ($warn * 10);
$unit = "Amps"; $unit = "Amps";
foreach my $ph ( sort keys %rpduamps ) { foreach my $ph ( sort keys %rpduamps ) {
@ -306,16 +302,18 @@ if ($param eq "rpduamps") {
} else { } else {
my $val; my $val;
if ($oid) { if ($oid) {
my $response = $session->get_request($oid); my $response = $session->get_request($oid);
my $err = $session->error; my $err = $session->error;
if ($err){ if ($err){
$retval = 3; $retval = 3;
$outmsg = "UNKNOWN"; $outmsg = "UNKNOWN";
$session->close(); $session->close();
print "$outmsg $err - SNMP Error connecting to $host\n"; print "$outmsg $err - SNMP Error connecting to $host\n";
exit $retval; exit $retval;
} }
@ -324,8 +322,12 @@ if ($param eq "rpduamps") {
} else { } else {
my $snmpd = getmasked_values($oidbase, { $oids{$param}->{sensor_key} => 'sensor_key', my $snmpd = getmasked_values(
$oids{$param}->{sensor_val} => 'sensor_val' }); $oidbase, {
$oids{$param}->{sensor_key} => 'sensor_key',
$oids{$param}->{sensor_val} => 'sensor_val'
}
);
if ((keys %{$snmpd}) > 1 && !$sensor_int_name) { if ((keys %{$snmpd}) > 1 && !$sensor_int_name) {
print "UNKNOWN - Many sensors found but none specified, see -s and -l\n"; print "UNKNOWN - Many sensors found but none specified, see -s and -l\n";
@ -352,13 +354,14 @@ if ($param eq "rpduamps") {
} }
} }
if ($param eq "acscstatus" || $param eq "acrcstatus") { if ($param eq "acscstatus" || $param eq "acrcstatus") {
if ($val == 1) { if ($val == 1) {
$fval = "Standby"; $fval = "Standby";
$retval = 1; $retval = 1;
$outmsg = "WARNING"; $outmsg = "WARNING";
} elsif ($val == 2) { } elsif ($val == 2) {
$fval = "On"; $fval = "On";
$retval = 0; $retval = 0;
$outmsg = "OK"; $outmsg = "OK";
} }
} else { } else {
@ -375,10 +378,10 @@ if ($param eq "rpduamps") {
} }
if ($fval > $crit) { if ($fval > $crit) {
$retval = 2; $retval = 2;
$outmsg = "CRITICAL"; $outmsg = "CRITICAL";
} elsif ($fval > $warn) { } elsif ($fval > $warn) {
$retval = 1; $retval = 1;
$outmsg = "WARNING"; $outmsg = "WARNING";
} else { } else {
$retval = 0; $retval = 0;
@ -401,16 +404,13 @@ APC NetBotz
nbmstemp NetBotz main sensor temp | nbmshum NetBotz main sensor humidity nbmstemp NetBotz main sensor temp | nbmshum NetBotz main sensor humidity
nbmsairflow NetBotz main sensor airflow | nbmsaudio NetBotz main sensor audio nbmsairflow NetBotz main sensor airflow | nbmsaudio NetBotz main sensor audio
-l List connected sensors | -s sensor Sensor we want info from -l List connected sensors | -s sensor Sensor we want info from
APC Metered Rack PDU APC Metered Rack PDU
rpduamps Amps on each phase rpduamps Amps on each phase
APC ACSC In-Row APC ACSC In-Row
acscstatus System status (on/standby) | acscload Cooling load acscstatus System status (on/standby) | acscload Cooling load
acscoutput Cooling output | acscsupair Supply air acscoutput Cooling output | acscsupair Supply air
acscairflow Air flow | acscracktemp Rack inlet temp acscairflow Air flow | acscracktemp Rack inlet temp
acsccondin Condenser input temp | acsccondout Condenser outlet temp acsccondin Condenser input temp | acsccondout Condenser outlet temp
APC ACRC In-Row APC ACRC In-Row
acrcstatus System status (on/standby) | acrcload Cooling load acrcstatus System status (on/standby) | acrcload Cooling load
acrcoutput Cooling output | acrcairflow Air flow acrcoutput Cooling output | acrcairflow Air flow
@ -433,21 +433,15 @@ sub f2c($) {
sub getmasked_values ($$) { sub getmasked_values ($$) {
my ($baseoid, $values) = @_; my ($baseoid, $values) = @_;
my ($session, $error) = Net::SNMP->session(
-hostname => $host,
-community => $comm,
-version => 1,
-port => "161"
);
my $response = $session->get_table(-baseoid => $baseoid); my $response = $session->get_table(-baseoid => $baseoid);
my $err = $session->error; my $err = $session->error;
if ($err){ if ($err){
$retval = 3; $retval = 3;
$outmsg = "UNKNOWN"; $outmsg = "UNKNOWN";
$session->close(); $session->close();
print "$err - SNMP Error connecting to $host\n"; print "$err - SNMP Error connecting to $host\n";
exit $retval; exit $retval;
} }
my %snmpdata; my %snmpdata;
foreach my $k (keys %{$response}) { foreach my $k (keys %{$response}) {