aboutsummaryrefslogtreecommitdiff
path: root/contrib/check_netapp.pl
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/check_netapp.pl')
-rwxr-xr-xcontrib/check_netapp.pl178
1 files changed, 178 insertions, 0 deletions
diff --git a/contrib/check_netapp.pl b/contrib/check_netapp.pl
new file mode 100755
index 00000000..d556e9da
--- /dev/null
+++ b/contrib/check_netapp.pl
@@ -0,0 +1,178 @@
+#!/usr/bin/perl -wT
+# check_netapp
+#
+# Copyright (C) 2000 Leland E. Vandervort <leland@mmania.com>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty
+# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# you should have received a copy of the GNU General Public License
+# along with this program (or with Nagios); if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA
+####################################
+# checks for overtemperature, fans, psu, and nfs operations/second on
+# Network Appliance Filers.
+# Returns:
+# OK if temp, fans, psu OK and Ops/Sec below warning and critical
+# Thresholds (default is warning=3500, critical=5000)
+# ** Note: See the specifications for your Filer model for
+# the thresholds !
+# Returns Warning if NFS Ops/Sec is above warning threshold
+# (default 3500, or specified by -o command line option)
+# Returns Critical if NFS Ops/Sec is above critical threshold
+# ( -m option, or default 5000), or if overtem, psufault, or
+# fanfault detected.
+#
+####################################
+# Notes on operational limits for NetApp Filers:
+# Platform Maximum Ops/Second (recommended)
+# -------------------------------------------------------------
+# F230 1000
+# F740 5500
+# F760 9000
+####################################
+
+use Net::SNMP;
+use Getopt::Long;
+&Getopt::Long::config('auto_abbrev');
+
+my $status;
+my $response = "";
+my $TIMEOUT = 10;
+my $community = "public";
+my $port = 161;
+my $opsthresh = "3500";
+my $critical = "5000";
+
+my $status_string = "";
+
+my %OIDLIST = (
+ overtemp => '1.3.6.1.4.1.789.1.2.4.1.0',
+ failedfan => '1.3.6.1.4.1.789.1.2.4.2.0',
+ failedpsu => '1.3.6.1.4.1.789.1.2.4.4.0',
+ nfsops => '1.3.6.1.4.1.789.1.2.2.1.0'
+ );
+
+
+
+my %STATUSCODE = ( 'UNKNOWN' => '-1',
+ 'OK' => '0',
+ 'WARNING' => '1',
+ 'CRITICAL' => '2');
+
+my $state = "UNKNOWN";
+
+
+$SIG{'ALRM'} = sub {
+ print "ERROR: No snmp response from $hostname (sigALRM)\n";
+ exit($STATUSCODE{"UNKNOWN"});
+};
+
+alarm($TIMEOUT);
+
+sub get_nfsops {
+ my $nfsops_start = &SNMPGET($OIDLIST{nfsops});
+ sleep(1);
+ my $nfsops_end = &SNMPGET($OIDLIST{nfsops});
+ my $nfsopspersec = $nfsops_end - $nfsops_start;
+ return($nfsopspersec);
+}
+
+
+sub show_help {
+ printf("\nPerl NetApp filer plugin for Nagios\n");
+ printf("Usage:\n");
+ printf("
+ check_netapp [options] <hostname>
+ Options:
+ -c snmp-community
+ -p snmp-port
+ -o Operations per second warning threshold
+ -m Operations per second critical threshold
+
+");
+ printf("Copyright (C)2000 Leland E. Vandervort\n");
+ printf("check_netapp comes with absolutely NO WARRANTY either implied or explicit\n");
+ printf("This program is licensed under the terms of the\n");
+ printf("GNU General Public License\n(check source code for details)\n\n\n");
+ exit($STATUSCODE{"UNKNOWN"});
+}
+
+
+$status = GetOptions( "community=s", \$community,
+ "port=i", \$port,
+ "opsthresh=i", \$opsthresh,
+ "maxops=i", \$critical );
+
+if($status == 0) {
+ &show_help;
+}
+
+sub SNMPGET {
+ $OID = shift;
+ ($session,$error) = Net::SNMP->session(
+ Hostname => $hostname,
+ Community => $community,
+ Port => $port
+ );
+ if(!defined($session)) {
+ printf("$state %s\n", $error);
+ exit($STATUSCODE{$state});
+ }
+ if(!defined($response = $session->get_request($OID))) {
+ printf("$state %s\n", $session->error());
+ $session->close();
+ exit($STATUSCODE{$state});
+ }
+ $session->close();
+ return($response->{$OID});
+}
+
+$hostname = shift || &show_help;
+
+my $tempcheck = &SNMPGET($OIDLIST{overtemp});
+if($tempcheck == 1) {
+ $state = "OK";
+ $status_string .= "Temp OK ";
+}
+else {
+ $state = "CRITICAL";
+ $status_string .= "Temp CRIT";
+}
+
+foreach $element ('failedfan','failedpsu') {
+ my $my_return = &SNMPGET($OIDLIST{$element});
+ if(($my_return =~ /no/) || ($my_return == 0)) {
+ $status_string .= "$element = $my_return ";
+ $state = "OK";
+ }
+ else {
+ $status_string .= "$element = $my_return ";
+ $state = "CRITICAL";
+ }
+}
+
+my $tmp_opssec = &get_nfsops();
+
+if ($tmp_opssec >= $critical) {
+ $state = "CRITICAL";
+}
+elsif ($tmp_opssec >= $opsthresh) {
+ $state = "WARNING";
+}
+else {
+ $state = "OK";
+}
+
+$status_string .= "Ops\/Sec = $tmp_opssec ";
+
+print "$state $status_string\n";
+exit($STATUSCODE{$state});