#!/usr/bin/perl # # author: Vadim Nosovsky # what: monitor IBM ESS (Shark) # use strict; require 5.6.0; use lib qw( /usr/local/libexec/nagios ); use utils qw(%ERRORS $TIMEOUT &print_revision &support &usage); use Net::SNMP; use Getopt::Long; use vars qw/$exit $opt_version $opt_timeout $opt_help $opt_host $opt_community $opt_verbose $opt_port $snmp_session $PROGNAME $TIMEOUT/; $PROGNAME = "check_snmp_ibm_ess.pl"; $opt_verbose = undef; $opt_host = undef; $opt_community = 'public'; $opt_port = 161; $exit = 'OK'; # =========================================================================== # # =====> MAIN # =========================================================================== # process_options(); alarm( $TIMEOUT ); # make sure we don't hang Nagios my $snmp_error; ($snmp_session,$snmp_error) = Net::SNMP->session( -version => 'snmpv1', -hostname => $opt_host, -community => $opt_community, -port => $opt_port, ); my $oid_prefix = ".1.3.6.1.4.1.2.6.130."; #IBM ESS (Shark) my $oid_ssSystemMod = "1.6.0"; # model #my $oid_ssSystemSn = "1.7.0"; # returns nothing via snmpget, only via snmpwalk. weird... my $oid_ssSystemClId = "1.9.0"; # cluster ID my $oid_ssProblemIndex = "2.1.1.1.1"; #my $oid_ssProblemId = "2.1.1.2.1"; my $oid_ssProblemStatus = "2.1.1.3.1"; my $oid_ssProblemEsc = "2.1.1.8.1"; my $oid_ssProblemSrn = "2.1.1.9.1"; my $oid_ssProblemDesc = "2.1.1.10.1"; $|=1; my $res = "OK"; my ($data,$data_text)=('',''); $data = SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemIndex); $data_text='UnKnown'; $data_text='Normal' if $data eq 0; if($data > 0 ){ $res = "WARNING"; $data_text='Problem' if $data > 0; $data_text .= " " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemStatus) . ". Model: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssSystemMod) . #", SN: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssSystemSn) . #", Problem ID: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemId) . ", ClId: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssSystemClId) . ", Exception Symptom Code: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemEsc) . ", System Ref.No: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemSrn) . ", Description: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssProblemDesc); verbose("$data_text\n"); } else { $data_text .= ". Model: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssSystemMod) . ", ClId: " . SNMP_getvalue($snmp_session,$oid_prefix.$oid_ssSystemClId); verbose("$data_text\n"); } $snmp_session->close; alarm( 0 ); # we're not going to hang after this. print "$res ($data) $data_text\n"; exit $ERRORS{$res}; # =========================================================================== # # =====> Sub-Routines # =========================================================================== # sub process_options { Getopt::Long::Configure( 'bundling' ); GetOptions( 'V' => \$opt_version, 'version' => \$opt_version, 'v' => \$opt_verbose, 'verbose' => \$opt_verbose, 'h' => \$opt_help, 'help' => \$opt_help, 'H:s' => \$opt_host, 'hostname:s' => \$opt_host, 'p:i' => \$opt_port, 'port:i' => \$opt_port, 'C:s' => \$opt_community, 'community:s' => \$opt_community, 't:i' => \$TIMEOUT, 'timeout:i' => \$TIMEOUT ); if ( defined($opt_version) ) { local_print_revision(); } if ( defined($opt_verbose) ) { $SNMP::debugging = 1; } if ( !defined($opt_host) || defined($opt_help) ) { print_help(); exit $ERRORS{UNKNOWN}; } } sub local_print_revision { print_revision( $PROGNAME, '$Revision: 1.0 $ ' ); } sub print_usage { print "Usage: $PROGNAME -H -C [-t ]\n"; } sub SNMP_getvalue{ my ($snmp_session,$oid) = @_; my $res = $snmp_session->get_request( -varbindlist => [$oid]); if(!defined($res)){ print "ERROR: ".$snmp_session->error."\n"; exit; } return($res->{$oid}); } sub print_help { local_print_revision(); print "\nCopyright (c) 2008 Vadim Nosovsky \n\n", "SNMP IBM ESS (Shark) plugin for Nagios\n\n"; print_usage(); print <