Windows Disk I/O-Überwachung

Ich war länger auf der Suche nach einem praktischen Tool und wurde fündig: http://www.nagios-wiki.de/nagios/howtos/hd_io_ms

Um die I/O einer Festplatte überprüfen zu können, muß unter Windows noch ein zusätzlicher SNMP-Agent installiert werden – http://www.snmp-informant.com/

Danach kann jede Partition extra abgerufen werden. Ich habe das ursprüngliche Script etwas angepasst, damit die Status in Icinga richtig angezeigt werden und man alle Parameter über die Commandline angeben kann.

#!/bin/bash
# Skriptname lautet "check_snmp_diskio_win"
# Original von http://www.nagios-wiki.de/nagios/howtos/hd_io_ms
# 
# command.cfg - Konfigurationsbeispiel:
# 'check_snmp_diskio_win' command definition
# define command{
#     command_name    check_snmp_diskio_win
#     command_line    $USER1$/check_snmp_diskio_win.sh -H $HOSTADDRESS$ -C $ARG1$ -D $ARG2$ -w $ARG3$ -c $ARG4$
# }

. /usr/local/nagios/libexec/utils.sh

ECHO=/bin/echo
READ_OID=1.3.6.1.4.1.9600.1.1.1.1.15.2
WRITE_OID=1.3.6.1.4.1.9600.1.1.1.1.18.2

while /usr/bin/test -n "$1"; do
 case "$1" in
 -H)
 HOST=$2;
 shift;
 ;;
 -C)
 COMMUNITY=$2;
 shift;
 ;;
 -D)
 DRIVE=$2;
 shift;
 ;;
 -w)
 WARNING=$2;
 shift;
 ;;
 -c)
 CRITICAL=$2;
 shift;
 ;;
 *)
 $ECHO "FALSCH"
 exit $STATE_UNKNOWN
 esac
 shift
done

case "$DRIVE" in
 C)
 DRIVE=67.58;
 ;;
 D)
 DRIVE=68.58;
 ;;
 E)
 DRIVE=69.58;
 ;;
 F)
 DRIVE=70.58;
 ;;
 G)
 DRIVE=71.58;
 ;;
 H)
 DRIVE=72.58;
 ;;
 I)
 DRIVE=73.58;
 ;;
 J)
 DRIVE=74.58;
 ;;
 K)
 DRIVE=75.58;
 ;;
 L)
 DRIVE=76.58;
 ;;
 *)
 $ECHO "Unbekannter Laufwerksbuchstabe"
 exit $STATE_UNKNOWN
esac

SUM_read=0
SUM_write=0
ERROR_COUNTER=0

for i in 1 2 3 4 5 6 7 8 9 10
do
 read_VALUE=$(/usr/bin/snmpget -c $COMMUNITY -v1 $HOST $READ_OID.$DRIVE | awk '{print $NF}')
 write_VALUE=$(/usr/bin/snmpget -c $COMMUNITY -v1 $HOST $WRITE_OID.$DRIVE | awk '{print $NF}')
 if [ ! $write_VALUE ] || [ ! $read_VALUE ]
 then
 let ERROR_COUNTER=$ERROR_COUNTER+1
 fi
 SUM_read=`echo "scale=2 ; $SUM_read + $read_VALUE" | bc`
 SUM_write=`echo "scale=2 ; $SUM_write + $write_VALUE" | bc`
 sleep 1
done
if (( $ERROR_COUNTER >= 10 ))
 then
 echo "UNKNOWN: Unable to get SNMP-information ($ERROR_COUNTER faulty trails)"
 exit $STATE_UNKNOWN
fi
SUM_read=`echo "scale=2 ; $SUM_read / 10240" | bc`
SUM_write=`echo "scale=2 ; $SUM_write / 10240" | bc`
echo "Leserate (KBytes/sec): $SUM_read ; Schreibrate (KBytes/sec): $SUM_write|Read=$SUM_read;;;; Write=$SUM_write;;;;"

SUM_read_int=${SUM_read/.*}
SUM_write_int=${SUM_write/.*}

if [ ! $SUM_read_int ]; then
 SUM_read_int=0
fi

if [ ! $SUM_write_int ]; then
 SUM_write_int=0
fi

if [ $SUM_read_int -lt $WARNING ] && [ $SUM_write_int -lt $WARNING ] && [ $SUM_read_int -lt $CRITICAL ] && [ $SUM_write_int -lt $CRITICAL ]; then
#    echo OK
 exit $STATE_OK
elif [ $SUM_read_int -ge $WARNING ] || [ $SUM_write_int -ge $WARNING ] && [ $SUM_read_int -lt $CRITICAL ] && [ $SUM_write_int -lt $CRITICAL ]; then
#    echo WARN
 exit $STATE_WARNING
else [ $SUM_read_int -ge $WARNING ] || [ $SUM_write_int -ge $WARNING ] && [ $SUM_read_int -ge $CRITICAL ] || [ $SUM_write_int -ge $CRITICAL ]
#    echo CRIT
 exit $STATE_CRITICAL
fi

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.