前言
TCP的连接状态对于我们web服务器来说是至关重要的,尤其是并发量ESTAB,或者是syn_recv值,假如这个值比较大的话我们可以认为是不是受到了攻击;time_wait值比较高的话,我们要考虑看我们内核是否需要调优,太高的time_wait值的话会占用太多端口,要是端口少的话后果不堪设想
一、TCP状态介绍
1、man netstat查看TCP的各种状态信息描述:
LISTEN
:侦听来自远方TCP端口的连接请求;SYN-SENT
:在发送连接请求后等待匹配的连接请求;SYN-RECEIVED
:在收到和发送一个连接请求后等待对连接请求的确认;ESTABLISHED
:代表一个打开的连接,数据可以传送给用户;FIN-WAIT-1
:等待远程TCP的连接中断请求,或先前的连接中断请求的确认;FIN-WAIT-2
:从远程TCP等待连接中断请求;CLOSE-WAIT
:等待从本地用户发来的连接中断请求;CLOSING
:等待远程TCP对连接中断的确认;LAST-ACK
:等待原来发向远程TCP的连接中断请求的确认;TIME-WAIT
:等待足够的时间以确保远程TCP接收到连接中断请求的确认;CLOSED
:没有任何连接状态;
2、监控原理
[root@zabbix ~]# /bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
LISTEN 9
ESTABLISHED 53
FIN_WAIT2 1
TIME_WAIT 139
二、Zabbix-agent 端配置
1、编写TCP监控脚本
[root@zabbix zabbix_agentd.d]# pwd
/etc/zabbix/zabbix_agentd.d ///脚本存放目录
[root@zabbix zabbix_agentd.d]# vim tcp_status.sh ///脚本名
#!/bin/bash
#This script is used to get tcp and udp connetion status
#tcp status
metric=$1
tmp_file=/tmp/tcp_status.txt
/bin/netstat -an|awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}' > $tmp_file
case $metric in
closed)
output=$(awk '/CLOSED/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
listen)
output=$(awk '/LISTEN/{print $2}' $tmp_file)