根据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. [root@zabbixclient_web1 ~]# killall zabbix_agentd
  4. [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,如图

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

  1. swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型

    一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...

  2. Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态

    原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...

  3. Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态...

    原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...

  4. Unity检测网络连接状态

    Unity中有自带的判断是否连接网络的方法如下: if (Application.internetReachability == NetworkReachability.NotReachable){t ...

  5. C#检测网络连接状态

    1. 方法定义 [DllImport("wininet.dll")]  private extern static bool InternetGetConnectedState( ...

  6. [转]:IOS检测网络连接状态

    转:http://www.cnblogs.com/ketmales/archive/2013/01/23/2873688.html 转载于:https://www.cnblogs.com/wx1696 ...

  7. python检测网络连接状态的四种方法

    第一种 import socketipaddress = socket.gethostbyname(socket.gethostname())if ipaddress == '127.0.0.1':r ...

  8. Android编程获取网络连接状态及调用网络配置界面

    获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...

  9. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面

    http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...

最新文章

  1. 流行的14个机器学习编程语言框架和工具
  2. 学python要多少钱-参加python培训要多少钱?
  3. Ubuntu 安装 Docker 容器
  4. WIN10自带远程桌面实现多用户登录
  5. docker镜像没有ifconfig、ping指令
  6. C语言——判断是该年的第几天
  7. JavaScript设计模式与实践--工厂模式
  8. foobar2000播放器简单配置 [李园7舍_404]
  9. 基于DFSMN-CTC及CTC-CE联合训练的声学模型
  10. 邮件开头结尾一些不同的表达
  11. 麒麟座V3.1接入OneNET平台初体验--上传温湿度
  12. java 数组的class_Java Class isArray()方法
  13. 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
  14. 相关EI/SCI期刊
  15. 知识欠缺到沙漠化了吧
  16. ARMv8-A笔记一 ARM-A系列处理器介绍
  17. 剑三重置版找不到服务器,重制版客户端安装常见问题
  18. 工作学会9句话,升职加薪变股东
  19. 程序员:为什么几个月后我自己写的代码也看不懂了?
  20. SAP 标准教材和自学方法

热门文章

  1. ue4 拾取物体注意问题
  2. 常见深度学习算法总结
  3. manjaro 开机启动项_manjaro安装配置
  4. 一步步教你用html+div+css+js基于Jquery实现一套数字华容道游戏
  5. php+lol,lol的圈
  6. python学习历程第一课:print
  7. java 黑白皇后算法_不思议迷宫黑白皇后最后两个阶段怎么过
  8. oracle表变为分区表,「分区表」oracle中将普通表变更为分区表 - 金橙教程网
  9. iPhone6,iPhone6 Plus 屏幕分辨率、尺寸的问题
  10. 企业品牌建设的3个关键词:认知、联想、区别