1. 程式人生 > >jmeter+influxdb+grafana搭建壓測監控平臺

jmeter+influxdb+grafana搭建壓測監控平臺

文將介紹如何使用Jmeter+influxDB+Grafana搭建壓測視覺化實時監控
痛點
在使用jmeter做效能測試的時候,監控系統性能的時候,無論是使用外掛還是報告生成,都比較麻煩,比如監控服務的tps資訊

 

為了能夠及時看到實時,並且比較美觀的圖表,我們可以通過jmeter的AbstractBackendListenerClient類,使用Backend Listener傳送資料到資料庫的儲存實時結果。
從jmeter2.13開始,Backend Listener提供一下功能:

  • 實時資料
  • 漂亮圖表
  • 能夠對比2個以上的測試計劃

 

JMeter 3.2的Backend Listener中引入了 InfluxDBBackendListenerClient允使用UDP或HTTP協議將統計指標傳送到InfluxDB

此類提供的功能:

  • 實時資料
  • 漂亮圖表
  • 能夠對比2個以上的測試計劃
  • 能夠向圖表添加註釋
  • 只要jmeter產生相同的Backend,就可以儲存監控資料

Influxdb簡介
 InfluxDB是用Go語言編寫的高效能、高可用的分散式時序資料儲存資料庫,無其他依賴,安裝簡單快速。
  該資料庫現在主要用於儲存涉及大量的時間戳資料,如DevOps監控資料,APP metrics, loT感測器資料和實時分析資料。
InfluxDB特徵:

  • 無結構(無模式):可以是任意數量的列
  • 可以設定metric的儲存時間
  • 支援與時間有關的相關函式(如min、max、sum、count、mean、median等),方便統計
  • 支援儲存策略:可以用於資料的刪改。(influxDB沒有提供資料的刪除與修改方法)
  • 支援連續查詢:是資料庫中自動定時啟動的一組語句,和儲存策略搭配可以降低InfluxDB的系統佔用量。
  • 原生的HTTP支援,內建HTTP API
  • 支援類似sql語法select * from mysql.user
  • 支援設定資料在叢集中的副本數
  • 支援定期取樣資料,寫入另外的measurement,方便分粒度儲存資料。

schemaless: 結構型資料庫類似Mysql需要先定義列,influxdb無需預先定義,無結構的
與傳統資料庫中的名詞比較

 influxDB中的名詞  傳統資料庫的概念
 database  資料庫
 measurement  資料庫中的表
 points  表裡面的一行資料

 

influxdb的points資料說明

  • time:預設儲存資料會有時間,時間無需關心,會幫我們自動插入
  • tags:用來儲存資料標識,比如CPU.idle
  • fileds:用來儲存資料 value=90

influxdb下載安裝
下載:
[[email protected] ~]#wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpm --no-check-certificate
百度網盤下載地址:https://pan.baidu.com/s/13hKY22krYSLTs9_A2O7KVA
提取碼:sc9z
安裝
[[email protected] opt]# rpm -ivh influxdb-1.7.0.x86_64.rpm
Preparing... ########################################### [100%]
1:influxdb ########################################### [100%]
安裝完之後,生成預設的配置檔案 /etc/influxdb/influxdb.conf

修改influxDB配置檔案
在配置檔案中找到graphite配置項,去掉前面的“#”號
[[email protected] opt]# vim /etc/influxdb/influxdb.conf

[[graphite]]
# Determines whether the graphite endpoint is enabled.
enabled = true
database = "jmeter"    # 資料庫名稱
retention-policy = ""
bind-address = ":2003"    # 埠
protocol = "tcp"
consistency-level = "one"

修改以下資訊
[meta]
dir = "/usr/local/influxdb/meta"    #存放最終儲存的資料,檔案以.tsm結尾
[data]
dir = "/usr/local/influxdb/data"    #存放資料庫元資料 wal
wal-dir = "/usr/local/influxdb/wal"    #存放預寫日誌檔案

修改HTTP埠資訊
[http]
# Determines whether HTTP endpoint is enabled.
enabled = true

# The bind address used by the HTTP service.
bind-address = ":8086"

 

建立目錄更新許可權
[[email protected] ~]#mkdir -p /usr/local/influxdb/
[[email protected] ~]#chown -R influxdb:influxdb /usr/local/influxdb/
修改完成之後,可以使用以下命令啟動influxDB服務
兩種方法:
1、[[email protected] ~]# influxd -config /etc/influxdb/influxdb.conf

2、新增到環境變數中(推薦)
[roo[email protected] ~]# vim /etc/profile
export INFLUXDB_CONFIG_PATH=/etc/influxdb/influxdb.conf
[[email protected] ~]# source /etc/profile
[[email protected] ~]# influxd &
influxDB的tcp埠:8088
檢視埠有沒有起來
[[email protected] ~]# netstat -anp|grep 8088
influxDB資料庫操作

[[email protected] ~]# influx    # 登入資料庫
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> show databases    # 檢視資料庫
name: databases
name
----
_internal
jmeter
> create database "jmeter"    # 建立資料庫
> use jmeter    #切換資料庫
Using database jmeter
> create user "admin" with password '123456' with all privileges    # 建立管理員許可權的使用者

 

Jmeter配置

  • 建立一個測試計劃,並新增Backend Listenter,Backend Listener implementation 選擇org.apache.jmeter.visualizers.backend.graphite.GraphiteBackendListenerClient
  • 新增執行緒
  • 設定influxDB IP及埠
  • 執行測試,等待幾秒看資料

 

 

 

埠說明

2003埠:Jmeter往資料庫發資料的埠
8086埠,Grafana從資料庫取資料的埠

檢視Jmeter資料庫的表資訊

[[email protected] ~]# influx
Connected to http://localhost:8086 version 1.6.0
InfluxDB shell version: 1.6.0
> show measurements
ERR: database name required
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use <database>".
> show databases
name: databases
name
----
_internal
jmeter
> use jmeter
Using database jmeter
> show measurements
name: measurements
name
----
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.avg
jmeter.all.ko.count
jmeter.all.ko.max
jmeter.all.ko.min
jmeter.all.ko.pct90
jmeter.all.ko.pct95
jmeter.all.ko.pct99
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.all.rb.bytes
jmeter.all.sb.bytes
jmeter.test.endedT
jmeter.test.maxAT
jmeter.test.meanAT
jmeter.test.minAT
jmeter.test.startedT

這個時候已經可以將統計資料成功傳送到InfluxDB

Grafana和influxDB資料來源配置
什麼是Grafana
Grafana是一款視覺化工具,大多使用在時序資料的監控方面,如同Kibana類似。Grafana的UI更加靈活,有豐富的外掛,功能強大,資料來源可以使用zabbix、influxdb等
grafana的下載和安裝
官網:https://grafana.com/grafana/download
下載地址:https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.1-1.x86_64.rpm
安裝:rpm -ivh grafana-5.2.1-1.x86_64.rpm

啟動
[[email protected] ~]# service grafana-server start
Starting Grafana Server: ... [ OK ]

瀏覽器訪問:http://IP:3000/login
grafana的預設使用者名稱密碼都是admin,第一次登入會要求更改密碼

建立influxDB資料來源

 

單擊save & Test,提示:data source is working,說明儲存和連線成功

建立dashboard

新建Graph面板

資料繫結

 

選擇influxdb的資料來源庫名,jmeter的相關表

檢視SQL語句

定義顯示的名稱

儲存資料模板
直接按ctrl+s或點選儲存按鈕

 

 

說明:想要了解這些監控都代表什麼意思,可以訪問Jmeter的官網地址去檢視閱讀“http://jmeter.apache.org/usermanual/realtime-results.html”

執行緒數/使用者相關指標
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模版
從Grafana官網下載相應的模板
官網模版庫:https://grafana.com/dashboards
搜尋看板模版

 

下載:jmeter load test

 

下載的jar包複製到jmeter的/lib/ext下面

匯入模板

載入模板檔案

選擇模板資料來源

重啟jmeter,選擇rocks.nt.apm.jmeter.JMeterinfluxDBBackendListenerClient,輸入influxDB的host和埠,之前建立使用者名稱和密碼

 

壓測的效果圖