����JFIF��x�x����'
| Server IP : 78.140.185.180 / Your IP : 216.73.216.170 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/1630575/task/1630575/root/proc/1630575/root/lib64/nagios/plugins/base/ |
Upload File : |
#!/bin/bash
DISK=
E_OK=0
E_WARNING=1
E_CRITICAL=2
E_UNKNOWN=3
show_help() {
echo "$0 -d DEVICE | -h"
echo
echo "This plugin is used to show disk IO and IOPS."
echo
echo "Example: "
echo " -d DEVICE DEVICE must be without /dev (ex: -d sda)"
echo
echo "If no disk device is specified then plugin checks all active disks in the system"
echo "-w and -c - warning and critical value for IO latency in milliseconds"
}
# process args
while [ ! -z "$1" ]; do
case $1 in
-d) shift; DISK=$1 ;;
-h) show_help; exit 1 ;;
-w) shift; WARN=$1 ;;
-c) shift; CRIT=$1 ;;
esac
shift
done
mkdir -p /tmp/diskstat
if [ -z "$DISK" ]; then
for DEVICE in `ls /sys/block`; do
if [ -L /sys/block/$DEVICE/device ]; then
array+=($DEVICE)
fi
done
else
OIFS=$IFS # keep original IFS (internal field separator)
IFS=',' # set delimiter to ','
DEVICE=$DISK
for x in $DEVICE
do
array+=($x)
IFS=$OIFS # return original IFS values
done
fi
for DEVICE in ${array[@]}; do
# generate HISTFILE filename
HISTFILE=/tmp/diskstat/check_diskstat.$DEVICE
readdiskstat() {
if [ ! -f "/sys/block/$DEVICE/stat" ]; then
return $E_UNKNOWN
fi
cat /sys/block/$DEVICE/stat
}
readhistdiskstat() {
[ -f $HISTFILE ] && cat $HISTFILE
}
NEWDISKSTAT=$(readdiskstat $DEVICE)
if [ $? -eq $E_UNKNOWN ]; then
echo "Cannot read disk stats, check your /sys filesystem for $DEVICE"
exit $E_UNKNOWN
fi
if [ ! -f $HISTFILE ]; then
for DEVICE in ${array[@]}; do
HISTFILE=/tmp/diskstat/check_diskstat.$DEVICE # reassign variable from external cycle
NEWDISKSTAT=$(readdiskstat $DEVICE) # reassign variable from external cycle
echo $NEWDISKSTAT >$HISTFILE
echo "UNKNOWN - Initial buffer creation for $DEVICE..."
done
exit $E_UNKNOWN
else
OLDDISKSTAT=$(readhistdiskstat)
if [ $? -ne 0 ]; then
echo "Cannot read histfile $HISTFILE..."
exit $E_UNKNOWN
fi
OLDDISKSTAT_TIME=$(stat -c %y $HISTFILE)
OLDDISKSTAT_EPOCH=$(date -d "$OLDDISKSTAT_TIME" +%s)
NEWDISKSTAT_EPOCH=$(date +%s)
echo $NEWDISKSTAT >$HISTFILE
# now we have old and current stat;
# let compare it
OLD_SECTORS_READ=$(echo $OLDDISKSTAT | awk '{print $3}')
NEW_SECTORS_READ=$(echo $NEWDISKSTAT | awk '{print $3}')
OLD_READ=$(echo $OLDDISKSTAT | awk '{print $1}')
NEW_READ=$(echo $NEWDISKSTAT | awk '{print $1}')
OLD_WRITE=$(echo $OLDDISKSTAT | awk '{print $5}')
NEW_WRITE=$(echo $NEWDISKSTAT | awk '{print $5}')
OLD_SECTORS_WRITTEN=$(echo $OLDDISKSTAT | awk '{print $7}')
NEW_SECTORS_WRITTEN=$(echo $NEWDISKSTAT | awk '{print $7}')
OLD_READ_LATENCY=$(echo $OLDDISKSTAT | awk '{print $4}')
NEW_READ_LATENCY=$(echo $NEWDISKSTAT | awk '{print $4}')
OLD_WRITE_LATENCY=$(echo $OLDDISKSTAT | awk '{print $8}')
NEW_WRITE_LATENCY=$(echo $NEWDISKSTAT | awk '{print $8}')
# kernel handles sectors by 512bytes
# http://www.mjmwired.net/kernel/Documentation/block/stat.txt
SECTORBYTESIZE=512
let "SECTORS_READ = $NEW_SECTORS_READ - $OLD_SECTORS_READ"
let "SECTORS_WRITE = $NEW_SECTORS_WRITTEN - $OLD_SECTORS_WRITTEN"
let "TIME = $NEWDISKSTAT_EPOCH - $OLDDISKSTAT_EPOCH"
let "BYTES_READ_PER_SEC = $SECTORS_READ * $SECTORBYTESIZE / $TIME"
let "BYTES_WRITTEN_PER_SEC = $SECTORS_WRITE * $SECTORBYTESIZE / $TIME"
let "TPS=($NEW_READ - $OLD_READ + $NEW_WRITE - $OLD_WRITE) / $TIME"
let "KBYTES_READ_PER_SEC = $BYTES_READ_PER_SEC / 1024"
let "KBYTES_WRITTEN_PER_SEC = $BYTES_WRITTEN_PER_SEC / 1024"
let "RD_IOS=$NEW_READ - $OLD_READ"
let "WR_IOS=$NEW_WRITE - $OLD_WRITE"
READ_LATENCY=0
WRITE_LATENCY=0
[[ $RD_IOS -gt 0 ]] && let "READ_LATENCY=($NEW_READ_LATENCY - $OLD_READ_LATENCY)/$RD_IOS"
[[ $WR_IOS -gt 0 ]] && let "WRITE_LATENCY=($NEW_WRITE_LATENCY - $OLD_WRITE_LATENCY)/$WR_IOS"
OUTPUT=""
EXITCODE=$E_OK
if [[ -n $CRIT ]] && [[ $READ_LATENCY -gt $CRIT || $WRITE_LATENCY -gt $CRIT ]]
then
OUTPUT="$DEVICE latency greater than critical value;"
EXITCODE=$E_CRITICAL
elif [[ -n $WARN ]] && [[ $READ_LATENCY -gt $WARN || $WRITE_LATENCY -gt $WARN ]]
then
OUTPUT="$DEVICE latency greater than warning value;"
EXITCODE=$E_WARNING
fi
RESULT+=$(echo "${OUTPUT} ${DEVICE} $TPS io/s, read ${DEVICE} $SECTORS_READ sectors (${KBYTES_READ_PER_SEC}kB/s), write ${DEVICE} $SECTORS_WRITE sectors (${KBYTES_WRITTEN_PER_SEC}kB/s) in $TIME seconds, $READ_LATENCY ms read latency, $WRITE_LATENCY ms write latency")
PERFDATA+=$(echo "${DEVICE}_tps=${TPS};;; ${DEVICE}_read=${BYTES_READ_PER_SEC};;; ${DEVICE}_write=${BYTES_WRITTEN_PER_SEC};;; ${DEVICE}_read_latency=${READ_LATENCY};;; ${DEVICE}_write_latency=${WRITE_LATENCY};;; ")
fi
done
echo "$RESULT | $PERFDATA"
exit $EXITCODE