场景

由于服务器经常半夜出现TCP连接数暴增,没办法及时查看处理,回头看记录又看不到现象,不好排查,故编写此脚本用于记录日志。

脚本内容

#!/bin/bash
#任务计划设置此脚本每分钟执行一次即可,* * * * * sh /shell/tcp_stats.sh
now_time=$(date +%Y%m%d-%H:%M:%S)
log_dir="/var/log/tcp_stats/" #日志
time_range="3" #3秒内的差异值
max_tcp_diff="1000" #差异值的上限

function get_netstat_log(){
        if [[ ! -d $log_dir ]];then
                mkdir -p $log_dir
        fi
        before_tcp_stats=$(netstat -anltp | wc -l) #取当前tcp连接数
        sleep $time_range
        after_tcp_stats=$(netstat -anltp | wc -l) #隔${time_range}秒后取tcp连接数
        diff=$(expr ${after_tcp_stats} - ${before_tcp_stats})  #计算差异值
        if [[ $diff > $max_tcp_diff ]];then
                netstat -anltp >${log_dir}${now_time}.log
        fi
}
for ((i=1, i<6, i++))
do
        get_netstat_log
        sleep 7
done