[Nagiosplug-devel] Best practice for thresholding

Richard Edward Horner rich at richhorner.com
Mon Jun 22 19:33:07 CEST 2009


I don't write plugins in Perl because I write all of them in BASH but
I wrote a single check_value() function that conforms to the threshold
and ranges spec and then I include it in all my scripts. If you're
working from a Perl module, I suppose you could write a similar
function and include it in the module and then just call it from every
script. Here's my relevant BASH code if you want to rewrite it in
Perl. I'm using 999999999 to represent infinity. You can find more
Nagios BASH code at:

http://rhosts.net/nagios/

function check_value {
	# if the range starts with an @, alert if value is inside the range,
otherwise alert if value is outside of range
	INSIDE=`echo "$1" | grep -c '^@'`
	RANGE=`echo "$1" | sed 's/^@//'`

	# start is anything left of the colon or 0
	# end is anything right of the colon or the whole string if there's
no colon or infinity if there is a colon and nothing to the right of
it

	# is there a colon?
	PARTS=`echo "$RANGE" | awk -F : '{ print NF }'`
	if [ $PARTS -gt 1 ] ; then
		START=${RANGE%%:*}
		END=${RANGE##*:}
	else
		START=0
		END=$RANGE
	fi

	# 4. to specify negative infinity, use "~"
	if [ "$START" == "~" ] ; then
		START=-999999999
	fi

	if [ -z "$END" ] ; then
		END=999999999
	fi

	if [ $START -gt $END ] ; then
		echo "In threshold START:END, START must be less than or equal to END"
		range_help
	fi

	# if the range starts with an @, alert if value is inside the range,
otherwise alert if value is outside of range
	# all ranges are inclusive of endpoints so we use less than or equal
on the inside and just less than on the outside
	if [ "$INSIDE" -gt 0 ] ; then
		if [ "$START" -le "$2" -a "$2" -le "$END" ] ; then
			return 1
		fi
	else
		if [ "$2" -lt "$START" -o "$END" -lt "$2" ] ; then
			return 1
		fi
	fi

	return 0
}

# check conditions - yes this is ugly, blame BASH. If you want to
blame me, please provide a cleaner way that is as fast or faster
check_value "$CRITICAL" "$VALUE"
if [ $? -gt 0 ] ; then
	STATE=$STATE_CRITICAL
else
	check_value "$WARNING" "$VALUE"
	if [ $? -gt 0 ] ; then
		STATE=$STATE_WARNING
	else
		STATE=$STATE_OK
	fi
fi

Rich(ard)

On Mon, Jun 22, 2009 at 5:22 PM, John Vincent<nagiosplug-devel at lusis.org> wrote:
> So I've been attempting to use check_memcached and in the process was
> cleaning up some invalid perfdata output. I also noticed that the
> thresholding is somewhat broken. This plugin, like many database
> plugins, has a hit ratio metric. Hit ratio metrics make the most sense
> when approcahed from a "warning/critical below X%" (at least in my
> mind). So if my hit ratio drops below 75%, I want a warning and if it
> goes below 50% I want a critical.
>
> What's the best way to handle this with Nagios::Plugin? Should the
> logic be done in the script or should it be done in the module itself?
>
> John E. Vincent
>
> ------------------------------------------------------------------------------
> Are you an open source citizen? Join us for the Open Source Bridge conference!
> Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250.
> Need another reason to go? 24-hour hacker lounge. Register today!
> http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org
> _______________________________________________________
> Nagios Plugin Development Mailing List Nagiosplug-devel at lists.sourceforge.net
> Unsubscribe at https://lists.sourceforge.net/lists/listinfo/nagiosplug-devel
> ::: Please include plugins version (-v) and OS when reporting any issue.
> ::: Messages without supporting info will risk being sent to /dev/null
>



-- 
Richard Edward Horner
Engineer / Composer / Electric Guitar Virtuoso
richhorner.com | rhosts.net | sabayonlinux.org




More information about the Devel mailing list