效能工具之JMeter+InfluxDB+Grafana打造壓測視覺化實時監控
概述
本文我們將介紹如何使用JMeter+InfluxDB+Grafana打造壓測視覺化實時監控。
引言
我們很多時候在使用JMeter做效能測試,我們很難及時察看壓測過程中應用的效能狀況,總是需要等到測試完成後去看Report,如果是長時間壓測,比如壓測1~2天,那就更煩人了。
壓測的時候,我們實時通過監聽器 Generate Summary Results 彙總輸出,可以看到如下內容

GenerateSummaryResults 彙總展示了壓測中需要關注的大量資訊,其中包括:Avg (Average), Min (Minimum) 、Max (Maximum)響應時間,TPS,錯誤率,活躍執行緒數等, jmeter . properties 預設是30秒的統計頻率,如果我們想使用小於30秒更細顆粒度的統計頻率的時候,那麼在控制檯會有大量的輸出,這個時候我們就不好觀察結果了。
另一方面,如果需要分享給其它人員,這種控制檯輸出方式並不是一個很友好的方式,我們需要一個簡單漂亮的圖形,比如HTML Dashboard,但需要等待整個測試完成。
因此,我們可以在測試計劃中去除 Generate Summary Results ,把測試結果傳送到資料庫中持久化,這樣我們就可以通過SQL查詢資料庫來建立展示圖表。
從JMeter2.13開始,通過提供實現AbstractBackendListenerClient的類,可以使用(JDBC,JMS,Webservice,...)通過Backend Listener傳送到資料庫的儲存實時結果。
Backend Listener GraphiteBackendListenerClien t,允許將統計指標傳送到Graphite
此功能提供:
-
實時資料
-
漂亮圖表
-
能夠對比2個以上的測試計劃
-
只要JMeter產生相同的Backend,就可以儲存監控資料
-
...
JMeter 3.2 Backend Listener中引入的 InfluxDBBackendListenerClient 允使用UDP或HTTP協議將統計指標傳送到InfluxDB
此功能提供:
-
實時資料
-
漂亮圖表
-
能夠對比2個以上的測試計劃
-
能夠向圖表添加註釋
-
只要JMeter產生相同的Backend,就可以儲存監控資料
-
...
解決方案
JMeter引入Backend Listener,用於在壓測過程中實時傳送統計指標資料給時序資料庫Influxdb,通過配置Grafana(開源的WEB視覺化看板)資料來源連線到Influxdb,我們就可以建立炫酷的視覺化看板,並可以實時獲取到測試指標資料。

相關介紹:
時序資料庫:處理帶時間標籤(按照時間的順序變化,即時間序列化)的資料,帶時間標籤的資料也稱為時間序列資料。想象它就像一個sql表,其中時間是它的主鍵
InfluxDB:是一款用Go語言編寫的開源分散式時序、事件和指標資料庫,無需外部依賴。該資料庫現在主要用於儲存涉及大量的時間戳資料,如DevOps監控資料,APP metrics, loT感測器資料和實時分析資料。
官網地址:https://www.influxdata.com/
資料DEMO

與傳統資料庫中的名詞做比較
InfluxDB中獨有的一些概念
Point由時間戳(time)、資料(field)、標籤(tags)組成。

JMeter&InfluxDB整合
InfluxDB安裝
安裝要求
網路埠
InfluxDB預設使用以下網路埠:
-
TCP埠8086用於通過InfluxDB的HTTP API進行客戶端-伺服器通訊
-
TCP埠8088用於RPC服務以進行備份和還原
-
除了上面的埠,InfluxDB還提供了多個可能需要自定義埠的外掛。可以通過配置檔案修改所有埠對映,配置檔案位於 /etc/ influxdb / influxdb . conf 預設位置。
網路時間協議(NTP)
InfluxDB使用主機的UTC本地時間為資料分配時間戳並用於協調目的。使用網路時間協議(NTP)同步主機之間的時間; 如果主機的時鐘與NTP不同步,寫入InfluxDB的資料的時間戳可能不準確。
下載安裝
-
wget et https :// dl . influxdata . com / influxdb / releases / influxdb - 1.6 . 2.x86 _64 . rpm
-
sudo yum localinstall influxdb - 1.6 . 2.x86 _86_64 . rpm
InfluxDB配置
找到InfluxDB配置檔案(/etc/influxdb/influxdb.conf)
-
vi / etc / influxdb / influxdb . conf
influxdb . conf 中的大多數設定都被註釋掉了;所有註釋掉的設定將確定為內部預設值。如果配置檔案中的任何未註釋的設定都會覆蓋內部預設值。
請注意,本地配置檔案不需要包含每個配置設定。
如果你無法找到配置檔案,可以使用InfluxDB顯示配置命令
-
Influxd config
Jmeter使用graphite協議去寫入資料到InfluxDB,因此,需要在InfluxDB配置檔案啟用它,如下圖所示:

修改後,使用以下命令載入InfluxDB啟動
有兩種方法可以使用配置檔案啟動InfluxDB:
1.使用以下-config選項將程序指向正確的配置檔案

2.將環境變數設定為INFLUXDB CONFIG PATH配置檔案的路徑並啟動
InfluxDB操作
JMeter配置
-
建立一個測試計劃,並新增Backend Listener
-
設定InfluxDB IP及埠
-
執行測試,等待幾秒
-
檢視JMeter是否生成錯誤日誌

埠說明:
-
8086埠,Grafana用來從資料庫取資料的埠
-
2003埠,JMeter往資料庫發資料的埠
檢視JMeter資料庫下所有的表

OK,我們已經可以將統計指標資料成功傳送到InfluxDB
Grafana&InfluxDB整合
什麼是Grafana?
Grafana是一個開源軟體,擁有豐富的指標儀表盤和圖形編輯器,適用Graphite, Elasticsearch, OpenTSDB, Prometheus,InfluxDB。簡單點說就是一套開源WEB視覺化平臺。
官網地址:https://grafana.com/
安裝啟動
下載安裝

啟動
使用瀏覽器開啟 http : //IP:3000/login ,訪問Grafana主頁
建立InfluxDB資料來源
單擊 save & test ,確保可以連線上InfluxDB
建立dashboard
新增Graph面板
資料繫結
執行緒數/使用者相關指標
-
test.minAT-Min active threads:最小活躍執行緒數
-
test.maxAT-Max active threads:最大活躍執行緒數
-
test.meanAT-Mean active threads:活躍執行緒數
-
test.startedT-Started threads:啟動執行緒數
-
test.endedT-Finished threads:結束執行緒數
響應時間指標
-
.ok.count:取樣器的成功響應數
-
.h.count:每秒點選數
-
.ok.min:取樣器成功最短響應時間
-
.ok.max:取樣器成功最長響應時間
-
.ok.avg:取樣器成功平均響應時間
-
.ok.pct:取樣器成功響應百分比
-
.ko.count:取樣器失敗響應數
-
.ko.min:取樣器失敗的響應最短時間
-
.ko.max:取樣稱失敗最長響應時間
-
.ko.avg:取樣器失敗平均響應時間
-
.ko.pct:取樣器失敗響應百分比
-
.a.count:取樣器響應數(ok.count和ko.count的總和)
-
.a.min:取樣器最小響應時間(ok.count和ko.count的最小值)
-
.a.max:取樣器最大響應時間(ok.count和ko.count的最大值)
-
.a.avg:取樣器平均響應時間(ok.count和ko.count的平均值)
-
.a.pct:取樣器響應百分比(根據和失敗樣本的總數計算)
Backend Listener的預設百分位設定為“90;95;99”,即百分位數為90%,95%和99%。
Graphite使用點(“.”)去拆分的元素,這可能與十進位制百分位值混淆。JMeter轉換任何此類值,用下劃線(“ - ”)替換點(“.”)。例如,“99.9 ”變為“99_9 ”
預設情況下,JMeter傳送在samplerName“all”下累計的所有采樣器的指標。 如果配置了 Backend Listener SamplersList ,那麼JMeter還會發送匹配樣本名稱的指標,前提是配置 summaryOnly = true
壓測中的效果

匯入Dashboard模版
如果讓大家去設計一個好看的Dashboard,估計大家都不太想從零開始自己設計,其實Grafana官網提供豐富的模版的庫,大家可以自己上去找,然後進行二次擴充套件。
官網模版庫:https://grafana.com/dashboards
搜尋看板模版

此處,我選擇下載這個下載量3000+的模版
下模版JSON檔案
匯入模版
選擇資料來源
JMeter Backend Listener設定
壓測期間的動畫效果
至此,我初步打造的壓測視覺化實時監控大功告成~:smile:
【宣告】:上文為本站編輯轉載,文章版權歸原作者所有。文章內容為作者個人觀點,本站只提供轉載參考,目的在於傳遞更多專業資訊,普惠測試相關從業者,開源分享,推動行業交流和進步。如涉及作品內容、版權和其它問題,請原作者及時與本站聯絡,我們將第一時間進行處理。本站擁有對此宣告的最終解釋權!