zabbix 监控案例之监控Linux TCP连接状态

一、TCP端口的十一种连接状态

CLOSED:端口默认是关闭状态。

LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。

SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短 暂,正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,服务器返回给客户端SYN确认之后就会 将在自己的端口置为SYN_RCVD。

SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为 SYN_SENT。

ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服 务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。

FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关 闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文 后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以 FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态

TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(Max Segment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志 的报文时,可以直接进入到 TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报 文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一 下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情 况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。

LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即 可以进入到CLOSED可用状态了。

二、端口转换状态

在这里插入图片描述

三、TCP三次握手与四次断开

3.1 三次握手

在这里插入图片描述

3.2 四次挥手

在这里插入图片描述

四、监控TCP连接数脚本

在zabbix agent的上添加脚本

root@ubuntu1804:~# cd /etc/zabbix/zabbix_agentd.d/
root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# vim tcp_status.sh
#!/bin/bash 
tcp_conn_status(){
	TCP_STAT=$1 
	ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
	TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2) 
	if [ -z $TCP_NUM ];then
		TCP_NUM=0 
	fi
	echo $TCP_NUM 
}

main(){
	case $1 in
		tcp_status)
			tcp_conn_status $2;
			;;
	esac
}
main $1 $2

root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# chmod a+x tcp_status.sh

#测试脚本
root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# bash tcp_status.sh tcp_status ESTAB
2
root@ubuntu1804:/etc/zabbix/zabbix_agentd.d# bash tcp_status.sh tcp_status LISTEN
9

五、zabbix agent配置文件添加自定义监控项

5.1 UserParameter指令说明

### Option: UserParameter
#       User-defined parameter to monitor. There can be several user-defined parameters.
#       Format: UserParameter=<key>,<shell command>
#       See 'zabbix_agentd' directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=
#举例一
UserParameter=n50,/bin/echo 66
systemctl restart zabbix-agent
#执行:
zabbix_get -s 10.0.0.37 -p 10050 -k "n50"
66

#举例二
UserParameter=n50[*], /bin/bash /data/scripts/n50.sh $1
systemctl restart zabbix-agent

vim /data/scripts/n50.sh
echo $1

chmod a+x /data/scripts/n50.sh
zabbix_get -s 10.0.0.37 -p 10050 -k "n50["66"]"
66

5.2 agent 配置

#在zabbix agent上配置
vim /etc/zabbix/zabbix_agentd.conf
UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/tcp_status.sh "$1" "$2"
systemctl restart zabbix-agent

#在zabbix server测试获取数据
root@ubuntu1804:~# zabbix_get -s 10.0.0.37 -p 10050 -k "linux_status["tcp_status","ESTAB"]"
3
root@ubuntu1804:~# zabbix_get -s 10.0.0.37 -p 10050 -k "linux_status["tcp_status","LISTEN"]"
11

六、zabbix web导入模板

第一步:导入模板
在这里插入图片描述
第二步:将TCP监控模板关联至主机
在这里插入图片描述
第三步:验证监控数据
在这里插入图片描述

七、总结

如何自定义监控项:
1.先通过脚本或者命令获取监控项的数据
2.将脚本或者命令添加到zabbix agent配置文件中的自定义监控项并重启

UserParameter=n50[*],/bin/bash /data/scripts/n50.sh $1 $2
UserParameter=n51,/usr/bin/python3 /data/scripts/n50.py
UserParameter=linux_status[*],/bin/bash /etc/zabbix/zabbix_agentd.d/tcp_ status.sh $1 $2 

3.在zabbix server使用zabbix_get命令测试监控项能否获取到数据

zabbix_ get -s 172.31.0.107 -p 10050 -k "1inux_ status["tcp_ status","LISTEN"]"

4.在zabbix web添加监控项、触发器、图形或者创建模板
5.验证数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值