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.客户端模拟多人并发连接
- [root@zabbixclient_web1 ~]# ab -c 1000 -n 100000 http://192.168.2.100/
2.查看网络连接状态,仔细观察、分析第二列的数据
- [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。
- [root@zabbixclient_web1 ~]# vim /usr/local/etc/zabbix_agentd.conf.d/net.status
- UserParameter=net.status[*],/usr/local/bin/net_status.sh $1
- [root@zabbixclient_web1 ~]# killall zabbix_agentd
- [root@zabbixclient_web1 ~]# zabbix_agentd
4.自定义监控脚本
- [root@zabbixclient_web1 ~]# vim /usr/local/bin/net_status.sh
- #!/bin/bash
- case $1 in
- estab)
- ss -antp |awk '/^ESTAB/{x++} END{print x}';;
- close_wait)
- ss -antp |awk '/^CLOSE-WAIT/{x++} END{print x}';;
- esac
- [root@zabbixclient_web1 ~]# chmod +x /usr/local/bin/net_status.sh
5.测试效果
- [root@zabbixclient_web1 ~]# zabbix_get -s 127.0.0.1 -k 'net.status[time_wait]'
6.监控netstatus
在监控服务器,添加监控项目item,Configuration-->Hosts点击主机后面的items
点击Create item,如图
Zabbix检测网络连接状态 在线用户与离线用户监控相关推荐
- swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型
一.前言 在移动开发中,检测网络的连接状态尤其检测网络的类型尤为重要.本文将介绍在iOS开发中,如何使用Swift检测网络连接状态及网络类型(移动网络.Wifi). 二.如何实现 Reachabili ...
- Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态
原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...
- Android官方开发文档Training系列课程中文版:电池续航时间优化之检查、检测网络连接状态...
原文地址:http://android.xsoftlab.net/training/monitoring-device-state/connectivity-monitoring.html 通常会有一 ...
- Unity检测网络连接状态
Unity中有自带的判断是否连接网络的方法如下: if (Application.internetReachability == NetworkReachability.NotReachable){t ...
- C#检测网络连接状态
1. 方法定义 [DllImport("wininet.dll")] private extern static bool InternetGetConnectedState( ...
- [转]:IOS检测网络连接状态
转:http://www.cnblogs.com/ketmales/archive/2013/01/23/2873688.html 转载于:https://www.cnblogs.com/wx1696 ...
- python检测网络连接状态的四种方法
第一种 import socketipaddress = socket.gethostbyname(socket.gethostname())if ipaddress == '127.0.0.1':r ...
- Android编程获取网络连接状态及调用网络配置界面
获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. Android平台提供了ConnectivityMan ...
- Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
http://www.mobiletuts.me 获取网络连接状态 随着3G和Wifi的推广,越来越多的Android应用程序需要调用网络资源,检测网络连接状态也就成为网络应用程序所必备的功能. An ...
最新文章
- 流行的14个机器学习编程语言框架和工具
- 学python要多少钱-参加python培训要多少钱?
- Ubuntu 安装 Docker 容器
- WIN10自带远程桌面实现多用户登录
- docker镜像没有ifconfig、ping指令
- C语言——判断是该年的第几天
- JavaScript设计模式与实践--工厂模式
- foobar2000播放器简单配置 [李园7舍_404]
- 基于DFSMN-CTC及CTC-CE联合训练的声学模型
- 邮件开头结尾一些不同的表达
- 麒麟座V3.1接入OneNET平台初体验--上传温湿度
- java 数组的class_Java Class isArray()方法
- 使用sunshine+moonlight 实现电脑串流到电视(Android 设备)低延迟投屏
- 相关EI/SCI期刊
- 知识欠缺到沙漠化了吧
- ARMv8-A笔记一 ARM-A系列处理器介绍
- 剑三重置版找不到服务器,重制版客户端安装常见问题
- 工作学会9句话,升职加薪变股东
- 程序员:为什么几个月后我自己写的代码也看不懂了?
- SAP 标准教材和自学方法
热门文章
- ue4 拾取物体注意问题
- 常见深度学习算法总结
- manjaro 开机启动项_manjaro安装配置
- 一步步教你用html+div+css+js基于Jquery实现一套数字华容道游戏
- php+lol,lol的圈
- python学习历程第一课:print
- java 黑白皇后算法_不思议迷宫黑白皇后最后两个阶段怎么过
- oracle表变为分区表,「分区表」oracle中将普通表变更为分区表 - 金橙教程网
- iPhone6,iPhone6 Plus 屏幕分辨率、尺寸的问题
- 企业品牌建设的3个关键词:认知、联想、区别