文章目錄
概述
引言
解決方案
JMeter&InfluxDB集成
InfluxDB安裝
安裝要求
下載安裝
InfluxDB配置
JMeter配置
Grafana&InfluxDB集成
安裝啓動
導入Dashboard模版
概述
本文咱們將介紹如何使用JMeter+InfluxDB+Grafana打造壓測可視化實時監控。sql
引言
咱們不少時候在使用JMeter作性能測試,咱們很難及時察看壓測過程當中應用的性能情況,老是須要等到測試完成後去看Report,若是是長時間壓測,好比壓測1~2天,那就更煩人了。shell
壓測的時候,咱們實時經過監聽器 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
1
2
3
4
5
6
7
8
9
10
11
12
13
另外一方面,若是須要分享給其它人員,這種控制檯輸出方式並非一個很友好的方式,咱們須要一個簡單漂亮的圖形,好比HTML Dashboard,但須要等待整個測試完成。服務器
所以,咱們能夠在測試計劃中去除GenerateSummaryResults,把測試結果發送到數據庫中持久化,這樣咱們就能夠經過SQL查詢數據庫來建立展現圖表。網絡
從JMeter2.13開始,經過提供實現AbstractBackendListenerClient的類,可使用(JDBC,JMS,Webservice,…)經過Backend Listener發送到數據庫的存儲實時結果。app
BackendListenerGraphiteBackendListenerClient,容許將統計指標發送到Graphite
此功能提供:tcp
實時數據
漂亮圖表
可以對比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 1000 北 18 17
1456386985094000000 5000 上 20 47
1456386985094000000 5000 北 26 68
1456386985094000000 1000 廣 17 83
1456387267668000000 1000 上 12 77
1456387267668000000 1000 北 16 20
1456387267668000000 5000 廣 -3 66
1456387267668000000 5000 上 19 60
1
2
3
4
5
6
7
8
9
10
11
12
與傳統數據庫中的名詞作比較
influxDB中的名詞 傳統數據庫中的概念
database 數據庫
measurement 數據庫中的表
points 表裏面的一行數據
InfluxDB中獨有的一些概念
Point由時間戳(time)、數據(field)、標籤(tags)組成。
Point屬性 傳統數據庫中的概念
time 每一個數據記錄時間,是數據庫中的主索引(會自動生成)
fields 各類記錄值(沒有索引的屬性)也就是記錄的值:溫度, 溼度
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
1
2
InfluxDB配置
找到InfluxDB配置文件(/etc/influxdb/influxdb.conf)
vi /etc/influxdb/influxdb.conf
1
influxdb.conf中的大多數設置都被註釋掉了;全部註釋掉的設置將肯定爲內部默認值。若是配置文件中的任何未註釋的設置都會覆蓋內部默認值。
請注意,本地配置文件不須要包含每一個配置設置。
若是你沒法找到配置文件,可使用InfluxDB顯示配置命令
Influxd config
1
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
1
2
3
4
5
6
7
8
9
10
11
12
修改後,使用如下命令加載InfluxDB啓動
有兩種方法可使用配置文件啓動InfluxDB:
1.使用如下-config選項將進程指向正確的配置文件
influxd -config /etc/influxdb/influxdb.conf
1
2.將環境變量設置爲INFLUXDBCONFIGPATH配置文件的路徑並啓動
echo $INFLUXDB_CONFIG_PATH
/etc/influxdb/influxdb.conf
influxd
1
2
3
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 # 建立管理員權限的用戶
1
2
3
4
5
6
7
8
9
10
11
12
JMeter配置
建立一個測試計劃,並添加Backend Listener
設置InfluxDB IP及端口設置InfluxDB IP及端口
運行測試,等待幾秒運行測試,等待幾秒
查看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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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
1
2
啓動
service grafana-server start
Starting grafana-server (via systemctl): [ OK ]
1
2
使用瀏覽器打開 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設置
壓測期間的動畫效果