diff --git a/Makefile b/Makefile index 8b0cbbe87b5585eee2635d22473b93428e1787fd..30267b05174dc2c4f4308fcc1bec098b652c453f 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ LIBEXECDIR = /usr/local/nagios/libexec/ SCRIPTS = check_cups check_glsa check_saned check_lpd check_hddtemp \ check_link_status check_true check_lysrdiff check_syslog \ check_ping check_enodia_monitored check_hostextinfo \ - check_hydra check_datorhandbok check_no_server + check_hydra check_datorhandbok check_no_server check_iostatE all:; diff --git a/check_iostatE b/check_iostatE new file mode 100755 index 0000000000000000000000000000000000000000..b7b15b683724fdf9f0cb113bf2f0adb6dc7f3670 --- /dev/null +++ b/check_iostatE @@ -0,0 +1,147 @@ +#!/bin/ksh + +PATH=/opt/lysator/bin:/usr/bin:/usr/sbin +export PATH + +RSH=ssh +GAWK=gawk +IOSTAT=iostat +VERBOSE=0 + +HOST="" + +HWARN=2 +HCRIT=4 + +TWARN=1 +TCRIT=3 + +SWARN=5 +SCRIT=10 + +while [ "$1" != "" ]; do + case "$1" in + -v|--verbose) + VERBOSE=1 + ;; + + -H|--host) + HOST=$2 + shift + ;; + + -R|--rsh) + RSH=$2 + shift + ;; + + -hc|--hard-critical) + HCRIT=$2 + shift + ;; + + -hw|--hard-warning) + HWARN=$2 + shift + ;; + + -tc|--transport-critical) + TCRIT=$2 + shift + ;; + + -tw|--transport-warning) + TWARN=$2 + shift + ;; + + -sc|--soft-critical) + SCRIT=$2 + shift + ;; + + -sw|--soft-warning) + SWARN=$2 + shift + ;; + + -h|--help) + echo "Usage: $0 [options]" + echo "Options:" + echo "\t-h | --help Display this message" + echo "\t-v | --verbose Verbose (multiline) output" + echo "\t-H | --host <name> Host to check (${HOST:-localhost})" + echo "\t-R | --rsh <path> Path to 'rsh' (or 'ssh') program ($RSH)" + echo "\t-hc | --hard-critical <level> Hard error critical level ($HCRIT)" + echo "\t-hw | --hard-warning <level> Hard error warning level ($HWARN)" + echo "\t-sc | --soft-critical <level> Soft error critical level ($SCRIT)" + echo "\t-sw | --soft-warning <level> Soft error warning level ($SWARN)" + echo "\t-tc | --transport-critical <level> Transport error critical level ($TCRIT)" + echo "\t-tw | --transport-warning <level> Transport error warning level ($TWARN)" + exit 0 + ;; + + -*) echo "$0: invalid switch: $1" + exit 1 + ;; + + *) echo "$0: extra arguments: $*" + exit 1 + ;; + esac + shift +done +if [ "$HOST" = "" ]; then + CMD="$IOSTAT -En" +else + CMD="$RSH -n $HOST $IOSTAT -En" +fi + + +exec $CMD | $GAWK -vverbose=$VERBOSE \ + -vhcrit=$HCRIT -vhwarn=$HWARN \ + -vtcrit=$TCRIT -vtwarn=$TWARN \ + -vscrit=$SCRIT -vswarn=$SWARN \ + '\ + BEGIN { gtotal=0; ndisks=0; disks=""; ncrit=0; nwarn=0; crits=""; warns="" } \ + /^c[0-9][0-9]*t[0-9][0-9]*d[0-9][0-9]*/ { dev=$1; serr[dev]=$4; herr[dev]=$7; terr[dev]=$10; vendor[dev]=""; pfa[dev]="" } \ + /^Vendor:/ { vendor[dev]=$2; product[dev]=$4; rev[dev]=$6; serial[dev]=$9 } \ + /^Model:/ { vendor[dev]=""; product[dev]=$2; rev[dev]=$4; serial[dev]=$7 } \ + /^Size:/ { size[dev]=$2 } \ + /^Media/ { merr[dev]=$3; dnrerr[dev]=$7; nderr[dev]=$10; rerr[dev]=$12 } \ + /^Illegal/ { \ + irerr[dev]=$3; pfa[dev]=$7; \ + total[dev]=serr[dev]+herr[dev]+terr[dev]; + if (verbose) \ + print dev, "(" product[dev], rev[dev] ")", ":", total[dev], ":", serr[dev], herr[dev], terr[dev], ":", merr[dev], dnrerr[dev], nderr[dev], rerr[dev], irerr[dev], pfa[dev];\ + gtotal += total[dev]; \ + ndisks++; disks=disks " " dev; \ + nsoft+=serr[dev]; nhard+=herr[dev]; ntran+=terr[dev]; \ + if (herr[dev] >= hcrit) { \ + ncrit++; crits=crits " " dev; \ + } else if (herr[dev] >= hwarn) { \ + nwarn++; warns=warns " " dev; \ + } else if (terr[dev] >= tcrit) { \ + ncrit++; crits=crits " " dev; \ + } else if (terr[dev] >= twarn) { \ + nwarn++; warns=warns " " dev; \ + } else if (serr[dev] >= scrit) { \ + ncrit++; crits=crits " " dev; \ + } else if (serr[dev] >= swarn) { \ + nwarn++; warns=warns " " dev; \ + } } \ + END { \ + if (ncrit > 0) { \ + print "CRITICAL -", ncrit+nwarn "/" ndisks, "disks with errors (" nsoft, "soft", nhard, "hard", ntran, "transport):" crits warns; exit 2 \ + } else if (nwarn > 0) { \ + print "WARNING -", ncrit+nwarn "/" ndisks, "disks with errors (" nsoft, "soft", nhard, "hard", ntran, "transport):" crits warns; exit 1 \ + } else { \ + print "OK -", ndisks, "disks checked with", gtotal, "errors (" nsoft, "soft", nhard, "hard", ntran, "transport):" disks}} \ + ' + + +# if (total >= crit) { \ +# print "CRITICAL -", dev, ":", total, "errors (soft:" serr, "hard:" herr, "transport:" terr, "med:" merr, "dnr:" dnrerr, "dev:" nderr, "rec:" rerr, "req:" irerr, "pfa:" pfa ")"; exit 2 \ +# } else if (total >= warn) { \ +# print "CRITICAL -", dev, ":", total, "errors (soft:" serr, "hard:" herr, "transport:" terr, "med:" merr, "dnr:" dnrerr, "dev:" nderr, "rec:" rerr, "req:" irerr, "pfa:" pfa ")"; exit 2 \ +# } else { gtotal+=total; disks++ }} \