Press "Enter" to skip to content

Zabbix监控tcp连接状态

常见的tcp连接状态有如下几种:
LISTEN:表示服务器端的某个SOCKET处于监听状态,可以接受连接.
SYN-SENT:在服务端监听后,客户端SOCKET执行CONNECT连接时,客户端发送SYN报文,此时客户端就进入SYN_SENT状态,等待服务端的确认.
SYN-RECEIVED:表示服务端接受到了SYN报文.
ESTABLISHED:表示连接已经建立.
FIN-WAIT-1:这个是已经建立连接之后,其中一方请求终止连接,等待对方的FIN报文.
FIN-WAIT-2:实际上FIN_WAIT_2状态下的SOCKET,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接.
CLOSE-WAIT:表示在等待关闭.
CLOSING:表示双方都正在关闭SOCKET连接.
LAST-ACK:它是被动关闭一方在发送FIN报文后,最后等待对方的ACK报文.当收到ACK报文后,也即可以进入到CLOSED可用状态了.
TIME-WAIT:表示收到了对方的FIN报文,并发送出了ACK报文.
CLOSED:没有任何连接状态.

具体步骤:
[root@test zabbix]# more zabbix_agentd.conf |grep -i include|grep -v '#'
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@test zabbix]# cd /etc/zabbix/zabbix_agentd.d
[root@test zabbix_agentd.d]# ll
-rw-rw-r--. 1 zabbix zabbix 67 Aug 10 2017 userparameter_tcpstatus.conf
[root@test zabbix_agentd.d]# cat userparameter_tcpstatus.conf
UserParameter=tcp.status[*],/etc/zabbix/scripts/tcp_status.sh "$1"

[root@test ~]# cd /etc/zabbix/scripts/
[root@test scripts]# ll
-rwxrw-r--. 1 zabbix zabbix 2502 Aug 10 2017 tcp_status.sh
[root@test scripts]# cat 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)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
synrecv)
output=$(awk '/SYN_RECV/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
synsent)
output=$(awk '/SYN_SENT/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
established)
output=$(awk '/ESTABLISHED/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
timewait)
output=$(awk '/TIME_WAIT/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
closing)
output=$(awk '/CLOSING/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
closewait)
output=$(awk '/CLOSE_WAIT/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
lastack)
output=$(awk '/LAST_ACK/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
finwait1)
output=$(awk '/FIN_WAIT1/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
finwait2)
output=$(awk '/FIN_WAIT2/{print $2}' $tmp_file)
if [ "$output" == "" ];then
echo 0
else
echo $output
fi
;;
*)
echo -e "\e[033mUsage: sh $0 [closed|closing|closewait|synrecv|synsent|finwait1|finwait2|listen|established|lastack|timewait]\e[0m"
esac

重启zabbix_agentd服务

zabbix_server测试键值是否生效:
[root@test01 bin]# ./zabbix_get -s 1.2.3.4 -k tcp.status[listen]
13
[root@test01 bin]# ./zabbix_get -s 1.2.3.4 -k tcp.status[closewait]
0
[root@test01 bin]# ./zabbix_get -s 1.2.3.4 -k tcp.status[timewait]
136
能正常获取到值,说明zabbix配置没问题.

web界面配置:

具体步骤:新建模板-新建应用集-新建监控项-新建触发器-新建图形-关联到相关主机

模板信息如下:

相应监控项配置如下:

新建触发器:

图形配置:

最后再关联到相关主机,看有无数据即可.

最终效果图:

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注