You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Princeton/pu/libexec/check_tcp_multi

136 lines
3.9 KiB
Bash

#!/bin/bash
#
# Uses check_tcp to check multiple tcp ports at once
#
# By Igor Gubenko (igubenko at princeton dot edu)
#
#Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
#[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
#[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
#[-D <days to cert expiry>] [-S <use SSL>] [-E]
#
#Options:
# -h, --help
# Print detailed help screen
# -V, --version
# Print version information
# -H, --hostname=ADDRESS
# Host name, IP Address, or unix socket (must be an absolute path)
# -p, --port=INTEGER
# Port number (default: none)
# -4, --use-ipv4
# Use IPv4 connection
# -6, --use-ipv6
# Use IPv6 connection
# -E, --escape
# Can use \n, \r, \t or \ in send or quit string. Must come before send or quit option
# Default: nothing added to send, \r\n added to end of quit
# -s, --send=STRING
# String to send to the server
# -e, --expect=STRING
# String to expect in server response (may be repeated)
# -A, --all
# All expect strings need to occur in server response. Default is any
# -q, --quit=STRING
# String to send server to initiate a clean close of the connection
# -r, --refuse=ok|warn|crit
# Accept tcp refusals with states ok, warn, crit (default: crit)
# -M, --mismatch=ok|warn|crit
# Accept expected string mismatches with states ok, warn, crit (default: warn)
# -j, --jail
# Hide output from TCP socket
# -m, --maxbytes=INTEGER
# Close connection once more than this number of bytes are received
# -d, --delay=INTEGER
# Seconds to wait between sending string and polling for response
# -D, --certificate=INTEGER
# Minimum number of days a certificate has to be valid.
# -S, --ssl
# Use SSL for the connection.
# -w, --warning=DOUBLE
# Response time to result in warning status (seconds)
# -c, --critical=DOUBLE
# Response time to result in critical status (seconds)
# -t, --timeout=INTEGER
# Seconds before connection times out (default: 10)
# -v, --verbose
# Show details for command-line debugging (Nagios may truncate output)
#
myname=`basename $0`
nagios_plugins='/usr/local/monitoring/nagios/libexec'
check_tcp="${nagios_plugins}/check_tcp"
usage () {
echo "UNKNOWN: Usage: $myname <-H host_or_IP> <-p port1[,port2[...[,portN]]]> <all_other_valid_check_tcp_options>"
exit 3
}
#Usage:check_tcp -H host -p port [-w <warning time>] [-c <critical time>] [-s <send string>]
#[-e <expect string>] [-q <quit string>][-m <maximum bytes>] [-d <delay>]
#[-t <timeout seconds>] [-r <refuse state>] [-M <mismatch state>] [-v] [-4|-6] [-j]
#[-D <days to cert expiry>] [-S <use SSL>] [-E]
warn=""
crit=""
perf="| "
while getopts ":p:H:w:c:s:e:q:m:d:t:r:M:D:46ESjvh" option
do
case "$option" in
H) host="$OPTARG";;
p) ports="$OPTARG";;
h) usage;;
w) warn="$OPTARG"; save="$save -$option $OPTARG";;
c) crit="$OPTARG"; save="$save -$option $OPTARG";;
[seqmdtrDM]) save="$save -$option $OPTARG";;
[v46jSE]) save="$save -$option";;
*) usage;;
esac
done
shift $(($OPTIND-1)); OPTIND=1
if [ "$ports" == "" -o "$host" == "" ]; then
usage
fi
if [ ! -x $check_tcp ]; then
echo "UNKNOWN: \"$check_tcp\" does not exist or is not executable"
exit 3
fi
stat=0
declare -a arr_resp
arr_resp[0]="OK"
arr_resp[1]="WARNING"
arr_resp[2]="CRITICAL"
arr_resp[3]="UNKNOWN"
out=""
#echo "##$save"
OLD_IFS="$IFS"
IFS=","
for port in $ports
do
out_tmp=`eval "$check_tcp -H $host -p $port $save"`
stat_tmp=$?
res_val=`echo $out_tmp | sed 's/.*- \([[:digit:]\.]\{1,\}\) .*/\1/'`
out="$port - $res_val; $out"
perf="${perf}'${port}'=${res_val}s;$warn;$crit;0;3600 "
# Critical has priority to warning, warning has priority to unknown, unknown has priority to ok
if [ "$stat" -eq "0" -a "$stat_tmp" -eq "3" ]; then
stat="3"
elif [ "$stat" -lt "$stat_tmp" ]; then
stat="$stat_tmp"
fi
done
IFS="$OLD_IFS"
echo "${arr_resp[$stat]}: Port - Response time => ${out}$perf"
exit $stat