1. 程式人生 > >全網最詳細!Centos7.X 搭建Grafana+Jmeter+Influxdb 效能實時監控平臺

全網最詳細!Centos7.X 搭建Grafana+Jmeter+Influxdb 效能實時監控平臺

背景

日常工作中,經常會用到Jmeter去壓測,畢竟LR還要錢(@¥&*...),而最常用的介面壓力測試,我們都是通過聚合報告去檢視壓測結果的,然鵝聚合報告的真的是醜到家了,作為程式猿這當然不能忍!那我們要怎麼給它變得好看點捏?

 

如何華麗變身?

方式

優點

缺點

場景

Jmeter+ant+Jenkins

快捷,上手簡單

報告還是不夠美觀、直觀,如果測試介面一多,報告就會顯示臃腫不夠直觀

看最終報告

Grafana+Jmeter+Influxdb(推薦)

資料視覺化,資料直觀,篩選功能強大,拓展能力強

當然就是要自己部署環境咯,還得了解Influxdb的語法和常用查詢語句,系統方法等.....

看壓測過程中引數的變化

 

工具介紹

工具

介紹

Jmeter

Java語言開發的壓力測試工具(不多介紹)

InfluxDB 

Go 語言開發的一個開源分散式時序資料庫,非常適合儲存指標、事件、分析等資料

Grafana 

純 Javascript 開發的前端工具,用於訪問 InfluxDB,自定義報表、顯示圖表等

 

Centos7安裝InfluxDB

備註:博主是自己買的阿里雲伺服器哈,就不介紹虛擬機器下如何安裝了(畢竟虛擬機器很多坑...)

Influxdata官網下載路徑:https://portal.influxdata.com/downloads/

1、直接執行以下命令進行安裝:

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.6.3.x86_64.rpm
sudo yum localinstall influxdb-1.6.3.x86_64.rpm

2、安裝完成後,修改InfluxDB的配置,主要配置jmeter儲存的資料庫與埠號

vim /etc/influxdb/influxdb.conf

3、找到graphite並且修改它的庫與埠

enabled = true
database = "jmeter"
retention-policy = ""
bind-address = ":2003"
protocol = "tcp"
consistency-level = "one

4、找到http,將前面的#號去掉

5、現在新版本的InfluxDB已取消自帶的資料視覺化介面了,舊版的還是有,可通過找到admin,將前面的#號去掉,開放它的UI埠;(該步驟非必須!)

可通過InfluxDB視覺化工具來檢視我們的資料庫和資料哦,具體安裝和簡單使用參照此篇博文:https://www.cnblogs.com/poloyy/p/12213495.html

[admin]
# Determines whether the admin service is enabled.
enabled = true

# The default bind address used by the admin service.
bind-address = ":8083"

6、配置成功後,啟動InfluxDB

啟動命令: systemctl start influxdb.service 

檢視狀態命令: systemctl status influxdb.service 

到此,InfluxDB已安裝並配置完成了!!*:ஐ٩(๑´ᵕ`)۶ஐ:*

特別說明:

  • 8083埠:InfluxDB的UI介面展示的埠
  • 8086埠:Grafana用來從資料庫取資料的埠
  • 2003埠:剛剛設定的,Jmeter往資料庫發資料的埠

 

Centos7安裝Grafana

Grafana官網下載路徑:https://grafana.com/grafana/download

1、直接執行以下命令進行安裝:

wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm
sudo yum localinstall grafana-6.5.2-1.x86_64.rpm

2、然後啟動即可

啟動命令: systemctl start grafana-server.service  

檢視狀態命令: systemctl status grafana-server.service 

3、訪問IP加埠  http://xxx.xx.xx.xx:3000 ,輸入使用者名稱,密碼登入系統。使用者名稱與密碼都是"admin",如果能開啟頁面則已經成功了!但是...裝環境這東西怎麼可能這麼簡單??

4、當你檢視狀態是active但是訪問3000時是失敗的話,辣麼有可能就是你的3000埠還未開放!

跟著這篇文章來操作就可以開放3000埠啦:https://www.cnblogs.com/poloyy/p/12213297.html

5.訪問IP加埠 http://xxx.xx.xx.xx:3000 ,若能訪問到grafana就是成功啦!

 

配置Jmeter

這裡就不教如何安裝Jmeter了哈,主要講Jmeter作為採集端是通過什麼採集資料的

步驟一:線上程組中,新增監聽器(Listener)- Backend Listener

 

步驟二:配置Backend Listener

可以看到,Jmeter預設選中的Implementatin是 GraphiteBackendListenerClient ,它是Jmeter 2.13就開始提供了;在Jmeter 3.2時又加多了一個 InfluxDBBackendListenerClient  ,哎~這兩者有什麼區別呢?後面會講到!

這裡先講選中 GraphiteBackendListenerClient 時,每個配置項的含義

  • graphiteHost:InfluxDB安裝的伺服器的ip
  • graphitePort:埠;預設就是2003,除非你自己安裝InfluxDB時設定了其他埠是哦(可見上面安裝InfluxDB後關於graphite的配置)
  • rootMetricsPrefix:指標的根字首;將測試結果存入資料庫時,不同指標會生成不同表,但這些表都最好要有一個共同的字首,這個就是了;後面會講到不同的指標的含義(重點哦)
  • summaryOnly:當你執行緒組有多個請求又想知道每個請求的結果資料時,最好填false,因為true只會返回所有請求的集合資料報告,不會輸出每條請求的資料報告
  • samplersList:取樣器列表;想收集哪些請求就填哪些,最好用正則去匹配,減輕工作量
  • useRegexpForSamplersList:是否使用正則;如果true則使用,samplersList裡可以匹配正則表示式
  • percentiles:百分比;即類似聚合報告裡90% Line,95% Line,99% Line的資料;倘若想要99.9時,需要寫成【99_9】,用下劃線代替點

建議:如果想看每個請求的結果資料的話,根據我的截圖進行配置即可;只需改動samplerList來匹配你需要監控的請求,其他不用動!

 

步驟三:執行Jmeter指令碼,檢視資料庫

一開始,我的資料庫是隻有兩張表的,這裡方便演示,就只跑get、post請求了

 

如果成功了代表結果資料也存進InfluxDB裡面了,接下來我們來看看使用  GraphiteBackendListenerClient 時會生成哪些表呢? 

可以看到生成了三種字首的表,分別是: jmeter.all 、 jmeter.get 、 jmeter.post ;最後其實還有 jmeter.test 開頭的表,這個後面會單獨拿出來說

 

============================================

=== 倘若不想了解每個指標的具體含義,可以跳過下面內容

=== 直接點選右側目錄,跳轉至配置Grafana,檢視下一步

============================================

 

步驟四:細品指標含義

為什麼每個表都有jmeter字首呢?

因為在Jmeter的Backend Listener配置了rootMetricsPrefix 值為 jmeter. ,你不喜歡字首或者想起其他名,在Backend Listener裡直接改 rootMetricsPrefix 的值就可以了

可以參考下官方文件的寫法: <rootMetricsPrefix><samplerName>.ok.count ,rootMetricsPrefix和samplerName都是變數,可配置的

 

接下來,我們來說明下每個字首的含義

 jmeter.all :代表了所有請求;當summaryOnly=true時,就只有samplerName=all的表了

 jmeter.get :代表了HTTP請求的名字是get,即samplerName=get

 jmeter.post :代表了HTTP請求的名字是post,即samplerName=post

備註:假設你的某個HTTP請求叫【GET請求啊】,辣麼你的資料庫就會生成以jmeter.GET請求啊 為字首的各種表

 

然後再針對不同指標說下它們的含義

劃重點:這裡的指標含義都是直接翻譯Jmeter官方文件的

喜歡英文的小夥伴可以自行檢視:http://jmeter.apache.org/usermanual/realtime-results.html

 

Thread/Virtual Users metrics - 執行緒/虛擬使用者指標,跟執行緒組設定相關的

指標 全稱 含義
<rootMetricsPrefix>test.minAT Min active threads 最小活躍執行緒數
<rootMetricsPrefix>test.maxAT Max active threads 最大活躍執行緒數
<rootMetricsPrefix>test.meanAT Mean active threads 平均活躍執行緒數
<rootMetricsPrefix>test.startedT Started threads 啟動執行緒數
<rootMetricsPrefix>test.endedT Finished threads 結束執行緒數

Response times metrics - 響應時間指標

劃重點:每個sampler都包含了所有響應時間指標,每個sampler的每個指標都會有單獨的一個表儲存結果資料

指標 含義
<rootMetricsPrefix><samplerName>.ok.count sampler的成功響應數
<rootMetricsPrefix><samplerName>.h.count 伺服器每秒命中次數(每秒點選數,即TPS)
<rootMetricsPrefix><samplerName>.ok.min sampler響應成功的最短響應時間
<rootMetricsPrefix><samplerName>.ok.max sampler響應成功的最長響應時間
<rootMetricsPrefix><samplerName>.ok.avg sampler響應成功的平均響應時間
<rootMetricsPrefix><samplerName>.ok.pct<percentileValue> sampler響應成功的所佔百分比
<rootMetricsPrefix><samplerName>.ko.count sampler的失敗響應數
<rootMetricsPrefix><samplerName>.ko.min sampler響應失敗的最短響應時間
<rootMetricsPrefix><samplerName>.ko.max sampler響應失敗的最長響應時間
<rootMetricsPrefix><samplerName>.ko.avg sampler響應失敗的平均響應時間
<rootMetricsPrefix><samplerName>.ko.pct<percentileValue> sampler響應失敗的所佔百分比
<rootMetricsPrefix><samplerName>.a.count sampler響應數(ok.count+ko.count)
<rootMetricsPrefix><samplerName>.sb.bytes 已傳送位元組
<rootMetricsPrefix><samplerName>.rb.bytes 已接收位元組
<rootMetricsPrefix><samplerName>.a.min

sampler響應的最短響應時間

(ok.count和ko.count的最小值)

<rootMetricsPrefix><samplerName>.a.max  

sampler響應的最長響應時間

(ok.count和ko.count的最大值)

<rootMetricsPrefix><samplerName>.a.avg  

sampler響應的平均響應時間

(ok.count和ko.count的平均值)

<rootMetricsPrefix><samplerName>.a.pct<percentileValue>

sampler響應的百分比

(根據成功和失敗的總數來計算)

不知道大家是否有個疑問,為何 a.min 、 a.max 、 a.avg 明明說的都是平均響應時間,但是括號裡備註的又是和響應數相關的;但是Jmeter官方文件說明翻譯過來的確是這樣的..只能等我來尋找答案了!

經過我的“縝密”對比,可以發現官網說明的確是錯的哈,真實情況如下!

a.min :是ok.min和ko.min的最小值

a.max :是ok.max和ko.max的最小值

a.avg :是ok.avg和ko.avg的平均值

接下來就是用資料說明事實!按照上面的指標順序來看圖哈!

 

不過,博主並不確定這樣比對是否完全科學正確,但是從博主驗證結果來說,我的糾正是正確滴!

附上按官方文件說明翻譯過來的對比圖,可以看到如果是 a.max 的話,跟 ok.count 和 ko.count 是沒有半毛錢關係的

 

 

配置Grafana

首先進入Grafana的首頁,可以看到官方畫了個流程:先建立資料來源,再建立資料面板

 

建立資料來源

一共有兩個入口哈,可以在首頁直接點選  Create your first data source ,也可以看第二張圖按步驟進入建立頁面

 

然後,選擇InfluxDB作為我們的資料來源

到此為止,資料來源就配置成功啦!!

 

配置資料看板

 

Grafana&InfluxDB整合,展示測試結果資料

panel基礎使用

按上面的步驟建立好DashBoard後,再通過panel展示具體資料,先介紹下panel的入口

一般選 Add Query 先,當然選 Choose Visualization 也可以,進去後可以相互切換的

 

Convert to row 就是生成一行,可以將展示差不多一致型別資料的panel放到裡面,統一管理,收起or展開;

如下圖,我將描述執行緒數和響應數的panel放在同一個Row了

 

資料繫結

檢視匯流排程數、成功響應數、失敗響應數

可以先點Add Query,進入到下面的介面

若想看成功響應數和失敗響應數,只需要切換表名即可;

可以發現跟我一開始只展示數字不太一樣,因為圖表型別還沒設定;當我們只想看資料而不想看資料趨勢圖的話,可以改變它的型別;

在同一個介面,點選左側列表選中第二個icon,然後選擇Singlestat即可

 

檢視所有請求、get請求、post請求的TPS

如果想在同一個panel裡展示多個指標資料的話,可以通過在Panel裡Add Query

基本的資料繫結已經教會大家啦,自己想要展示什麼資料直接改變表名就行了

 

順帶附上官方提供的一個數據看板圖,大家也可以照搬照抄用它的panel,手動新增每個指標

 

至此,初級版的Grafana+Jmeter+Influxdb 效能實時監控平臺初步搭好啦!

當然博主是不建議Jmeter使用 GraphiteBackendListenerClient 來採集資料的,因為請求多起來的時候會有非常多的表,維護成本也會增加;後面將會介紹如何通過 InfluxDBBackendListenerClient  來採集資料

 

配置Backend Listener之InfluxDBBackendListenerClient

配置項含義

首先來看看每個配置項的含義

  1. influxdbUrl:安裝influxdb的路徑;主要格式:http://主機地址:8086/write?db=資料庫名
  2. application:應用名稱;在 events 表中對應的欄位是 application 
  3. measurement:表名;資料儲存到哪個表,預設是jmeter,不用改即可
  4. summaryOnly:同GraphiteBackendListenerClient 
  5. samplersRegex:同GraphiteBackendListenerClient 
  6. percentiles:同GraphiteBackendListenerClient 
  7. testTitle:測試名稱;在 events 表中對應的欄位是 text ,JMeter在測試的開始和結束時自動生成註釋,該註釋的值以'start'和'end'結尾
  8. eventTags:Grafana允許為每個註釋顯示標籤;在 events 表中對應的欄位是 tags 

不懂application和testTitle的小夥伴可以看看下面的圖,可以看到同一個testTitle的兩條記錄的時間差就是執行測試計劃的總時長

 

建議:只需修改application和testTitle即可,可以相同也可以不相同,其他配置跟著圖片走就好了;當然安裝路徑還是要改的哈

 

檢視InfluxDB

使用InfluxDBBackendListenerClient好處就是,再多的請求也只會生成兩張表:

 

events :主要拿存事件的

jmeter :存測試結果資料的,Grafana也是從這個表獲取資料再展示

 

再次Grafana&InfluxDB整合,展示測試結果資料

這次就不再需要自己去建立DashBoard和Panel了,因為在官方模板庫,已經有一個非常完美的模板了,當然前提是你要用 InfluxDBBackendListenerClient 採集資料才能有效的哈

首先,進入官方模板庫: https://grafana.com/dashboards ,然後跟著圖片匯入模板並初始化即可

 

 

只要你的資料來源,表名配的沒有錯,Jmeter再執行一下測試計劃,DashBoard中篩選下時間,就可以成功看到資料啦!

模板自帶了三個下拉篩選框

data_source:資料來源,在Grafana配置了多少個就顯示多少個

application:在Jmeter配置好的application,如果每次測試計劃執行時的application都不一樣,你就可以通過這個篩選出對應測試時機的結果資料了

transaction:在Jmeter配置好的sampleList,譬如我只發了get、post請求,這裡就只會給你選get、post;可以滑到頁面下面看到針對某個請求的資料展示

 

其實這個模板還有很多可以值得改進優化的地方,辣麼這個時候就需要你對Grafana的各種用法熟悉操作啦,後續會補充一篇關於Grafana常見用法&高階用法的文章哦!敬請期待!