I want to be able to monitor disk space by available size, rather than available percentage.
I have Googled and found the following solution at http://serverfault.com/questions/309913 ... heck-nt-co
As suggested, I used VIM to create /usr/local/nagios/libexec/check_disk_by_size.sh which looks like this (the third version of the script)
Code: Select all
#!/bin/bash
# Date: 2015-06-30
# Purpose: A wrapper script for check_nt to set threshold for exact space
# free rather than just percentage. Useful on VERY large drives.
# Example: check_disk_by_size.sh -H 192.168.0.1 -l c -w 10240 -c 5120
usage() { echo "$0 -H host [-s password] [-p port] [-w warning] [-c critical] [-l params]" 1>&2; exit 1; }
while getopts ":H:s:p:l:w:c:" opt; do
case "${opt}" in
H ) HOST_NAME=$OPTARG;;
s ) PASSW0RD=$OPTARG;;
p ) PORT=$OPTARG;;
l ) DISC=$OPTARG;;
w ) WARN_THRESHOLD=$OPTARG;;
c ) CRITICAL_THRESHOLD=$OPTARG;;
\?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
: ) echo "Option -$OPTARG requires an argument." >&2; exit 1;;
esac
done
shift $((OPTIND-1))
if [[ -z "${HOST_NAME}" ]] || [[ -z "${PASSW0RD}" ]] || [[ -z "${PORT}" ]] || [[ -z "${DISC}" ]] || [[ -z "${WARN_THRESHOLD}" ]] || [[ -z "${CRITICAL_THRESHOLD}" ]] ; then
usage
fi
CHECKRESULT=`/usr/local/nagios/libexec/check_nt -H ${HOST_NAME} -p ${PORT} -s ${PASSW0RD} -v USEDDISKSPACE -l ${DISC}`
PERFDATA=`echo ${CHECKRESULT} | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $2 }'`
FREESPACE=`echo ${CHECKRESULT} | awk -F"- " '{ print $4 }' | awk -F "|" '{ print $1 }'`
USEDSPACE=`echo ${CHECKRESULT} | awk -F"- " '{ print $3 }'`
TOTALSPACE=`echo ${CHECKRESULT} | awk -F"- " '{ print $2 }'`
if [[ -z ${FREESPACE} ]]; then
## Command failed or server offline
echo "ERROR ERROR: Command failed"
exit 1
fi
SIZE=`echo $FREESPACE | awk '{ print $2 }'`
UNIT=`echo $FREESPACE | awk '{ print $3 }'`
if [[ ${UNIT} == "Gb" ]]; then
SIZE=`echo ${SIZE} \* 1024 | bc`
fi
if [[ `echo "${SIZE} >= ${WARN_THRESHOLD}" | bc` -eq 1 ]]; then
echo "${DISC}:\ OK - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
exit 0
elif [[ `echo "${SIZE} < ${WARN_THRESHOLD}" | bc` -eq 1 && `echo "${SIZE} > ${CRITICAL_THRESHOLD}" | bc` -eq 1 ]]; then
echo "${DISC}:\ WARNING - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
exit 1
elif [[ `echo "${SIZE} <= ${CRITICAL_THRESHOLD}" | bc` -eq 1 ]]; then
echo "${DISC}:\ CRITICAL - ${TOTALSPACE} - ${USEDSPACE} - ${FREESPACE} | ${PERFDATA}"
exit 2
fi
The syntax to run a manual check is stated as (for example):
Code: Select all
./check_disk_by_size.sh -s "NyNagiosPassword" -H 192.168.999.999 -l c -w 14240 -c 5120
Code: Select all
./check_disk_by_size.sh -H host [-s password] [-p port] [-w warning] [-c critical] [-l params]
Cheers and thanks in advance!