效能測試監控工具--Jmeter + Grafana + InfluxDB

優雅的測試媛發表於2021-01-07

JMeter執行完壓測指令碼後,會自動生成html格式的測試報告,之前我也是一直用這種形式看報告。看到InfluxDB + Grafana展示的測試報告後,忍不住想嘗試下。

而且用JMeter自帶的報告,有時會生成報告失敗,需要再重跑壓測指令碼,而且生成的html報告也會佔用較多時間,使用Grafana+InfluxDB避免了這個問題。

先上個報告模板對比圖:

JMeter自動生成的HTML報告 :


Grafana儀表盤展示的測試報告:

Grafana的報告是不是很炫酷?那就開始搞起!

先大概梳理下報告展示原理:見下圖,JMeter本身有個監聽器叫“Backend Listener”,這個監聽器可以將jmeter統計的TPS、響應時間、錯誤率等資料非同步傳送到InfluxDB資料庫中;而Grafana是一個視覺化展示工具,可以從InfluxDB中獲取資料進行展示。

接下來就是安裝InfluxDB和Grafana,前提條件:InfluxDB和Grafana部署的伺服器網路要通, JMeter部署到的機器和InfuxDB伺服器網路要通。

我是將InfuxDB、Grafana部署在了同一臺Linux伺服器上,JMeter安裝在Windows機上。

1)安裝InfluxDB

InfluxDB官網有詳細的安裝文件,根據伺服器的系統選擇對應的安裝方式,我的伺服器是CentOS,所以進行如下安裝。

Tips:最新的2.0版本更新了資料互動方式,我選擇了1.8版本。

先將InfluxDB版本匯入到yum manager中,然後用yum install直接安裝,啟動服務即可。

cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo
[influxdb]
name = InfluxDB Repository - RHEL \$releasever
baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key
EOF
sudo yum install influxdb
sudo service influxdb start

InfluxDB可以通過http協議方式和JMeter、Grafana通訊,預設的埠號8086,如果想修改埠號和其它配置,可修改其配置檔案,配置檔案:/etc/influxdb/influxdb.conf。

網上也有一些說是可以修改一些配置在web端訪問InfluxDB,不過我試了下高版本的沒辦法通過web訪問。

InfluxDB部署的伺服器IP:XXX.XXX.XX.XX,後面會用到。

服務啟動成功後,可以使用了。直接輸入influx,進入到資料庫中,可以檢視下當前有哪些庫和表。

預設是隻顯示一個_internal,我們可以新建一個database,比如jmeter。

create database jmeter
show databases

ok,那這個jmeter資料庫就可以作為jmeter監控指標輸出庫,先記下,後面會用到。

InfluxDB官網安裝文件: https://docs.influxdata.com/influxdb/v1.8/introduction/install/

2)部署Grafana

Grafana的安裝比較簡單了,去官網選擇對應伺服器系統的安裝方式,還是CentOS,服務和InfluxDB為同一臺。

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

安裝成功後,啟動Grafana。

sudo service grafana-server start

Grafana預設的http埠號是3000,由於之前我在這臺伺服器部署了別的服務,佔用了3000。 所以修改Grafana的配置檔案,將埠號修改為3001,儲存後,就可以通過瀏覽器訪問Grafana啦。

訪問 http://XXX.XXX.XX.XX:3001,如果出現登入頁面就說明部署沒問題啦。 預設賬號密碼都是admin,可以修改。

Grafana官網:https://grafana.com/grafana/download?platform=linux

3)配置Grafana

開篇說了展示邏輯,Grafana需要從InfluxDB取資料展示,所以我們先來配置資料庫。登入進去後,點選“Configuration→Data Source”,新增剛才建立的jmeter資料庫。

新增資料庫型別選擇“InfluxDB”,"URL"填寫InfluxDB所在的伺服器連線地址,上面已經說了部署在了XXX.XXX.XX.XX這臺伺服器,InfluxDB預設http通訊埠為8086,所以URL配置為:http://XXX.XXX.XX.XX:8086
當然,因為我們的Grafana和InfluxDB部署在同一臺伺服器,也可以配置為:http://localhost:8086

點選“Save&Test”,如果提示“Data source is working”,說明配置資料庫成功。

接下來還需要新增一個Dashboard,用來展示JMeter的測試報告。點選“Dashboards → Manager”,這裡可以使用官方提供模板,匯入ID為5496的模板,



點選“load”後,會自動獲取模板名稱,DBname我們選擇InfluxDB,measurement name輸入jmeter,就是剛才我們建立的資料庫。

因為我已經新增過這個dashboard,所有會提示是不是要覆蓋,如果你是第一次新增,不會出現下圖的紅色文字。

最後點選下方的“load”後,就成功新增dashboard了,這時候就可以展示出來了,只是此時jmeter資料庫中還沒有資料。

4)配置JMeter,在Grafana中展示測試報告

一開始說了JMeter自帶的Backend Listener可以將資料傳送到InfluxDB,所以我們在Jmeter的壓測指令碼中,新增這個監聽器,並且配置對應引數就可以了。

influxurl:就是InfluxDB的通訊地址,還記得上面的配置嗎?IP是XXX.XXX.XX.XX,它的http預設通訊埠為8086,我們建立的資料庫名稱為jmeter,所以配置為 http://XXX.XXX.XX.XX:8086/write?db=jmeter

application:我理解的這個是用來標識不同的job的,在Grafana選擇展示的儀表盤時會用到。

measurement:是InfluxDB的語法,代表資料庫表的意思。我們建立的是jmeter。

Summaryonly:我選擇了false,這樣在Grafana裡不僅會展示這個測試計劃的概括報告,還會展示每個事務的TPS,響應時間和錯誤率資訊。

至此,Backend Listener就配置好了。

我們把指令碼除錯通,配置上執行緒數(壓測量),執行指令碼。壓測時一般不在GUI 模式下,我們可以使用命令列執行 jmeter -n -l [壓測指令碼路徑]。執行完畢後,我們可以先去伺服器上查詢下jmeter資料庫表中的資料。

#influx
> use jmeter
> select * from jmeter

如果是加了n個執行緒組,那麼資料庫表中就會有n條資料。這說明JMeter通過監聽器已經將資料傳送到了InfluxDB中了,接下來我們在Grafana中我們新增的Dashboard中檢視測試結果啦。

這裡可以看到我們想要的效能引數,TPS,響應時間、錯誤率等。我們也可以點選“share”將報告儲存下來,儲存的是個連結地址。下次檢視可直接訪問該連結。


application為test01,就是剛才在JMeter中配置的。如果有多個測試計劃,可以用不同的application標誌。

可以點選每項,放大顯示。

執行完壓測指令碼後,Grafana裡不會立刻展示測試報告,需要等幾分鐘,然後我們可以重新整理檢視。

效能測試過程中,我們需要不斷的加執行緒數來找到系統的最大併發量,每設定一次執行緒組執行一次,會往InfluxDB寫入資料,而Grafana會展示該measurement裡所有的資料。

所以,我覺得可以先建立多個measurement,不同的測試計劃寫入到不同的表中,在Grafana中建立多個dashboard選擇不同的measurement展示測試報告。

相關文章