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