Tcp的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTABLISH;或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了***,或是是time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想:

一、下面是一个监控的脚本:

脚本放在/usr/local/zabbix/scripts/下面,命名tcp_status。

#!/bin/bash 
#shuidi
#scripts for tcp status 
function SYNRECV { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'SYN-RECV' | awk '{print $2}'
} 
function ESTAB { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'ESTAB' | awk '{print $2}'
} 
function FINWAIT1 { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-1' | awk '{print $2}'
} 
function FINWAIT2 { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'FIN-WAIT-2' | awk '{print $2}'
} 
function TIMEWAIT { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'TIME-WAIT' | awk '{print $2}'
} 
function LASTACK { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LAST-ACK' | awk '{print $2}'
} 
function LISTEN { 
/usr/sbin/ss -ant | awk '{++s[$1]} END {for(k in s) print k,s[k]}' | grep 'LISTEN' | awk '{print $2}'
} 
$1

二、填写key值:

# cat /etc/zabbix/zabbix_agentd.conf 
#monitor tcp 
UserParameter=tcp[*],/usr/local/zabbix/scripts/tcp_status $1

三、导入模板(在我的附件上,然后触发器根据自己的情况调整:)

    模版的导入很简单,具体我这里不再介绍。

四、查看效果:

Zabbix 监控TCP连接的状态_第1张图片


五、各参数意义

TCP套接字解释                     状态意义
CLOSED                      没有使用这个套接字
LISTEN                        套接字正在监听入境连接
SYN_SENT                  套接字正在试图主动建立连接
SYN_RECEIVED          正在处于连接的初始同步状态
ESTABLISHED             连接已建立
CLOSE_WAIT              远程套接字已经关闭:正在等待关闭这个套接字
FIN_WAIT_1                套接字已关闭,正在关闭连接
CLOSING                     套接字已关闭,远程套接字正在关闭,暂时挂起关闭确认
LAST_ACK                  远程套接字已,正在等待本地套接字的关闭确认
FIN_WAIT_2                套接字已关闭,正在等待远程套接字关闭
TIME_WAIT                 这个套接字已经关闭,正在等待远程套接字的关闭传送


到此TCP监控我们就配置OK了。