-
Hahn Axel (hahn) authoredHahn Axel (hahn) authored
check_netstat 2.69 KiB
#!/bin/bash
# ======================================================================
#
# Check NETSTAT and show connections
#
# requirements:
# - netstat
#
# ----------------------------------------------------------------------
# 2020-07-08 v1.0 <axel.hahn@iml.unibe.ch>
# 2022-10-25 v1.1 <axel.hahn@unibe.ch> shell fixes; no tmpfiles; IML look
# ======================================================================
. $(dirname $0)/inc_pluginfunctions
self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
self_APPVERSION=1.1
# ----------------------------------------------------------------------
# functions
# ----------------------------------------------------------------------
function showHelp(){
cat <<EOF
______________________________________________________________________
$self_APPNAME
v$self_APPVERSION
(c) Institute for Medical Education - University of Bern
Licence: GNU GPL 3
______________________________________________________________________
Count number of network connections.
SYNTAX:
$(basename $0) [ -w value -c value -h ]
-w VALUE cpu usage warning level (default: 75)
-c VALUE cpu usage critical level (default: 90)
-h or --help show this help.
PARAMETERS:
None.
EXAMPLE:
$(basename $0) -w 60 -c 80 -p 40
If there is no -w and -c then the result is always OK.
EOF
}
# ----------------------------------------------------------------------
# MAIN
# ----------------------------------------------------------------------
# --- check required tools
ph.require netstat
# --- check param -h
case "$1" in
"--help"|"-h")
showHelp
exit 0
;;
*)
esac
# --- set optional limits
typeset -i iWarnLimit=$( ph.getValueWithParam 0 w "$@")
typeset -i iCriticalLimit=$( ph.getValueWithParam 0 c "$@")
# --- count all connections
typeset -i iTotal=0
typeset -i iEst=0
typeset -i iListen=0
typeset -i iWait=0
netdata=$( (netstat -wltun; netstat -wtun) | awk '{ print $6 }' | grep -E '(ESTABLISHED|LISTEN|TIME_WAIT)' )
iTotal=$( echo "$netdata" | wc -l | awk '{ print $1 }')
if [ $iWarnLimit -gt 0 -a $iCriticalLimit -gt 0 ]; then
ph.setStatusByLimit $iTotal $iWarnLimit $iCriticalLimit
fi
ph.status "NETSTAT - count of connections: $iTotal"
# --- add performance data
data2=$( echo "$netdata" | sort | uniq -c )
# result is something like that:
# 5 ESTABLISHED
# 10 LISTEN
# 77 TIME_WAIT
echo "$data2"
iEst=$( echo "$data2" | grep ESTABLISHED | awk '{ print $1 }' )
iListen=$( echo "$data2" | grep LISTEN | awk '{ print $1 }' )
iWait=$( echo "$data2" | grep TIME_WAIT | awk '{ print $1 }' )
ph.perfadd "established" "$iEst"
ph.perfadd "listen" "$iListen"
ph.perfadd "time-wait" "$iWait"
# --- bye
ph.exit