Zabbix检测网络连接状态 在线用户与离线用户监控

根据TCP协议的三次握手,完整的建立一个连接分为四步

1.客户端在本地将本地socket状态改为SYN_SENT,并发送信号量(SYN)给服务端

2.服务端收到信号后将socket状态改为SYN_RCVD,并发送SYN_ACK给客户端

3.客户端受到信号后将socket状态改为ESTABLISHED,并发送ACK给服务器

4.服务器收到信号后将socket状态改为ESTABLISHED

此时tcp连接就建立起来了

监控用户连接状态的思路就是统计ESTABLISHED的数量,

TCP的四次断开思路如下:

1.客户端将socket状态改为FIN_WAIT,并发送信号量FIN_ACK给服务器

2.服务器收到信号后,将socket状态更改为CLOSE_WAIT,并发送ACK给客户端,代表收到请求

3.服务器将socket状态改为CLOSE_WAIT后,又迅速将状态更改为LAST_ACK,即不等待客户端回应,并发送FIN给客户端

4.客户端如果先收到ACK,将socket状态改为FIN_WAIT2,不发送信号量

5.客户端如果先收到FIN,将socket状态改为TIME_WAIT,并发送信号量ACK给服务端,服务端不接受此ACK(drop)

根据四次断开,我们可以监控CLOSE_WAIT的数量来获取断开连接的用户数

 

准备客户端,服务端两台服务器

1.客户端模拟多人并发连接

  1. [root@zabbixclient_web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/

2.查看网络连接状态,仔细观察、分析第二列的数据

  1.  [root@myhost ~]# ss -antup | grep "ESTAB"
    tcp    ESTAB      0      98756     192.168.1.233:22                 113.87.27.59:8026                users:(("sshd",pid=11514,fd=3))

3.创建自定义key

注意:被监控端修改配置文件,注意要允许自定义key并设置Include。

  1. [root@zabbixclient_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
  2. UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
  3.  
  4. [root@zabbixclient_web1 ~]# killall zabbix_agentd
  5. [root@zabbixclient_web1 ~]# zabbix_agentd

4.自定义监控脚本

  1. [root@zabbixclient_web1 ~]# vim /usr/local/bin/net_status.sh
  2. #!/bin/bash
  3. case $1 in
  4. estab)
  5. ss -antp |awk '/^ESTAB/{x++} END{print x}';;
  6. close_wait)
  7. ss -antp |awk '/^CLOSE-WAIT/{x++} END{print x}';;
  8. esac
  9. [root@zabbixclient_web1 ~]# chmod +x /usr/local/bin/net_status.sh

5.测试效果

  1. [root@zabbixclient_web1 ~]# zabbix_get -s 127.0.0.1 -k 'net.status[time_wait]'

6.监控netstatus

在监控服务器,添加监控项目item,Configuration-->Hosts点击主机后面的items

点击Create item,如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值