start-monitor.sh
#!/bin/bash
# nmon 采样时间s
INTERVAL=1
# nmon 采样次数
COUNT=310
# 本地服务端口
LISTEN_PORT=80
echo "后台开启nmon"
nmon -s ${INTERVAL} -c ${COUNT} -f -m /tmp
echo "统计网络连接情况"
echo "TIME,SYN_RECV,ESTABLISHED,FIN_WAIT1,FIN_WAIT2,TIME_WAIT,CLOSE_WAIT" > /tmp/netstat-${LISTEN_PORT}.csv
for ((i=1; i<=${COUNT}; i++))
do
echo ${i}
TIME=$(date | awk '{print $4}')
nstat=$(netstat -nt | grep :${LISTEN_PORT} | awk '{++Z[$NF]} END {for(a in Z) print a, Z[a]}')
SYN_RECV=$(echo "${nstat}" | grep "SYN_RECV" | awk '{print $2}')
if [ "${SYN_RECV}" = "" ];then
SYN_RECV=0
fi
ESTABLISHED=$(echo "${nstat}" | grep "ESTABLISHED" | awk '{print $2}')
if [ "${ESTABLISHED}" = "" ];then
ESTABLISHED=0
fi
FIN_WAIT1=$(echo "${nstat}" | grep "FIN_WAIT1" | awk '{print $2}')
if [ "${FIN_WAIT1}" = "" ];then
FIN_WAIT1=0
fi
FIN_WAIT2=$(echo "${nstat}" | grep "FIN_WAIT2" | awk '{print $2}')
if [ "${FIN_WAIT2}" = "" ];then
FIN_WAIT2=0
fi
TIME_WAIT=$(echo "${nstat}" | grep "TIME_WAIT" | awk '{print $2}')
if [ "${TIME_WAIT}" = "" ];then
TIME_WAIT=0
fi
CLOSE_WAIT=$(echo "${nstat}" | grep "CLOSE_WAIT" | awk '{print $2}')
if [ "${CLOSE_WAIT}" = "" ];then
CLOSE_WAIT=0
fi
echo "${TIME},${SYN_RECV},${ESTABLISHED},${FIN_WAIT1},${FIN_WAIT2},${TIME_WAIT},${CLOSE_WAIT}" >> /tmp/netstat-${LISTEN_PORT}.csv
sleep ${INTERVAL}
done