【测试实践】搞定云网络系统性能测试

1、前言

在部署或管理网络系统时,咱们更多的是关心网络的连通性,而对于其总体的性能每每考虑很少,或者即便考虑到性能、异常或稳定性的问题,但却发现没有合适的手段去测试或监控网络健康情况。在本文中,首先简单介绍一下网络性能测试指标重点会关注哪些指标、在开展性能测试时,如何预估系统性能以便合理的规划和部署测试环境,而后会介绍基本的网络连通性测试工具、网络性能测试工具以及在开展性能测试时如何部署监控,更加直观的统计性能指标等。由于社区中已经有很是完善的文档,本文再也不重复造轮子,只是简单地介绍并辅以几个简单demo实例,旨在雁过留声,平时遇到问题时可以提供一些解决方案或思路。

1.1 网络性能测试指标

性能测试的目的是以性能指标预期为前提,对系统进行施压,验证系统在无资源性能瓶颈的状况下,是否能达到预期目标。对于不一样的服务或应用场景,可能关注的指标侧重点存在必定差别,对于底层系统网络性能测试来讲,一般会重点关注如下指标:
  • 可用性,可用性是对一个系统最基本的要求,开展工做以前首先须要确认一下网络连通性,常规的工具主要有ping、fping、telnet、curl等工具判断网络链路是否通畅。须要注意的是,因为ping是基于ICMP协议实现的,能ping通只能说明网络是能通的,不能说明具有对应的端口访问权限。一般状况下须要结合telnet、curl等工具来判断网络连通性及服务可用性。
  • 带宽BPS,每秒所能传送的比特数。一般所说的带宽指的是网络中节点之间的极限带宽,因为节点之间的链路通畅是不彻底可见的,所以极限带宽一般是由组成网络的设备能力所决定的。
  • 吞吐量(throughput),网络吞吐量是指在某个时刻,在网络中的两个节点之间,提供给网络应用的剩余带宽,经过网络吞吐量能够寻找出网络瓶颈。吞吐量的衡量符合马桶效应,好比,即便client和server都被分别链接到各自的100M以太网卡上,可是若是这两个100M的以太网卡被10M的交换机链接起来,那么10M的交换机就是网络的瓶颈。吞吐量受带宽限制,吞吐量/带宽就是该网络链路的使用率
  • PPS(packet per second),表示以网络包单位的传输速率。PPS一般用来评估网络的转发能力,而基于Linux服务器的转发,很容器受到网络包大小的影响,一般选择1bytes的数据包测试系统极限场景下的pps。
  • 时延,表示从一端发出请求后直到收到远端响应所须要的时间。这个指标在不一样场景中可能会有不一样含义。它能够表示创建链接须要的时间(好比TCP握手延迟),或者一个数据包往返所需时间(好比RTT)
  • 丢包率,网络丢包率是指测试中所丢失数据包数量占所发送数据包的比率,一般在吞吐量范围内测试。丢包率主要与客户端到网站服务器之间每段路由的网络拥塞程度有关。因为交换机和路由器的处理能力有限,当网络流量太高来不及处理时就将一部分数据包丢弃形成丢包。因为TCP/IP网络可以自动实现重发,这样发生丢包后不断重发,将形成更大量的丢包。所以,网络拥塞发生后常常会发生丢包率愈来愈高的现象,和马路上的交通堵塞十分类似。
  • 抖动率:抖动率是网络延迟的变化量,它是由同一应用的任意两个相邻数据包在传输路由中通过网络延迟而产生;计算方法:抖动率由相邻数据包延迟时间差除以数据包序号差获得。

1.2 系统的网络性能评估

系统的性能指标,通常状况下会在产品需求文档中有较明肯定义,QA同窗以此为依据部署环境,开展测试任务。对于探索式的性能测试来说,一般须要QA同窗横向了解一下相关指标的合理范围,例如须要测试指定网卡性能表现,带宽跟物理网卡配置是直接关联的,网卡肯定后,带宽也就肯定了(实际带宽受限于整个网络链路中最小的那个模块),为了更加有效的预估,能够参考说明文档、竞品公布的性能数据或者根据经验值分析。好比测试网关的极限带宽,假设网关节点网卡配置为两张82599 10Gb网卡作bond1,那么理论极限带宽不会超过20Gb,加上物理损耗,实际评估的带宽约为15Gb~18Gb之间,假设客户端与服务端均采用相同规格物理机部署,单台物理机带宽上限约为8Gb,要想得到网关节点的真实极限带宽,客户端与服务端须要至少分别部署三台物理机。

2、 网络连通性测试工具

在完成测试方案设计、评审以及环境部署以后,首先须要作的是测试服务可用性,相关的测试工具上文中已有说起,这里主要简单介绍ping常规的使用方法,其它工具如mtr、NMap、Netcat、fping、paping等可经过man命令查看。

2.1.1 ping

首先简单介绍一下ICMP协议,ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络自己的消息。这些控制消息虽然并不传输用户数据,可是对于用户数据的传递起着重要的做用。ping命令是基于ICMP协议实现的。使用这个命令判断网络的连通性以及网速,也可实现域名解析,默认使用该命令会一直发送ICMP包直到用户手动停止,可使用如下经常使用参数控制数据包的传输:
  • -c命令指定发送数据包的个数
  • -W指定最长等待时间,若是有多张网卡
  • -I指定发送包的网卡
  • -s能够指定发送包的大小,默认包大小为64bytes
在ping过程当中按下ctrl+|会打印出当前的summary信息,统计当前发送包数量、接收数量、丢包率等。示例,以下一台云主机eth0配置了secondaryIP,须要测试一下网络连通性
root@pytest-likailiang-1t3j9c-2:~# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether fa:16:3e:b7:b2:ca brd ff:ff:ff:ff:ff:ff
    inet 172.16.1.2/24 brd 172.16.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 172.16.1.3/24 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::f816:3eff:feb7:b2ca/64 scope link
       valid_lft forever preferred_lft forever
root@pytest-likailiang-1t3j9c-2:~# ping 192.168.1.70 -I 172.16.1.3  -c 10 -i 2 -w 10 -s 64
PING 192.168.1.70 (192.168.1.70) from 172.16.1.3 : 56(84) bytes of data.
64 bytes from 192.168.1.70: icmp_seq=1 ttl=63 time=1.51 ms
64 bytes from 192.168.1.70: icmp_seq=2 ttl=63 time=0.972 ms
2/2 packets, 0% loss, min/avg/ewma/max = 0.972/1.242/1.444/1.512 ms
64 bytes from 192.168.1.70: icmp_seq=3 ttl=63 time=0.766 ms
64 bytes from 192.168.1.70: icmp_seq=4 ttl=63 time=0.716 ms
64 bytes from 192.168.1.70: icmp_seq=5 ttl=63 time=0.681 ms
5/5 packets, 0% loss, min/avg/ewma/max = 0.681/0.929/1.204/1.512 ms

--- 192.168.1.70 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 8010ms
rtt min/avg/max/mdev = 0.681/0.929/1.512/0.309 ms
root@pytest-likailiang-1t3j9c-2:~#
复制代码
须要说明的是与ping要等待某一主机链接超时或发回反馈信息不一样,fping给一个主机发送完数据包后,立刻给下一个主机发送数据包,实现多主机同时ping。若是某一主机ping通,则此主机将被打上标记,并从等待列表中移除,若是没ping通,说明主机没法到达,主机仍然留在等待列表中,等待后续操做。Fping程序相似于ping。Fping与ping不一样的地方在于,fping能够在命令行中指定要ping的主机数量范围,也能够指定含有要ping的主机列表文件。

2.1.2 mtr

mtr(全称 my traceroute,是一个把 ping 和 traceroute 合并到一个程序的网络诊断工具,功能更强大。mtr默认发送ICMP数据包进行链路探测,用户还能够经过-u参数来指定使用UDP数据包用于探测。相比traceroute只会作一次链路跟踪测试,mtr会对链路上的相关节点作持续探测并给出相应的统计信息。mtr能避免节点波动对测试结果的影响,因此其测试结果更正确。
mtr有Linux和Windows两种版本,在Windows系统下能够直接使用WinMTR工具,WinMTR是Windows下关于mtr的图形化工具,[WinMTR下载地址](https://sourceforge.net/projects/winmtr/files/)。WinMTR无需安装,下载完毕后,直接解压运行便可。Linux环境下直接使用mtr命令便可,安装及命令行操做参考:
安装mtr工具
apt-get install mtr -y
复制代码
mtr (My traceroute)几乎是全部 Linux 发行版本预装的网络测试工具,集成了 tracert 与 ping 这两个命令的图形界
root@slaver1:~# mtr -h
usage: mtr [--help] [--version] [-4|-6] [-F FILENAME]
                [--report] [--report-wide] [--displaymode MODE]
                [--xml] [--gtk] [--curses] [--raw] [--csv] [--json] [--split]
                [--no-dns] [--show-ips] [-o FIELDS] [-y IPINFO] [--aslookup]
                [-i INTERVAL] [-c COUNT] [-s PACKETSIZE] [-B BITPATTERN]
                [-Q TOS] [--mpls]
                [-a ADDRESS] [-f FIRST-TTL] [-m MAX-TTL] [-U MAX_UNKNOWN]
                [--udp] [--tcp] [--sctp] [-P PORT] [-L LOCALPORT] [-Z TIMEOUT]
                [-G GRACEPERIOD] [-M MARK] HOSTNAME
See the man page for details.
复制代码
如上图所示,mtr测试结果每列数值的说明以下:
root@lkl-slaver1:~#  mtr -c 2 -r 114.114.114.114
Start: Wed Aug 19 15:35:05 2020
HOST: slaver1                     Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  2.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  3.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  4.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  5.|-- ???                       100.0     2    0.0   0.0   0.0   0.0   0.0
  6.|-- 61.164.31.126              0.0%     2    1.7   2.8   1.7   3.9   1.4
  7.|-- 220.191.200.207            0.0%     2    5.2   5.4   5.2   5.7   0.0
  8.|-- 202.97.76.2                0.0%     2   11.5  11.6  11.5  11.7   0.0
  9.|-- 222.190.59.206             0.0%     2   14.3  16.3  14.3  18.2   2.6
 10.|-- 58.213.224.170             0.0%     2   27.6  22.1  16.5  27.6   7.9
 11.|-- public1.114dns.com         0.0%     2   14.3  14.3  14.3  14.4   0.0

Host:节点IP地址和域名(按n键能够切换显示);
Loss%:节点丢包率;
Snt:每秒发送数据包数,默认值是10,能够经过参数-c指定;
Last:最近一次的探测延迟值;
Avg:探测延迟的平均值;
Best:探测延迟的最小值;
Wrst:探测延迟到最大值;
StDev:标准误差值,越大说明相应节点越不稳定。
复制代码
更多内容参考[云社区](https://cloud.tencent.com/developer/information/mtr%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7)

2.1.3 网猫netcat

NetCat是一个很是简单的Unix工具,能够读、写TCP或UDP网络链接,在linux和window环境下都可使用,社区文档很是丰富,实例参考下文连接。
netcat 使用的基本形式为:
nc 参数 目的地址 端口
复制代码
经常使用的参数说明以下:
-k  在当前链接结束后保持继续监听
-l  用做端口监听,而不是发送数据
-n  不使用 DNS 解析
-N  在遇到 EOF 时关闭网络链接
-p  指定源端口
-u  使用 UDP 协议传输
-v  (Verbose)显示更多的详细信息
-w  指定链接超时时间
-z  不发送数据
复制代码
实例参考:[Linux 中的 netcat 网络工具简介](https://blog.konghy.cn/2020/04/03/linux-natcat/),[“瑞士军刀”Netcat使用方法总结](https://www.freebuf.com/sectool/168661.html)

2.1.4 xxxping

ping命令是一个很好用而且经常使用的网络测试工具,它是基于ICMP协议,可是出于网络安全等因素,大部分网络环境以及云环境可能都会禁止ICMP协议,因此在工做中,咱们必须掌握一些其余比较流行的网络测试工具,好比tcpping、tcping、psping、hping、paping等几款网络测试工具。社区文档比较丰富,这里再也不详细介绍。

三 、 网络性能测试工具

网络性能测试工具这里主要介绍两个经常使用的工具iperf和netperf,相关的工具如wrk 、pktgen等后续会加以补充

3.1 iperf

3.1.1 iperf简介

iperf(iperf3)是一个网络性能测试工具,采用C/S(客户端/服务器端)架构模式,能够测试TCP和UDP带宽、模拟网络故障等。利用iperf这一特性,能够用来测试一些网络设备如路由器,防火墙,交换机等的性能,评估系统QOS。iperf分为两种版本,Unix/Linux版和Windows版,Unix/Linux版更新比较快,版本最新。Windows版更新慢。Windows版的iperf叫jperf,或者xjperf。jperf是在iperf基础上开发了更好的UI和新的功能。

3.1.2 iperf安装及使用说明

源码安装参考[iperf](https://github.com/esnet/iperf),推荐命令行直接安装
~# apt-get install -y iperf3
复制代码
关于网络性能测试推荐参考[阿里云网络性能测试方法](https://www.alibabacloud.com/help/zh/faq-detail/55757.htm#top)。这样在横向数据对比时更具备参考价值,更多资料参考

3.1.3 iperf实例

带宽测试一般采用UDP模式,由于能测出极限带宽、时延抖动、丢包率。在进行测试时,首先以链路理论带宽做为数据发送速率进行测试,例如,从客户端到服务器之间的链路的理论带宽为100Mbps,先用-b 100M进行测试,而后根据测试结果(包括实际带宽,时延抖动和丢包率),再以实际带宽做为数据发送速率进行测试,会发现时延抖动和丢包率比第一次好不少,重复测试几回,就能得出稳定的实际带宽。
UDP模式
服务器端:
iperf -u -s
复制代码
客户端:
iperf -u -c 192.168.1.1 -b 100M -t 60
复制代码
在udp模式下,以100Mbps为数据发送速率,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
iperf -u -c 192.168.1.1 -b 5M -P 30 -t 60
复制代码
客户端同时向服务器端发起30个链接线程,以5Mbps为数据发送速率。
iperf -u -c 192.168.1.1 -b 100M -d -t 60
复制代码
以100M为数据发送速率,进行上下行带宽测试。
TCP模式
服务器端:
iperf -s
复制代码
客户端:
iperf -c 192.168.1.1 -t 60
复制代码
在tcp模式下,客户端到服务器192.168.1.1上传带宽测试,测试时间为60秒。
iperf -c 192.168.1.1  -P 30 -t 60
复制代码
客户端同时向服务器端发起30个链接线程。
iperf -c 192.168.1.1  -d -t 60
复制代码
进行上下行带宽测试
pps
iperf3 -s -p 3000
iperf3 -c server-ip   -i 1 -t 2000  -V -p 3000  -b 1000000000 -l 100 -M 89

for i in  $(seq  3200  3300) ; do screen -d -m  iperf -s -p $i ; done
for i in  $(seq  3200 3300 ); do  screen -d -m  iperf  -c  server-ip   -i 1 -t 2000  -V -p $i  -b 1000000000 -l 100 -M 89 ; done
复制代码

3.1.4 参考

  • 阿里云网络性能测试方法:[https://www.alibabacloud.com/help/zh/faq-detail/55757.htm#top](https://www.alibabacloud.com/help/zh/faq-detail/55757.htm#top)
  • 腾讯云网络性能测试方法:[https://cloud.tencent.com/document/product/213/11460](https://cloud.tencent.com/document/product/213/11460)
  • iperf命令:[https://man.linuxde.net/iperf](https://man.linuxde.net/iperf)
  • [https://github.com/esnet/iperf](https://github.com/esnet/iperf)

3.2 netperf

3.2.1 netperf简介

Netperf是一种网络性能的测量工具,主要针对基于TCP或UDP的传输。Netperf根据应用的不一样,能够进行不一样模式的网络性能测试,即批量数据传输(bulk data transfer)模式和请求/应答(request/reponse)模式。
Netperf工具以client/server方式工做。server端是netserver,用来侦听来自client端的链接,client端是netperf,用来向server发起网络测试.在client与server之间,首先创建一个控制链接,传递有关测试配置的信息,以及测试的结果:在控制链接创建并传递了测试配置信息之后,client与server之间会再创建一个测试链接,进行来回传递特殊的流量模式,以测试网络的性能。
社区提供的开源[Netperf](https://hewlettpackard.github.io/netperf/)只能知足两个9的时延数据统计,当进行精度较高的专项性能测试时显得无能为力,为此网易杭研云计算同窗对此进行了二次开发,可以知足9999值数据统计,项目地址参考[netperf-9999](https://g.hz.netease.com/CloudQA/netperf-9999) 。
netperf经常使用命令行参数以下选项:
-H host :指定远端运行netserver的server IP地址。
-l testlen:指定测试的时间长度(秒)
-t testname:指定进行的测试类型,包括TCP_STREAM,UDP_STREAM,TCP_RR,TCP_CRR,UDP_RR
-s size	设置本地系统的socket发送与接收缓冲大小
-S size	设置远端系统的socket发送与接收缓冲大小
-m size	设置本地系统发送测试分组的大小
-M size	设置远端系统接收测试分组的大小
-D 对本地与远端系统的socket设置TCP_NODELAY选项
复制代码

3.2.2 netperf 网络测试模式说明

  • TCP_STREAM Netperf缺省状况下进行TCP批量传输,即-t TCP_STREAM。测试过程当中,netperf向netserver发送批量的TCP数据分组,以肯定数据传输过程当中的吞吐量
  • UDP_STREAM UDP_STREAM用来测试进行UDP批量传输时的网络性能。注意:此时测试分组的大小不得大于socket的发送与接收缓冲大小,不然netperf会报出错提示
  • 测试UDP_STREAM模式下pps pssh -i -h client-ips -O StrictHostKeyChecking=no 'for node in $(cat server-ips); do for i in $(seq 12010 12015); do screen -d -m netperf -H $node -p $i -t UDP_STREAM -l 100 -- -m 1 -R 1 ; done ; done'
  • TCP_RR ,TCP_RR方式的测试对象是创建一次链接以后屡次TCP request和response的交易过程,该模式下能够获得长链接极限带宽或pps
  • 测试TCP_RR长链接模式下pps pssh -i -h client-ips -O StrictHostKeyChecking=no 'for node in $(cat server-ips); do for i in $(seq 12010 12015); do screen -d -m netperf -H $node -p $i -t TCP_RR -l 100 -- -r 1B,1B; done ; done'
  • 测试网络延迟和吞吐量 ./netperf_client_9999 -t TCP_RR -H -l 60 -- -r 1B,1B -O " MIN_LAETENCY, MAX_LATENCY,MEAN_LATENCY, P90_LATENCY, P99_LATENCY ,P999_LATENCY,P9999_LATENCY,STDDEV_LATENCY ,THROUGHPUT ,THROUGHPUT_UNITS"
  • TCP_CRR 与TCP_RR不一样,TCP_CRR为每次交易创建一个新的TCP链接
  • 测试TCP_CRR短链接模式下pps pssh -i -h client-ips -O StrictHostKeyChecking=no 'for node in $(cat server-ips); do for i in $(seq 12010 12015); do screen -d -m netperf -H $node -p $i -t TCP_CRR -l 100 -- -r 1B,1B; done ; done'
  • UDP_RR UDP_RR方式使用UDP分组进行request/response的交易过程

3.2.3 实例

测试网络带宽bps
在对端机器上启动netserver,这是netperf自带的一个服务端程序。能够不带任何参数启动。
root@lkl-stress-test-nginx-017:~#   netserver -p 49999
Starting netserver with host 'IN(6)ADDR_ANY' port '49999' and family AF_UNSPEC
复制代码
在本机输入如下命令启动netperf:
$netperf -H $(对端IP)
root@lkl-stress-test-nginx-016:~# netperf -H 172.16.0.153
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.0.153 () port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

  8192  65536  65536    10.00    15955.55
复制代码
能够看到,带宽的吞吐量基本上达到了约15G。输出结果各个字段的含义以下:
![](https://pic2.zhimg.com/v2-3cb591171ce3f9b62ed260e7121a5a69_b.png)
  • PPS
  • PPS 为每秒钟发送成功的数据包个数
  • 具体计算方法:PPS = 数据包发送成功的数目/测试时间
  • 能够在 Server 端用 sar 命令来统计实际收到的数据包,具体命令以下所示,其表示每隔 1 秒统计一次,统计 300 次,sar 命令最后会对 300 次的统计结果求平均

    sar -n DEV 1 300php

测试延迟
在对端机器上启动netserver。 在本机输入如下命令启动netperf:
root@lkl-stress-test-nginx-016:~# netperf -H 172.16.0.153  -t omni -- -d rr -O "THROUGHPUT, THROUGHPUT_UNITS, MIN_LATENCY, MAX_LATENCY, MEAN_LATENCY"
OMNI Send|Recv TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 172.16.0.153 () port 0 AF_INET : demo
Throughput Throughput Minimum      Maximum      Mean         
           Units      Latency      Latency      Latency      
                      Microseconds Microseconds Microseconds 

22547.84   Trans/s    36           3605         44.23
复制代码
能够看到,在resquest/response测试模式下,每秒的吞吐量为22547.84次,最小的时延为36微秒,最大为3605微秒,平均时延为44.23微秒。结果显示,有比较少的报文的延迟比较厉害,达到了毫秒级,可是大部分都在100微秒级

3.2.4 参考

  • 物理专线网络性能测试方法:[https://help.aliyun.com/document_detail/58625.html](https://help.aliyun.com/document_detail/58625.html)
  • netperf 与网络性能测量:[https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html](https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html)
  • [https://www.cnblogs.com/xieshengsen/p/6493277.html](https://www.cnblogs.com/xieshengsen/p/6493277.html)
  • [https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html](https://www.ibm.com/developerworks/cn/linux/l-netperf/index.html)
  • [https://sq.163yun.com/blog/article/190965728772210688](https://sq.163yun.com/blog/article/190965728772210688)
  • 三层网络PPS极限测试:[https://blog.csdn.net/minxihou/article/details/84930250](https://blog.csdn.net/minxihou/article/details/84930250)
  • netperf 和 iperf 网络性能测试小结:[https://wsgzao.github.io/post/netperf/](https://wsgzao.github.io/post/netperf/)
  • [https://blog.didiyun.com/index.php/2018/12/07/netperf/](https://blog.didiyun.com/index.php/2018/12/07/netperf/)
  • 网络性能测试方法: [https://www.alibabacloud.com/help/zh/faq-detail/55757.htm](https://www.alibabacloud.com/help/zh/faq-detail/55757.htm)
  • http 性能测试 wrk使用教程:[https://juejin.cn/post/6844903550288396296](https://juejin.cn/post/6844903550288396296)

4、网络数据监控工具

4.1 netdata

实际效果参考:下图是经过netdata监控云主机eth0网卡的流量,但是直观的看到收方向和发方向的流量情况,相比sar工具统计更为直观。
![](https://pic4.zhimg.com/v2-ca9eb5b50972c11092f2fec73b8d62bf_b.png)
Fping相似于ping,但比ping强大。Fping与ping不一样的地方在于,fping能够在命令行中指定要ping的主机数量范围,也能够指定含有要ping的主机列表文件。与ping要等待某一主机链接超时或发回反馈信息不一样,fping给一个主机发送完数据包后,立刻给下一个主机发送数据包,实现多主机同时ping。若是某一主机ping通,则此主机将被打上标记,并从等待列表中移除,若是没ping通,说明主机没法到达,主机仍然留在等待列表中,等待后续操做。
下图是netdata集成fping 监控网络连通性,其中 fping.conf 的配置文件为:
~# cat fping.conf
fping="/usr/local/bin/fping"
hosts="172.16.1.2 10.10.10.10"  # 这边配置须要ping的地址,经过空格隔离ip地址或域名
update_every=1
ping_every=1000
fping_opts=" -b 56 -r 0 -t 5000"
复制代码
  • 支持fping 监控

    docker run -d --name=netdata
    -p 19999:19999
    -v /etc/passwd:/host/etc/passwd:ro
    -v /etc/group:/host/etc/group:ro
    -v /proc:/host/proc:ro
    -v /sys:/host/sys:ro
    -v /var/run/docker.sock:/var/run/docker.sock:ro
    -v /root/fping.conf:/etc/netdata/fping.conf:ro
    --cap-add SYS_PTRACE
    --security-opt apparmor=unconfined
    hub.c.163.com/nvsoline2/netdata:fpinghtml

![](https://pic2.zhimg.com/v2-faf5673ca57d862cf84201f06d37d35d_b.png)
  • 监控数据持久化保留30天数据
须要配置dbengine,理论上5G硬盘能够支持 每秒2000个数据点,30天。
root@jiande1-dgw-jiande1:~# cat netdata.conf
[global]
    memory mode = dbengine
    page cache size = 32
    dbengine disk space = 4999
复制代码
启动时使用上面这个netdata.conf配置。
  • portcheck配置
这些都属于 https://learn.netdata.cloud/docs/agent/collectors/go.d.plugin 插件。
~# cat portcheck.conf 
update_every: 1

jobs:
  - name: server1
    host: 127.0.0.1
    ports: 
      - 22

  - name: server2
    host: 59.111.96.215
    ports:
      - 9009

  - name: nlb-beta-test
    host: 59.111.245.80
    update_every: 1
    ports:
      - 80
复制代码
go.d.conf ,里面把须要监控的项目打开
~# cat go.d.conf 
# netdata go.d.plugin configuration
#
# This file is in YaML format.

# Enable/disable the whole go.d.plugin.
enabled: yes

# Enable/disable default value for all modules.
default_run: yes

# Maximum number of used CPUs. Zero means no limit.
max_procs: 0

# Enable/disable specific g.d.plugin module
# If you want to change any value, you need to uncomment out it first.
# IMPORTANT: Do not remove all spaces, just remove # symbol. There should be a space before module name.
modules:
  example: yes
  nginx: yes
  portcheck: yes
复制代码
nginx监控demo
~# cat nginx.conf 
jobs:
  - name: local
    url: http://10.199.128.66/nginx_status
复制代码
docker 启动命令
docker run -d --name=netdata -p 19999:19999 \
 -v /etc/passwd:/host/etc/passwd:ro \
 -v /etc/group:/host/etc/group:ro \
 -v /proc:/host/proc:ro \
 -v /sys:/host/sys:ro \
 -v /var/run/docker.sock:/var/run/docker.sock:ro \
 -v /root/fping.conf:/etc/netdata/fping.conf:ro \
 -v /root/example.conf:/etc/netdata/go.d/example.conf:ro \
 -v /root/portcheck.conf:/etc/netdata/go.d/portcheck.conf:ro \
 -v /root/nginx.conf:/etc/netdata/go.d/nginx.conf:ro \
 -v /root/go.d.conf:/etc/netdata/go.d.conf:ro \
 -v /root/netdata.conf:/etc/netdata/netdata.conf:ro \
 --cap-add SYS_PTRACE \
 --security-opt apparmor=unconfined \
 hub.c.163.com/nvsoline2/netdata:fping
复制代码

4.2 参考

  • 实时系统性能监控工具:[https://github.com/netdata/netdata](https://github.com/netdata/netdata)
  • [https://www.hi-linux.com/tags/#NetData](https://www.hi-linux.com/tags/#NetData)
  • [https://cloud.tencent.com/developer/article/1409664](https://cloud.tencent.com/developer/article/1409664)
【延伸阅读】
[网易数帆:【解决方案】智能UI自动化测试](https://zhuanlan.zhihu.com/p/225795549)
[网易数帆:【解决方案】性能压测及分析调优实践](https://zhuanlan.zhihu.com/p/212664235)
[网易数帆:【解决方案】1万+接口测试与管理的进阶之路](https://zhuanlan.zhihu.com/p/166549356)
相关文章
相关标签/搜索