Search Exchange
Search All Sites
Nagios Live Webinars
Let our experts show you how Nagios can help your organization.Login
Directory Tree
Check IO stats of one or all disks
1.0
2011-09-07
- Nagios 3.x
GPL
121704
File | Description |
---|---|
check_diskstat.sh | Fixed read and written bytes per seconds in output |
check_all_diskstat.sh | Please, review path to check_diskstat.sh before using it |
This plug-in checks IO stats of one (or all) disk. It can be used to send alerts when maximum hard drive IO/s or sectors read|write/s is reached
Usage:
./check_diskstat.sh -d DEVICE -w tps,read,write -c tps,read,write | -h
-d DEVICE DEVICE must be without /dev (ex: -d sda)
-w/c TPS,READ,WRITE TPS means transfer per seconds (aka IO/s)
READ and WRITE are in sectors per seconds
Example: ./check_diskstat.sh -d sda -w 200,100000,100000 -c 300,200000,200000
This plugin use /sys filesystem for retrieving data. Average values are then calculated by keeping an history file.
In order to check all disks on your system, you can use check_all_diskstat.sh. (Please, review it to correctly set path to check_diskstat.sh)
Usage:
./check_diskstat.sh -d DEVICE -w tps,read,write -c tps,read,write | -h
-d DEVICE DEVICE must be without /dev (ex: -d sda)
-w/c TPS,READ,WRITE TPS means transfer per seconds (aka IO/s)
READ and WRITE are in sectors per seconds
Example: ./check_diskstat.sh -d sda -w 200,100000,100000 -c 300,200000,200000
This plugin use /sys filesystem for retrieving data. Average values are then calculated by keeping an history file.
In order to check all disks on your system, you can use check_all_diskstat.sh. (Please, review it to correctly set path to check_diskstat.sh)
Reviews (3)
bymonty, September 6, 2018
There is a better way to get the modify timestamp of a file - check the -c option of stat:
OLDDISKSTAT_EPOCH=$(stat $HISTFILE -c %Y)
Furthermore the perfdata documentation states, that you should add the warning and crit levels:
echo "${OUTPUT}summary: $TPS io/s, read $SECTORS_READ sectors (${KBYTES_READ_PER_SEC}kB/s), write $SECTORS_WRITE sectors (${KBYTES_WRITTEN_PER_SEC}kB/s) in $TIME seconds | tps=${TPS};${WARN_TPS};${CRIT_TPS};; read=${BYTES_READ_PER_SEC};${WARN_READ};${CRIT_READ};; write=${BYTES_WRITTEN_PER_SEC};${WARN_WRITE};${CRIT_WRITE};;"
OLDDISKSTAT_EPOCH=$(stat $HISTFILE -c %Y)
Furthermore the perfdata documentation states, that you should add the warning and crit levels:
echo "${OUTPUT}summary: $TPS io/s, read $SECTORS_READ sectors (${KBYTES_READ_PER_SEC}kB/s), write $SECTORS_WRITE sectors (${KBYTES_WRITTEN_PER_SEC}kB/s) in $TIME seconds | tps=${TPS};${WARN_TPS};${CRIT_TPS};; read=${BYTES_READ_PER_SEC};${WARN_READ};${CRIT_READ};; write=${BYTES_WRITTEN_PER_SEC};${WARN_WRITE};${CRIT_WRITE};;"
bykalavan, January 4, 2017
Plugin is reading /sys/block/DEVICE/stat file, so does not depend on output of other programs (like iostat). Also keeps continuous measurement of system by keeping previous read in temporary file.
One thing to point out though: Plugin checks read/write tresholds against bytes read/written per second, not against sectors per second as help states.
One thing to point out though: Plugin checks read/write tresholds against bytes read/written per second, not against sectors per second as help states.
byartickl, June 13, 2013
It's very useful check which must be turned on for every server!
PS: but small changes for check_all_diskstat.sh can be applied as soon it not returning a correct exit status for nagios notification.
I make some changes which can help somebody else:
###################
#!/bin/bash
EXITCODE=0
CHK=/usr/lib/nagios/plugins/check_diskstat.sh
WARN=${1:-"300,10000,10000"}
CRIT=${2:-"400,20000,20000"}
for DEVICE in `ls /sys/block`; do
if [ -L /sys/block/$DEVICE/device ]; then
DEVNAME=$(echo /dev/$DEVICE | sed 's#!#/#g')
echo -n "$DEVNAME: "
OUTPUT="`$CHK -d $DEVICE -w $WARN -c $CRIT`"
STATUS=$?
if [ "$EXITCODE" -le "$STATUS" ]; then
EXITCODE=$STATUS;
fi
echo $OUTPUT | sed "s#=#_$DEVNAME=#g"
fi
done
exit $EXITCODE
###################
PS: but small changes for check_all_diskstat.sh can be applied as soon it not returning a correct exit status for nagios notification.
I make some changes which can help somebody else:
###################
#!/bin/bash
EXITCODE=0
CHK=/usr/lib/nagios/plugins/check_diskstat.sh
WARN=${1:-"300,10000,10000"}
CRIT=${2:-"400,20000,20000"}
for DEVICE in `ls /sys/block`; do
if [ -L /sys/block/$DEVICE/device ]; then
DEVNAME=$(echo /dev/$DEVICE | sed 's#!#/#g')
echo -n "$DEVNAME: "
OUTPUT="`$CHK -d $DEVICE -w $WARN -c $CRIT`"
STATUS=$?
if [ "$EXITCODE" -le "$STATUS" ]; then
EXITCODE=$STATUS;
fi
echo $OUTPUT | sed "s#=#_$DEVNAME=#g"
fi
done
exit $EXITCODE
###################