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