Everyone that uses Nagios knows about the basic check_ping plugin. However, today I needed a light version in bash with the same functionality that its easy to modify…
The result is seen below. My Nagios ping-plugin checks the rtt avg time against the treshold values for critical and warning. I never bothered to check for packet losses because that wasn’t the purpose for this script. It only checks ping avg time but could easily be customized to check other things as well.
nagios-check-ping.sh
#!/bin/bash # This script pings a host and compares critical and warning tresholds against avg rtt (ms) # Syntax: nagios-check-ping.sh HOST CRITICAL WARNING # Example: nagios-check-ping.sh www.sunet.se 10 20 if [ ! -n "$1" ] then echo "UNKNOWN: Missing argument HOSTNAME..." exit 3 fi if [ ! -n "$2" ] then echo "UNKNOWN: Missing argument WARNING..." exit 3 fi if [ ! -n "$3" ] then echo "UNKNOWN: Missing argument CRITICAL..." exit 3 fi AVG=`ping -n -c 5 $1 | awk -F/ '/^rtt/ { print $5 }' | awk -F '.' '{ print $1; }'` if [ ! -n "$AVG" ] then echo "CRITICAL: Error pinging" exit 2 elif [ $AVG -le "$2" ] then SC="OK" EX=0 elif [ $AVG -le "$3" ] then SC="WARNING" EX=1 else SC="CRITICAL" EX=2 fi echo "$SC: Average response time is $AVG ms" exit $EX
Run it like this:
> nagios-check-ping.sh www.sunet.se 10 20
Example output:
WARNING Average response time is 20 ms