JMeter - 實時結果 - InfluxDB和Grafana - 第1部分 - 基本設置

概述:

在本文中,我將解釋如何使用JMeter + InfluxDB + Grafana得到實時性能測試結果。sql

請注意,此主題太大,沒法涵蓋一篇文章中的全部內容。因此,我試圖提供與TestAutomationGuru的其餘文章的連接,這些文章可能與本文有關。請儘量檢查一切。shell

問題陳述:

多年前,當我之前運行JMeter測試時,我沒法理解測試執行期間應用程序的性能。我老是不得不等待測試完成。這有點煩人 - 特別是在長時間運行的測試中。有時,我可能不得不連續2/3天進行浸泡測試。數據庫

在某些時候,JMeter 在非GUI模式下啓用了2.11版本彙總器輸出。運行JMeter測試時,您能夠看到如下輸出。apache

06_summariser

它有點幫助,上面的摘要提供了測試運行時須要的大量信息。它顯示每30秒的  最小最大平均響應時間,吞吐量錯誤計數活動用戶(能夠在jmeter.properties中更改摘要間隔後端

可是當測試運行幾個小時而且每30秒在控制檯中有大量的彙總器輸出時,可能有點難以理解結果。例如,若是我想知道速率降低的活動用戶數,我須要很是仔細地逐行檢查彙總器輸出!我沒法與開發團隊/應用程序架構師分享結果,由於結果不是很是用戶友好的格式。要建立一個漂亮的圖形,我須要等待JMeter測試完成。瀏覽器

所以,我沒有在控制檯中編寫這個摘要輸出,而是修改了JMeter的摘要類以將結果發送到數據庫 - 這樣我就能夠經過查詢數據庫來建立一個漂亮的圖表。對咱們的團隊來講,實時分析性能測試結果很是有幫助。JMeter還在2.13版本中添加了一個單獨的監聽器,它將數據發送到數據庫,這能夠幫助咱們得到實時結果。bash

我將介紹JMeter的方法和個人方法。你能夠遵循其中任何一個。不是都!!服務器

解決方案1:

後端監聽器 - JMeter實現:

JMeter v2.13引入了一個新的監聽器,用於在測試運行時將結果發送到時間序列數據庫(Influxdb / graphite)。經過配置Grafana(一個開源指標儀表板)鏈接到Influxdb / graphite,咱們能夠建立漂亮的圖形,這將幫助咱們在JMeter運行測試時得到實時指標!架構

積分

時間序列數據庫:時間序列是隨時間變化採集的數據序列。時序數據庫是處理時間序列數據的軟件應用程序。想象它就像一個sql表,其中時間是主鍵!app

咱們將在本文中使用InfluxDB  做爲咱們的數據庫。點擊此處 瞭解更多信息。

您可能想知道的術語不多:

  • 測量   - >這至關於RDBMS表
  • 系列                   - >每一項測量記錄。它就像桌子的行。
  • 標籤                      - >表的可選列。它是索引列,能夠加快搜索速度。
    • 標記鍵     - >索引列的名稱
    • 標記值 - >索引值
  • 字段                    - >這是存儲您要測量的實際數據的列。就像頁面的響應時間同樣。

 

JMeter&InfluxDB集成:

InfluxDB設置:

  • 下載InfluxDB
  • 檢查此連接是否爲InfluxDB設置。 [注意:在撰寫本文時,v1.3是最新的涌入版本。若是此連接不起做用,請檢查Influxdb網站以獲取更多信息。]
  • 找到Influxdb的配置文件
    • 在這裏:/opt/influxdb/shared/config.toml
    • 或者在這裏:  /usr/local/etc/influxdb.conf
  • 若是您沒法找到配置文件,可使Influxdb顯示默認配置。執行如下命令。
influxd config
  • 該命令將顯示全部默認值。複製值並本身建立配置文件。
  • JMeter使用石墨協議將值寫入InfluxDB所以,在InfluxDB配置文件中找到graphite協議部分並啓用它,以下所示。
[[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服務器以使更改生效。   
influxd -config /path/to/config/file
  • 檢查InfluxDB日誌是否有任何錯誤。此時,InfluxDB應該正常運行。

一旦InfluxDB  啓動並運行,下一步就是建立一個JMeter測試,將測試數據發送到InfluxDB。

JMeter設置:

  • 確保您具備Java 8或更高版本。
  • 下載JMeter  3.3或更高版本
  • 啓動JMeter。建立一個簡單的測試。
  • 添加後端偵聽器

JM-測試01

  • 更新InfluxDB  服務器IP,端口詳細信息如上所示
  • 運行測試。等幾秒鐘
  • 檢查JMeter日誌是否存在與向InfluxDB發送數據相關的任何鏈接錯誤。你不該該看到任何錯誤!若是有,請在此處查看故障排除步驟。而後回來繼續從這裏開始!

InfluxDB - Shell命令:

  • 在運行InfluxDB的機器中執行如下命令。
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
  • 執行如下命令以查看數據庫列表。
SHOW DATABASES name: databases name ---- _internal jmeter
  • 執行如下命令以使用JMeter DB。
USE jmeter Using database jmeter
  • 執行如下命令以查看JMeter DB下的表或測量列表。
show measurements name: measurements name ---- jmeter.all.ok.count jmeter.all.h.count jmeter.all.ok.min jmeter.all.ok.max jmeter.all.ok.avg ...........
  • 此時,您會看到InfluxDB中建立了一堆測量值JMeter  在' jmeter '數據庫中建立了這些  測量

但願您可以將測試結果成功發送到InfluxDB恭喜。如今是咱們設置Grafana服務器從測試結果建立圖表的時候了。

Grafana-InfluxDB集成:

  • 下載Grafana
  • 啓動Grafana服務器。(在個人窗口中,我有這裏exe - > GRAFANA_HOME / bin / grafana-server.exe)
  • 使用此URL http:// localhost:3000啓動瀏覽器  以訪問Grafana主頁。
  • 更新Grafana數據源以指向InfluxDB實例。

grafana數據源

 

  • 單擊Test鏈接以確保Grafana能夠鏈接到InfluxDB
  • 建立一個新的儀表板。

JM-測試02

  • 讓咱們添加一個Graph面板

JM-測試03

  • 添加後,單擊面板標題進行編輯並添加查詢以顯示您感興趣的指標。選中此視頻以建立最小值指標的圖表。
視頻播放器
 
 
 

 

但願你如今有了這個主意!你能夠從這裏開始建立不一樣的指標!

我爲個人應用程序建立了不錯的儀表板。您能夠繼續閱讀本文,下載並使用它們!

JMeter的後端監聽器出現問題: 

JMeter的Backend Listener真正幫助咱們得到實時性能測試結果。然而,它創造了大量的測量。'min','max'值可能與您的彙總報告一致。可是你不能期望百分位數,吞吐量,平均值與你的彙總報告相匹配!! 由於此偵聽器會爲每一個給定的間隔(例如每1秒)計算這些值。隨着時間的推移,你基本上能夠得到吞吐量。不是整個測試期間。因此,它不匹配。

個人自定義方法幫助我按照我想要的方式得到結果。

 

解決方案2:

ustom Listener [TestAutomationGuru Implemenation]:

因爲上面提到的JMeter後端監聽器的限制而且爲了實現個人目標,我只想用我本身的實現 - 經過更新具備摘要的Apache核心庫(它負責編寫上面提到的聚合信息)在控制檯中) - 因此只要它在控制檯中寫入信息,它也能夠更新InfluxDB中的數據。沒有爲此目的建立單獨的監聽器彷佛對我來講沒問題,由於在測試中添加更多的監聽器將消耗內存並可能影響個人測試。性能方面 - 這種方法比添加新的後端監聽器表現更好,由於我沒必要爲計算添加任何額外的邏輯。

InfluxDB設置:

  • 在InfluxDB配置文件中啓用HTTP API,以便在InfluxDB中寫入結果。重啓InfluxDB。
[http]
 # Determines whether HTTP endpoint is enabled.  enabled = true  # The bind address used by the HTTP service.  bind-address = ":8086" 

InfluxDB - Shell命令:

  • 在運行InfluxDB的機器中執行如下命令。
influx Connected to http://localhost:8086 version 1.3.6 InfluxDB shell version: 1.3.6
  • 執行如下命令建立一個新的DB - jmeter(若是它尚未)
CREATE DATABASE jmeter

JMeter設置:

  • 您不須要爲測試添加任何監聽器!
  • 下載修改後的Apache JMeter核心庫 - 替換lib / ext  文件夾中的現有核心庫  最好在更換以前備份舊的備份。您應該使用JMeter版本3.3
 TAG-Influx-Grafana.zip(2991次下載) 
  • 它將在下面的屬性。使用命令行/ ant等更新user.properties文件/將下面的屬性傳遞給測試。
# True to send data to influx db summariser.influx.out.enabled=true # True to send write the info it sends to influx db - enable only for debugging purpose # summariser.influx.out.enabled=false # Influx host, port, db details details summariser.influx.url=http://localhost:8086/write?db=jmeter # use below format if there is any username & password for influxdb # http://localhost:8086/write?db=jmeter&u=myusername&p=mypassword # Name of your application - Useful for querying the results when you use this framework for multiple applications # Do not add any space or dot or any other special chars summariser.influx.application=myApp # Perofrmance test strategy - Useful for querying the results when you use this framework for multiple strategies # Do not add any space or dot or any other special chars summariser.influx.application.suite=stress-test # timeouts summariser.influx.connection.timeout=5000 summariser.influx.socket.timeout=5000 summariser.influx.request.timeout=5000
  • 在NON-GUI模式下運行任何JMeter測試,啓用摘要生成器。它應該將數據發送到InfluxDB。

InfluxDB - Shell命令:

  • 執行如下命令以查看數據庫列表。
SHOW DATABASES name: databases name ---- _internal jmeter
  • 執行如下命令以使用JMeter DB。
USE jmeter Using database jmeter
  • 執行如下命令以查看JMeter DB下的表或測量列表。
show measurements name: measurements name ---- delta samples total

 

注意:

  • 若是您使用testautomationguru的修改過的apache_core jar,那麼您不須要' Backend Listener '。jar自己將負責發送結果。
  • 若是apache核心庫在超時內沒法訪問InfluxDB - 它將永遠不會重試  發佈測試數據。這是按照個人設計!服務器可能已關閉或多是防火牆問題。我不想繼續嘗試,由於它可能會影響測試性能。確保它能夠訪問。
  • 此插件旨在僅在非GUI模式測試中發佈數據毫不推薦在GUI模式下運行測試!
若是您仍然面臨將數據發送到InfluxDB的問題 - 請檢查此帖子以進行故障排除。

 

Grafana儀表板:

下載的zip文件還應包含Grafana儀表板(採用JSON格式)。在Grafana中導入這些儀表板文件(您能夠在Home下找到導入功能,以下所示) - 請在導入這些儀表板以前安裝Grafana餅圖插件 - 請在此處查看

進口儀表板-1001

成功導入後,它將建立儀表板,以下所示。它未來自增量測量的數據顯示爲適當的度量標準。(確保您的Grafana正確設置了數據源。它應該指向咱們發佈數據的InfluxDB實例)。

聚合儀表板:

我-grafana的儀表板

樣品儀表板:

此儀表板將從Samples測量中檢索數據。您能夠根據特定頁面,狀態等進一步過濾。有時,當請求失敗時(好比某些auth錯誤),響應時間可能會很是短 - 所以吞吐量會很大。這個不對。這就是爲何我有狀態過濾器來得到成功的吞吐量。

經過調整'Summarize'下拉菜單,讓grafana計算不一樣時間間隔的吞吐量。

標籤採樣的儀表板-1001

摘要:

使用JMeter的後端監聽器/自定義監聽器+ InfluxDB + Grafana - 咱們能夠建立使人驚歎的圖表,它們將爲咱們提供JMeter正在運行的測試的實時指標。若是您有長時間運行的測試,則無需等待測試完成以訪問結果。只需分享Grafana儀表板URL - 這樣任何有連接的人均可以看到正在發生的事情!

請查看如下與此相關的文章。

 


有問題嗎?

注意:   確保Influx服務器的系統時間與運行JMeter的計算機同步。這是很是重要的。由於當您查詢Influxdb時 - 默認狀況下它會顯示時間爲<=系統時間的記錄。若是JMeter機器的時間是,好比說下午4:50。InfluxDB服務器系統時間是下午4:45。當您運行JMeter測試時,它將可以將記錄發佈到InfluxDB。可是,當您查詢Influxdb時,它不會顯示這些記錄。您須要等待5分鐘才能看到插入的記錄。 

即便遵循了全部步驟,它也沒法按預期工做?沒問題; 點擊此處查看排除故障的步驟。

相關文章
相關標籤/搜索