【測試實踐】搞定雲網絡系統性能測試

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)
相關文章
相關標籤/搜索