From 50e85bcd2ccf86903313d4d9301e936a143b1ec3 Mon Sep 17 00:00:00 2001 From: Cyberes Date: Fri, 21 Apr 2023 23:54:18 -0600 Subject: [PATCH] check_iowait.sh avg over interval --- check_iowait.sh | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/check_iowait.sh b/check_iowait.sh index 1c018db..c9f6fa5 100755 --- a/check_iowait.sh +++ b/check_iowait.sh @@ -7,19 +7,25 @@ if ! command -v iostat &>/dev/null; then exit 1 fi +#!/bin/bash + +# Nagios plugin to check iowait on Linux + # Define usage function function usage { - echo "Usage: $0 [-w ] [-c ]" + echo "Usage: $0 [-w ] [-c ] [-a ]" echo " -w: Warning threshold for iowait percentage (default: 50)" echo " -c: Critical threshold for iowait percentage (default: 75)" + echo " -a: Number of seconds to average iowait (default: 5)" exit 3 } # Parse command line arguments -while getopts "w:c:" opt; do +while getopts "w:c:a:" opt; do case $opt in w) WARNING_THRESHOLD=$OPTARG ;; c) CRITICAL_THRESHOLD=$OPTARG ;; + a) AVERAGE_SECONDS=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" >&2 usage @@ -34,18 +40,24 @@ done # Set default warning and critical thresholds if not provided WARNING_THRESHOLD=${WARNING_THRESHOLD:-50} CRITICAL_THRESHOLD=${CRITICAL_THRESHOLD:-75} +AVERAGE_SECONDS=${AVERAGE_SECONDS:-5} -IOWAIT=$(iostat -c | awk '/^ /{print $4}') +# Get current iowait percentage and number of processes +IOWAIT=$(iostat -c $AVERAGE_SECONDS 2 | awk '/^ /{print $4}' | tail -n 1) +PROCESSES=$(ps -A --no-headers | wc -l) +# Check if iowait percentage is above critical threshold if (($(echo "$IOWAIT > $CRITICAL_THRESHOLD" | bc -l))); then - echo "CRITICAL - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" + echo "CRITICAL - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100 processes=$PROCESSES" exit 2 fi +# Check if iowait percentage is above warning threshold if (($(echo "$IOWAIT > $WARNING_THRESHOLD" | bc -l))); then - echo "WARNING - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" + echo "WARNING - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100 processes=$PROCESSES" exit 1 fi -echo "OK - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100" +# If iowait percentage is below warning threshold, exit with OK status +echo "OK - iowait percentage is $IOWAIT% | iowait=$IOWAIT%;$WARNING_THRESHOLD;$CRITICAL_THRESHOLD;0;100 processes=$PROCESSES" exit 0