mirror of
https://github.com/opinkerfi/nagios-plugins.git
synced 2024-11-05 01:53:44 +01:00
Merge manage.ruv.is:/opt/misc
This commit is contained in:
commit
9d8946c1a0
164
check_multipath/check_multipath
Executable file
164
check_multipath/check_multipath
Executable file
@ -0,0 +1,164 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Nagios plugin to check the state of Linux device mapper multipath devices
|
||||
#
|
||||
# (C) 2006 Riege Software International GmbH
|
||||
# Licensed under the General Public License, Version 2
|
||||
# Contact: Gunther Schlegel, schlegel@riege.com
|
||||
# Matija Nalis, mnalis+debian@carnet.hr
|
||||
#
|
||||
# v1.0 20060220 gs new script
|
||||
# v1.1 20091020 mnalis fix -n handling to work (parsing not working, ignoring last lun...)
|
||||
|
||||
PROGNAME=`basename $0`
|
||||
PROGPATH=`echo $0 | sed -e 's,[\\/][^\\/][^\\/]*$,,'`
|
||||
REVISION=`echo '$Revision: 1.12 $' | sed -e 's/[^0-9.]//g'`
|
||||
|
||||
MULTIPATH=/sbin/multipath
|
||||
SUDO=/usr/bin/sudo
|
||||
LSMOD=/sbin/lsmod
|
||||
|
||||
print_usage() {
|
||||
echo "Usage:"
|
||||
echo " $PROGNAME [-n NUMPATHS]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -n NUMPATHS If specified there must be NUMPATHS paths present for each LUN"
|
||||
}
|
||||
|
||||
print_help() {
|
||||
print_revision $PROGNAME $REVISION
|
||||
|
||||
echo "Check multipath status."
|
||||
echo ""
|
||||
print_usage
|
||||
echo ""
|
||||
echo "Really simple: runs $MULTIPATH and greps for \"failed\" paths."
|
||||
echo "if NUMPATHS is specified each LUN must have that number of PATHS present."
|
||||
echo ""
|
||||
|
||||
echo "Requires sudo and multipath-tools"
|
||||
echo ""
|
||||
|
||||
echo "Add this to your sudoers file by running visudo to add access:"
|
||||
if [ -r /proc/modules ]; then
|
||||
echo "Cmnd_Alias MULTIPATH=$MULTIPATH -l"
|
||||
else
|
||||
echo "Cmnd_Alias MULTIPATH=$MULTIPATH -l, $SUDO"
|
||||
fi
|
||||
echo "nagios ALL= NOPASSWD: MULTIPATH"
|
||||
echo "The user nagios may very well be nobody or someone else depending on your configuration"
|
||||
echo ""
|
||||
support
|
||||
}
|
||||
|
||||
NUMPATHS=''
|
||||
|
||||
# Information options
|
||||
case "$1" in
|
||||
--help)
|
||||
print_help
|
||||
exit $STATE_OK
|
||||
;;
|
||||
-h)
|
||||
print_help
|
||||
exit $STATE_OK
|
||||
;;
|
||||
--version)
|
||||
print_revision $PLUGIN $REVISION
|
||||
exit $STATE_OK
|
||||
;;
|
||||
-V)
|
||||
print_revision $PLUGIN $REVISION
|
||||
exit $STATE_OK
|
||||
;;
|
||||
-n)
|
||||
shift
|
||||
NUMPATHS="$1"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ ! -x $MULTIPATH ]; then
|
||||
echo "MULTIPATH: UNKNOWN - $MULTIPATH not found"
|
||||
exit $STATE_UNKNOWN
|
||||
fi
|
||||
|
||||
# if not yet root, check sudo
|
||||
if [ $(id -un) != "root" ]; then
|
||||
MULTIPATH="$SUDO $MULTIPATH"
|
||||
# on grsec kernel /proc might be protected
|
||||
if [ ! -r /proc/modules ]; then
|
||||
LSMOD="$SUDO $LSMOD"
|
||||
fi
|
||||
fi
|
||||
|
||||
OUTPUT=$($MULTIPATH -l 2>/dev/null)
|
||||
if [ $? != 0 ]; then
|
||||
# Failed. grab more info why
|
||||
if [ $(id -un) != "root" ] && [ `$SUDO -l | grep -c multipath` -eq 0 ]; then
|
||||
echo "MULTIPATH: UNKNOWN - sudo not configured"
|
||||
exit $STATE_UNKNOWN
|
||||
fi
|
||||
|
||||
MODCOUNT=$($LSMOD | grep -c ^dm_multipath)
|
||||
if [ $MODCOUNT = 0 ]; then
|
||||
echo "MULTIPATH: UNKNOWN - Module dm-multipath not loaded"
|
||||
exit $STATE_UNKNOWN
|
||||
fi
|
||||
|
||||
echo "MULTIPATH: $(MULTIPATH -l 2>&1)"
|
||||
exit $STATE_UNKNOWN
|
||||
fi
|
||||
|
||||
PATHCOUNT=$(echo "$OUTPUT" | wc -l)
|
||||
if [ $PATHCOUNT -eq 0 ]; then
|
||||
echo "MULTIPATH: WARNING - No paths defined"
|
||||
exit $STATEWARNING
|
||||
fi
|
||||
|
||||
FAILCOUNT=$(echo "$OUTPUT" | grep -c failed)
|
||||
if [ $FAILCOUNT -gt 0 ]; then
|
||||
echo "MULTIPATH: CRITICAL - $FAILCOUNT paths failed"
|
||||
exit $STATE_CRITICAL
|
||||
fi
|
||||
|
||||
if [ "$NUMPATHS" ]; then
|
||||
echo "$OUTPUT" | awk -vnumpaths=$NUMPATHS -vrc=0 -vlun= -vtargets=0 '
|
||||
/^\[/ {next} # skip flags (lenny)
|
||||
/^size=/ {next} # skip flags (squeeze)
|
||||
/^\\/ {next} # skip devinfo (lenny)
|
||||
/policy=/ {next} # skip devinfo (squeeze)
|
||||
/^ \\/ {targets++; next} # count targets (lenny)
|
||||
/[0-9]+:[0-9]+:[0-9]+:[0-9]+/ {
|
||||
if (/active undef running/) { targets++ } # count targets (squeeze)
|
||||
next
|
||||
}
|
||||
{
|
||||
# The LUN line
|
||||
# process if this is not first LUN
|
||||
if (lun && numpaths != targets) {
|
||||
printf("CRITICAL: %d of %d paths available for LUN %s\n", targets, numpaths, lun)
|
||||
rc = 1
|
||||
}
|
||||
|
||||
# reset counter
|
||||
targets = 0
|
||||
lun = $0
|
||||
}
|
||||
END {
|
||||
if (lun && numpaths != targets) {
|
||||
printf("CRITICAL: %d of %d paths available for LUN %s\n", targets, numpaths, lun)
|
||||
rc = 1
|
||||
}
|
||||
exit rc
|
||||
}
|
||||
'
|
||||
if [ $? -gt 0 ]; then
|
||||
exit $STATE_CRITICAL
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "MULTIPATH: OK - No failed paths"
|
||||
exit $STATE_OK
|
||||
|
||||
# vim: ts=4:sw=4:noet
|
Loading…
Reference in New Issue
Block a user