From 7c73fbd4c2f7fe38512439bb8443fabdfdbf90a8 Mon Sep 17 00:00:00 2001 From: Cyberes Date: Fri, 21 Apr 2023 23:54:18 -0600 Subject: [PATCH] check_iowait.sh from chatgpt --- check_iowait.sh | 65 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/check_iowait.sh b/check_iowait.sh index efc87b4..1c018db 100755 --- a/check_iowait.sh +++ b/check_iowait.sh @@ -1,4 +1,5 @@ #!/bin/bash +# Nagios plugin to check iowait on Linux if ! command -v iostat &>/dev/null; then echo "iostat not found! Please install sysstat:" @@ -6,27 +7,45 @@ if ! command -v iostat &>/dev/null; then exit 1 fi -if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && [ "$3" = "-c" ] && [ "$4" -gt "0" ]; then - IOWAIT=$(iostat | sed -n "4p" | awk {'print $4'} | cut -d. -f1) - if [ "$IOWAIT" -ge "$4" ]; then - echo "IO Wait: CRITICAL - $IOWAIT % |IOWAIT=$IOWAIT;;;;" - exit 2 - elif [ "$IOWAIT" -ge "$2" ]; then - echo "IO Wait: WARNING - $IOWAIT % |IOWAIT=$IOWAIT;;;;" - exit 1 - else - echo "IO Wait: OK - $IOWAIT % |IOWAIT=$IOWAIT;;;;" - exit 0 - fi -else - echo "$0 v1.0" - echo "" - echo "Usage:" - echo "$0 -w -c " - echo "" - echo "warnlevel and critlevel is percentage value without %" - echo " - echo "EXAMPLE: check_iowait -w 90 -c 95 - echo "" - exit +# Define usage function +function usage { + echo "Usage: $0 [-w ] [-c ]" + echo " -w: Warning threshold for iowait percentage (default: 50)" + echo " -c: Critical threshold for iowait percentage (default: 75)" + exit 3 +} + +# Parse command line arguments +while getopts "w:c:" opt; do + case $opt in + w) WARNING_THRESHOLD=$OPTARG ;; + c) CRITICAL_THRESHOLD=$OPTARG ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + usage + ;; + :) + echo "Option -$OPTARG requires an argument." >&2 + usage + ;; + esac +done + +# Set default warning and critical thresholds if not provided +WARNING_THRESHOLD=${WARNING_THRESHOLD:-50} +CRITICAL_THRESHOLD=${CRITICAL_THRESHOLD:-75} + +IOWAIT=$(iostat -c | awk '/^ /{print $4}') + +if (($(echo "$IOWAIT > $CRITICAL_THRESHOLD" | bc -l))); then + echo "CRITICAL - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" + exit 2 fi + +if (($(echo "$IOWAIT > $WARNING_THRESHOLD" | bc -l))); then + echo "WARNING - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" + exit 1 +fi + +echo "OK - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" +exit 0