性能工具之JMeter+InfluxDB+Grafana打造壓測可視化實時監控


概述

本文我們將介紹如何使用JMeter+InfluxDB+Grafana打造壓測可視化實時監控。

引言

我們很多時候在使用JMeter做性能測試,我們很難及時察看壓測過程中應用的性能狀況,總是需要等到測試完成后去看Report,如果是長時間壓測,比如壓測1~2天,那就更煩人了。

 

壓測的時候,我們實時通過監聽器 GenerateSummaryResults匯總輸出,可以看到如下內容

 

 

GenerateSummaryResults匯總展示了壓測中需要關注的大量信息,其中包括:Avg (Average), Min (Minimum) 、Max (Maximum)響應時間,TPS,錯誤率,活躍線程數等, jmeter.properties默認是30秒的統計頻率,如果我們想使用小於30秒更細顆粒度的統計頻率的時候,那么在控制台會有大量的輸出,這個時候我們就不好觀察結果了。

# jmeter.properties 
# Define the following property to automatically start a summariser with that name
# (applies to non-GUI mode only)
# summariser.name=summary
#
# interval between summaries (in seconds) default 3 minutes
# summariser.interval=30
#
# Write messages to log file
# summariser.log=true
#
# Write messages to System.out
# summariser.out=true

另一方面,如果需要分享給其它人員,這種控制台輸出方式並不是一個很友好的方式,我們需要一個簡單漂亮的圖形,比如HTML Dashboard,但需要等待整個測試完成。

因此,我們可以在測試計划中去除GenerateSummaryResults,把測試結果發送到數據庫中持久化,這樣我們就可以通過SQL查詢數據庫來創建展示圖表。

從JMeter2.13開始,通過提供實現AbstractBackendListenerClient的類,可以使用(JDBC,JMS,Webservice,…)通過Backend Listener發送到數據庫的存儲實時結果。

BackendListenerGraphiteBackendListenerClient,允許將統計指標發送到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

> select* from weather
name: weather
-------------
time                    altitude        area    humidity        temperature
1456386985094000000     100018              17
1456386985094000000     500020              47
1456386985094000000     500026              68
1456386985094000000     100017              83
1456387267668000000     100012              77
1456387267668000000     100016              20
1456387267668000000     5000            廣      -3              66
1456387267668000000     500019              60

與傳統數據庫中的名詞做比較

 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配置文件啟用它,如下圖所示:

[[graphite]]
 enabled = true
 bind-address = ":2003"
 database = "jmeter"
 retention-policy = ""
 protocol = "tcp"
 batch-size = 5000
 batch-pending = 10
 batch-timeout = "1s"
 consistency-level = "one"
 separator = "."
 udp-read-buffer = 0

 

修改后,使用以下命令加載InfluxDB啟動

有兩種方法可以使用配置文件啟動InfluxDB:
1.使用以下-config選項將進程指向正確的配置文件

influxd -config /etc/influxdb/influxdb.conf

2.將環境變量設置為INFLUXDBCONFIGPATH配置文件的路徑並啟動

echo $INFLUXDB_CONFIG_PATH
/etc/influxdb/influxdb.conf
influxd

InfluxDB操作

[root@zuozewei ~]# influx  #登錄數據庫
Connected to http://localhost:8086 version 1.6.2
InfluxDB shell version: 1.6.2
> show databases  #查看所有數據庫
name: databases
name
----
_internal
> CREATE DATABASE "jmeter" #創建數據庫
> use jmeter               #切換數據庫
Using database jmeter
> CREATE USER "admin" WITH PASSWORD 'admin' WITH ALL PRIVILEGES # 創建管理員權限的用戶

JMeter配置

  1. 創建一個測試計划,並添加Backend Listener
  2. 設置InfluxDB IP及端口設置InfluxDB IP及端口
  3. 運行測試,等待幾秒運行測試,等待幾秒
  4. 查看JMeter是否生成錯誤日志查看JMeter是否生成錯誤日志

 

端口說明:

  • 8086端口,Grafana用來從數據庫取數據的端口
  • 2003端口,JMeter往數據庫發數據的端口

查看JMeter數據庫下所有的表

> show measurements
name: measurements
name
----
delta
jmeter.all.a.avg
jmeter.all.a.count
jmeter.all.a.max
jmeter.all.a.min
jmeter.all.a.pct90
jmeter.all.a.pct95
jmeter.all.a.pct99
jmeter.all.h.count
jmeter.all.ko.count
jmeter.all.ok.avg
jmeter.all.ok.count
jmeter.all.ok.max
jmeter.all.ok.min
jmeter.all.ok.pct90
jmeter.all.ok.pct95
jmeter.all.ok.pct99
jmeter.test.endedT
jmeter.test.maxAT
jmeter.test.meanAT
jmeter.test.minAT
jmeter.test.startedT
total

OK,我們已經可以將統計指標數據成功發送到InfluxDB

Grafana&InfluxDB集成

什么是Grafana?

Grafana是一個開源軟件,擁有豐富的指標儀表盤和圖形編輯器,適用Graphite, Elasticsearch, OpenTSDB, Prometheus,InfluxDB。簡單點說就是一套開源WEB可視化平台。

官網地址:https://grafana.com/

安裝啟動

下載安裝

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.2.0-1.x86_64.rpm 
sudo yum localinstall grafana-4.2.0-1.x86_64.rpm

啟動

service grafana-server start
Starting grafana-server (via systemctl): [ OK ]

使用瀏覽器打開 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”下累計的所有采樣器的指標。 如果配置了 BackendListenerSamplersList,那么JMeter還會發送匹配樣本名稱的指標,前提是配置 summaryOnly=true

 

壓測中的效果

 

導入Dashboard模版

如果讓大家去設計一個好看的Dashboard,估計大家都不太想從零開始自己設計,其實Grafana官網提供豐富的模版的庫,大家可以自己上去找,然后進行二次擴展。

官網模版庫:https://grafana.com/dashboards

搜索看板模版

此處,我選擇下載這個下載量3000+的模版

下模版JSON文件

導入模版

 

選擇數據源

JMeter Backend Listener設置

壓測期間的動畫效果

 

至此,我初步打造的壓測可視化實時監控大功告成~😄

 

原文鏈接:https://blog.csdn.net/zuozewei/article/details/82911173#Dashboard_265

 

參考文章:

https://www.cnblogs.com/Leo_wl/p/8439796.html

http://www.cnblogs.com/imyalost/p/9873648.html

https://blog.csdn.net/wudufeng/article/details/78567866


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM