����JFIF��x�x����'403WebShell
403Webshell
Server IP : 78.140.185.180  /  Your IP : 3.149.249.124
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 :  /usr/lib64/nagios/plugins/base/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /usr/lib64/nagios/plugins/base/check_diskstat
#!/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

Youez - 2016 - github.com/yon3zu
LinuXploit