#!/bin/bash # # Script to retrieve custom SNMP objects set using the "exec" handler # Written by Thomas Sluyter (nagios@kilala.nl) # By request of KPN-IS, i-Provide, the Netherlands # Last Modified: 18-07-2006 # # Usage: ./retrieve_custom_snmp # # Description: # On our Nagios client systems we use a lot of custom MIB OIDs which are # registered under our own Enterprise ID. A whole bunch of the # original Nagios script are run through the SNMP daemon and their exit # codes and output are appended to specific OID. This all happens using the # SNMP "exec" handler. # Unfortunately the default check_snmp script doesn't allow for easy # handling of these objects, so I hacked together a quick script. # # So basically this script doesn't do any checking. It just retrieves # information :) # # Limitations: # This script should work properly on all implementations of Linux, Solaris # and Mac OS X. # # Output: # The exit code is the exit code retrieved from OID.100.1. It is temporarily # stored in $EXITCODE. # The output string is the string retrieved from OID.101.1. It is tempo- # rarily stored in $OUTPUT. # # Other notes: # If you ever run into problems with the script, set the DEBUG variable # to 1. I'll need the output the script generates to do troubleshooting. # See below for details. # I realise that all the debugging commands strewn throughout the script # may make things a little harder to read. But in the end I'm sure it was # well worth adding them. It makes troubleshooting so much easier. :3 # Also, for some reason the case statement with the shifts (to detect # passed options) doesn't seem to be working right. FIXME! # # Check command definition: # define command{ # command_name retrieve_custom_snmp # command_line $USER1$/retrieve_custom_snmp -H $HOSTADDRESS$ -o $ARG1$ # } # # You may have to change this, depending on where you installed your # Nagios plugins PATH="/usr/bin:/usr/sbin:/bin:/sbin" LIBEXEC="/usr/local/nagios/libexec" . $LIBEXEC/utils.sh PROGNAME="retrieve_custom_snmp" COMMUNITY="public" [ `uname` == "SunOS" ] && SNMPGET="/usr/local/bin/snmpget -Oqv -v 2c -c $COMMUNITY" [ `uname` == "Darwin" ] && SNMPGET="/usr/bin/snmpget -Oqv -v 2c -c $COMMUNITY" [ `uname` == "Linux" ] && SNMPGET="/usr/bin/snmpget -Oqv -v 2c -c $COMMUNITY" ### DEBUGGING SETUP ### # Cause you never know when you'll need to squash a bug or two DEBUG="0" if [ $DEBUG -gt 0 ] then DEBUGFILE="/tmp/foobar" rm $DEBUGFILE >/dev/null 2>&1 fi ### REQUISITE NAGIOS COMMAND LINE STUFF ### print_usage() { echo "Usage: $PROGNAME -H hostname -o OID" echo "Usage: $PROGNAME --help" } print_help() { echo "" print_usage echo "" echo "Script to retrieve the status for custom SNMP objects." echo "" echo "This plugin not developped by the Nagios Plugin group." echo "Please do not e-mail them for support on this plugin, since" echo "they won't know what you're talking about :P" echo "" echo "For contact info, read the plugin itself..." } while test -n "$1"; do case "$1" in --help) print_help exit $STATE_OK ;; -h) print_help exit $STATE_OK ;; -H) HOST=$2 shift ;; -o) OID=$2 STATUS="$OID.100.1" STRING="$OID.101.1" shift ;; *) echo "Unknown argument: $1" print_usage exit $STATE_UNKNOWN ;; esac shift done ### FINALLY... RETRIEVING THE VALUES ### EXITCODE=`$SNMPGET $HOST $STATUS` [ $DEBUG -gt 0 ] && echo "Retrieve exit code is $EXITCODE" >> $DEBUGFILE OUTPUT=`$SNMPGET $HOST $STRING | sed 's/"//g'` [ $DEBUG -gt 0 ] && echo "Retrieve status message is: $OUTPUT" >> $DEBUGFILE echo $OUTPUT exit $EXITCODE