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
Kommentare