#!/bin/bash # Nagios plugin to check iowait on Linux if ! command -v iostat &>/dev/null; then echo "iostat not found! Please install sysstat:" echo "sudo apt install sysstat" exit 1 fi #!/bin/bash # Nagios plugin to check iowait on Linux # Define usage function function usage { 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:a:" opt; do case $opt in w) WARNING_THRESHOLD=$OPTARG ;; c) CRITICAL_THRESHOLD=$OPTARG ;; a) AVERAGE_SECONDS=$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} AVERAGE_SECONDS=${AVERAGE_SECONDS:-5} # 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" 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" exit 1 fi # 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" exit 0