自定义监控
监控 TCP 状态为 TIME_WAIT 的个数:netstat -ant | awk 'NR>2 {print $6}' | grep 'TIME_WAIT' | wc -l
Zabbix Agent 支持自定义键值,允许通过自定义脚本或命令来收集特定的数据
在 zabbix_agentd.conf 或在 zabbix_agentd.d 中创建子文件添加自定义键值
UserParameter=my.custom.check,/usr/local/bin/zabbix_tcp.sh
UserParameter=TIME_WAIT,netstat -ant | awk 'NR>2 {print $6}' | grep 'TIME_WAIT' | wc -l
UserParameter=LISTEN,netstat -ant | awk 'NR>2 {print $6}' | grep "LISTEN" | wc -l
UserParameter=ESTABLISHED,netstat -ant | awk 'NR>2 {print $6}' | grep "ESTABLISHED" | wc -l
server 端安装 zabbix-get
zabbix_get 使用的是 Zabbix Agent 协议,所以只能从运行 Zabbix Agent 的主机上获取数据
运行该命令时,确保防火墙或安全组允许 Zabbix Server 或 Proxy 访问目标主机的 Zabbix Agent 端口(默认是 10050)

接下来在 web 端添加监控项
配置 --> 主机 --> 监控项 --> 创建监控项
填写刚刚创建的键:TIME_WAIT,然后选择相应的参数后点击添加
接下来在 web 端添加图形化监控
配置 --> 主机 --> 图形 --> 创建图表
在图标中添加刚刚的监控项,然后选择相应的参数后点击添加

TIME_WAIT:TCP 连接已经关闭,但暂时保留,以确保连接完全终止
顾客喝完咖啡,离开了咖啡店(连接关闭),但店门不会马上关上(TIME_WAIT),你会稍微等一下,确保顾客真的离开了,没有遗落东西或要回来(确保所有数据包都处理完毕,没有重发的数据包)
TIME_WAIT 状态就是在连接关闭后,系统稍微等待的一段时间,以确保整个连接过程完全结束
- 确保迟到的包被处理:TCP 是一个可靠的协议,确保所有数据包都能正确到达对方。如果关闭连接后立即释放所有资源,可能会遗漏一些迟到或重传的数据包。因此,TIME_WAIT 状态会保留一段时间(通常是 2 倍的最大段寿命,约 4 分钟),以确保任何延迟的数据包可以被正确处理
- 防止旧的连接影响新的连接:在 TIME_WAIT 期间,如果有一个新的连接请求使用了相同的端口号和 IP 地址,系统可以识别出这是一个新的连接,而不会与之前的连接混淆。这可以避免新旧连接之间的混乱
LISTEN:服务器正在监听某个端口,等待外部连接
ESTABLISHED:TCP 连接已经建立,双方可以开始通信