如何透過 JMeter 產生流量並透過 CloudWatch 監控流量

如何透過 JMeter 產生流量並透過 CloudWatch 監控流量

我們先前的例子都是透過 CPU 使用率來決定擴展策略,但是流量一直都是比較直覺的判斷方式,因爲流量是用戶使用應用程序次數的一個特徵,今天要做的就是如何來產生我們想要的流量,以及透過CloudWatch來觀察。

Jmeter

Jmeter 是 Apache 開源項目,使用Java開發的測試工具,主要用來做功能測試和性能測試(壓力測試/負載測試),我們將會用它來進行流量的產生。

安裝 Java SE, https://www.java.com/download/manual.jsp

千萬要記得安裝的目錄,如果下一個動作沒成功的話,可以手動設定環境變量,把Java的路徑直接加到環境變量中
PATH= …;C:\Program Files\Java\jdk-14.0.2\bin
JAVA_HOME = C:\Program Files\Java\jdk-14.0.2

透過控制檯直接設定 Java 環境
圖 1. 透過控制檯直接設定 Java 環境

安裝 Jmeter, http://jmeter.apache.org/download_jmeter.cgi

下載壓縮文件,解壓縮完直接執行 ./bin/jmeter.bat ,Jmeter 是支持中文的, 啓動 Jmeter 後, 點擊 Options -> Choose Language 來選擇語言。

Apache Jmeter官方網站下載壓縮文件
圖 2. Apache Jmeter 官方網站下載壓縮文件

Jmeter 改變語言設定
圖 3. Jmeter 改變語言設定

設定 Jmeter

我們的目標是在特定的時間產生指定的流量,比方說,在 60 秒內產生 1,000 次的網頁讀取
測試目標: ithomealb-1480018609.ap-southeast-1.elb.amazonaws.com (由 AWS ELB 所提供)
模擬使用者: 10 個使用者
請求頻率: 1,000/per minute

步驟 1. 新建 Thread Group
Jmeter 的所有任務都由線程來進行,所有任務都必須在線程組下面創建,在 AWS Test Plan 按左鍵。

新建 Thread Group
圖 4. 新建 Thread Group

線程數量 Number of Threads: 一個用戶佔一個線程, 10 個線程就是仿真 10 個用戶
準備時長 Ramp-Up Period(in seconds): 設置線程需要多長時間全部啓動。如果線程數爲 10 ,準備時長爲 10 ,那麼需要1秒鐘啓動 1 個線程。
Loop Count: 每個線程發送請求的次數。如果線程數爲 10 ,循環次數爲 10 ,那麼每個線程發送10次請求。總請求數爲 10*10 = 100 。如果勾選了「永遠」,那麼所有線程會一直髮送請求,直到選擇停止運行腳本。

設定 Thread Group
圖 5. 設定 Thread Group

步驟 2. 新增 HTTP Request
我們是測試網頁所以要建立 HTTP Request,在 線程羣組1000 按左鍵,新增 > 取樣 > HTTP要求

新增 HTTP Request
圖 6. 新增 HTTP Request

協定: HTTP
主機: ithomealb-1480018609.ap-southeast-1.elb.amazonaws.com

設定 HTTP Request
圖 7. 設定 HTTP Request

步驟 3. 新增定時器
設定在固定時間內發出特定數量的請求,在 線程羣組1000 按左鍵,新增 > 定時器 > 固定時隔

新增定時器
圖 8. 新增定時器

固定處理量定時器 Constant Throughput Timer:通過計算使總處理量(以每分鐘計)儘可能接近給定的數字。當然,如果服務器不能處理它,或者如果其他定時器或耗時的測試原件阻止它,那麼處理量將更低。作用在於控制吞吐量,要注意把定時器放在線程羣組,並在請求的上面

目標處理量 Target throughput(in samples per minute): 1000
Calculate Throughput based on : all active threads in current thread group

計算處理量的其他設定:

  • this thread only: 設置每個線程的處理量。處理量總和爲 = 線程數 * 該值。
  • all active threads in current thread group:處理量被分攤到當前線程組所有的活動線程上。每個線程將根據上次運行時間延遲。
  • all active threads:處理量被分配到所有線程組的所有活動線程的總處理量。每個線程將根據上次運行時間延遲。在這種情況下,每個線程組需要一個具有相同設置的固定處理量定時器。
  • all active threads in current thread group (shared):同上,但是每個線程是根據組中的線程的上一次運行時間來延遲。相當於線程組組內排隊。
  • all active threads (shared):同上,但每個線程是根據線程的上次運行時間來延遲。相當於讓所有線程組整體排隊。

設定定時器
圖 9. 設定定時器

步驟 4. 新增測試結果 Summary Report
設定在固定時間內發出特定數量的請求,在 AWS HTTP Request 按左鍵,新增 > 接聽 > Summary Report

新增 Summary Report
圖 10. 新增 Summary Report

可以直接按下開始後就會開始記錄。

觀察  Summary Report
圖 11. 觀察 Summary Report

設定 CloudWatch 儀表板

按下上方的服務按鈕,選擇 CloudWatch ,進入 CloudWatch 控制檯後,按下右方功能選單儀表板,按下建立儀表板後,輸入要觀察的衡量指標值 RequestCount

儀表板名稱: JmeterRequestCount

建立 CloudWatch 儀表板畫面
圖 12. 建立 CloudWatch 儀表板畫面

設定 CloudWatch 儀表板中 Widget 類型
圖 13. 設定 CloudWatch 儀表板中 Widget 類型

Widget 的數據源選擇 指標值( Metrics )

設定 Widget 的數據源
圖 14. 設定 Widget 的數據源

指標值設定爲 Singapore > 全部 > ApplicationELB > 每個 AppELB 指標 > RequestCount ,要注意要確定看到上面的圖型有數據才能確定已經正確找到指標值,因爲有時候會有很多個 AppELB 實體,所以需要去找一下ALB ID確認一下

設定 RequestCount 指標值
圖 15. 設定 RequestCount 指標值

因爲需要知道 1 分鐘內有多少個請求,所以需要把_統計數據_從平均數改成樣本數期間 5 分鐘改成 1 分鐘。

設定圖形化指針
圖 16. 設定圖形化指針

建立 JmeterRequestCount 儀表板的畫面如下, Jmeter 還一直都有在發出請求

JmeterRequestCount 儀表板
圖 17. JmeterRequestCount 儀表板

References

  • 《jmeter:菜鳥入門到進階》系列, https://www.cnblogs.com/imyalost/p/7062784.html
  • Jmeter教程 簡單的壓力測試, https://www.cnblogs.com/TankXiao/p/4059378.html
  • Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程),https://www.cnblogs.com/du-hong/p/13150952.html
    ogs.com/TankXiao/p/4059378.html
  • Jmeter(十三) - 從入門到精通 - JMeter定時器 - 上篇(詳解教程),https://www.cnblogs.com/du-hong/p/13150952.html