diff --git a/files/all/usr/lib/nagios/plugins/check_bandwidth.sh b/files/all/usr/lib/nagios/plugins/check_bandwidth.sh new file mode 100644 index 0000000..deddf75 --- /dev/null +++ b/files/all/usr/lib/nagios/plugins/check_bandwidth.sh @@ -0,0 +1,90 @@ +#!/bin/sh +# +# Check bandwidth plugin for Nagios +# +# Usage: check_bandwidth.sh [-i interface] [-s sleep] [-w warning] [-c critical] +# -i, --interface Interface name (eth0 by default) +# -s, --sleep Sleep time between both statistics measures +# -w, --warning Warning value (KB/s) +# -c, --critical Critical value (KB/s) +# -h, --help Display this screen +# +# (c) 2014, Benjamin Dos Santos +# https://github.com/bdossantos/nagios-plugins +# + +while [[ -n "$1" ]]; do + case $1 in + --interface | -i) + interface=$2 + shift + ;; + --sleep | -s) + sleep=$2 + shift + ;; + --warning | -w) + warning=$2 + shift + ;; + --critical | -c) + critical=$2 + shift + ;; + --help | -h) + sed -n '2,11p' "$0" | tr -d '#' + exit 3 + ;; + *) + echo "Unknown argument: $1" + exec "$0" --help + exit 3 + ;; + esac + shift +done + +warning=${warning:=5000} +critical=${critical:=8000} +interface=${interface:=eth0} +sleep=${sleep:=1} + +if [[ $warning -ge $critical ]]; then + echo "UNKNOWN - warning ($warning) can't be greater than critical ($critical)" + exit 3 +fi + +if [[ ! -f "/sys/class/net/${interface}/statistics/rx_bytes" ]] || + [[ ! -f "/sys/class/net/${interface}/statistics/tx_bytes" ]]; then + echo "CRITICAL - Could not fetch '${interface}' interface statistics" + exit 2 +fi + +rx1=$(cat "/sys/class/net/${interface}/statistics/rx_bytes") +tx1=$(cat "/sys/class/net/${interface}/statistics/tx_bytes") +sleep "$sleep" +rx2=$(cat "/sys/class/net/${interface}/statistics/rx_bytes") +tx2=$(cat "/sys/class/net/${interface}/statistics/tx_bytes") + +tx_bps=$((tx2 - tx1)) +rx_bps=$((rx2 - rx1)) +tx_kbps=$((tx_bps / 1024)) +rx_kbps=$((rx_bps / 1024)) + +status="tx ${interface}: $tx_kbps kb/s, rx ${interface}: $rx_kbps kb/s | tx=$tx_kbps rx=$rx_kbps" + +if [[ $rx_kbps -ge $warning ]] || [[ $tx_kbps -ge $warning ]]; then + if [[ $rx_kbps -ge $critical ]] || [[ $tx_kbps -ge $critical ]]; then + exit_status=2 + echo "CRITICAL - $status" + else + exit_status=1 + echo "WARNING - $status" + fi +else + exit_status=0 + echo "OK - $status" +fi + +exit ${exit_status:=3} +