重新定義 Locust 的測試報告_效能監控平臺
這是三篇有關Locust文章的最後一篇,前兩篇請看:
深入淺出 Locust 實現
如何提高 Locust 的壓測效能
背景
當我們使用Locust做效能壓測的時候,壓測的過程和展示如下:
其中波動圖是非持久化儲存的,也就是重新整理後,波動圖就清空了。儘管Statistics中顯示的資訊比較完整,但是都是瞬時值,並不能體現出時序上的變化。像Failures、Exceptions、Slaves分在不同的tag檢視起來也比較麻煩。Locust的測試報告也只有簡單的csv檔案,需要下載。
從上面我們可以看到Locust雖然提供了跨平臺的web模式的效能監控和展示,但是有以下明顯缺陷:
- rps、平均響應時間波動圖沒有持久化儲存,重新整理後便丟失
- 整體統計資訊只是表格的形式,不能體現波動時序
- 測試報告過於簡陋且只有文字版,只能下載存檔
方案
方案其實很多,但為了減少投入成本和最大化利用現用的開源工具,選擇以下方案:
Locust + Prometheus + Grafana
簡單總結起來就是:
實現一個Locust的prometheus的exporter,將資料匯入prometheus,然後使用grafana進行資料展示。
不難發現Jmeter在網上有許多類似方案的介紹,但很遺憾的是我沒有找到很好實現Locust監控平臺的方案。
搜尋了一圈後發現boomer專案下有一個年久失修的exporter實現——prometheus_exporter.py, 而且作者並沒有提供grafana之類的Dashboard設定,因此決定基於他的基礎上,繼續完成整個流程,我將在下面講述。
Docker環境
Docker環境不是必須的,但是用過都說好。我們這次實戰是在docker中完成的,因為它實在是太方便了,如果你也想快速嘗試一下本文的監控平臺方案,建議先準備好docker環境。
編寫exporter
如Locust的官方文件所介紹的 Extending Locust 我們可以擴充套件web端的介面,比如新增一個 /export/prometheus 介面,這樣Prometheus根據配置定時來拉取Metric資訊就可以為Grafana所用了。這裡需要使用Prometheus官方提供的client庫,prometheus_client,來生成符合Prometheus規範的metrics資訊。
在boomer原檔案的基礎上我做了一些修改和優化,在Readme中新增了Exporter的說明,並提交Pull Request。由於篇幅原因這裡不展示程式碼了,完整程式碼(基於Locust 1.x版本)可以檢視這裡prometheus_exporter
為了方便演示,下面編寫一個基於Python的locustfile作為施壓端,命名為demo.py:
#!/usr/bin/env python
# coding: utf-8
"""
Created by bugVanisher on 2020-03-21
"""
from locust import HttpLocust, TaskSet, task, between
class NoSlowQTaskSet(TaskSet):
def on_start(self):
# 登入
data = {"username": "admin", "password": "admin"}
self.client.post("/user/login", json=data)
@task(50)
def getTables(self):
r = self.client.get("/newsql/api/getTablesByAppId?appId=1")
@task(50)
def get_apps(self):
r = self.client.get("/user/api/getApps")
class MyLocust(HttpUser):
task_set = NoSlowQTaskSet
host = "http://localhost:9528"
我們把master跑起來,啟動兩個worker。
# 啟動master
locust --master -f prometheus_exporter.py
# 啟動worker
locust --slave -f demo.py
在沒有啟動壓測前,我們瀏覽器訪問一下
http://127.0.0.1:8089/export/prometheus
返回結果如下:
這是使用prometheus_client庫預設產生的資訊,對我們資料採集沒有影響,如果想關注master程式可以在grafana上建立相應的監控大盤。
接著我們啟動10個併發使用者開始壓測,繼續訪問下上面的地址:
可以看到,locust_stats_avg_content_length、locust_stats_current_rps等資訊都採集到了。
Prometheus部署
exporter已經ready了,接下來就是把prometheus部署起來,拉取metric資料了。
1) 準備好了docker環境,我們直接把prometheus映象拉下來:
docker pull prom/prometheus
2) 接下來我們建立一個yml配置檔案,準備覆蓋到容器中的/etc/prometheus/prometheus.yml
global:
scrape_interval: 10s
evaluation_interval: 10s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: locust
metrics_path: '/export/prometheus'
static_configs:
- targets: ['192.168.1.2:8089'] # 地址修改為實際地址
labels:
instance: locust
3) 啟動prometheus,將9090埠對映出來,執行命令如下:
docker run -itd -p 9090:9090 -v ~/opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
接下來我們訪問Prometheus的graph頁面,查詢下是否有資料了。
http://127.0.0.1:9090/graph
Grafana部署和配置
1)首先我們需要下載grafana的映象:
docker pull grafana/grafana
2) 啟動一個grafana容器,將3000埠對映出來:
docker run -d -p 3000:3000 grafana/grafana
3)網頁端訪問localhost:3000驗證部署成功
4) 選擇新增prometheus資料來源
5) 匯入模板
匯入模板有幾種方式,選擇一種方式將dashboard模板匯入。
效果展示
經過一系列『折騰』之後,是時候看看效果了。使用 Docker + Locust + Prometheus + Grafana 到底可以搭建怎樣的效能監控平臺呢?相比 Locust 自帶的Web UI,這樣搭建的效能監控平臺究竟有什麼優勢呢?接下來就是展示成果的時候啦!
這個監控方案不僅提供了炫酷好看的圖表,還能持久化儲存所有壓測資料,可以使用Share Dashboard功能儲存測試結果並分享,相比Locust自帶的Web UI,簡直太方便!如果結合boomer,壓測效能和壓測報告應該也能讓老闆滿意了!
寫在最後
關於Locust的三篇系列文章,我結合自己的認知和實踐終於寫完了,對Locust的玩法也只是拋磚引玉,但我覺得也足夠了,因為有些人已經通過我的分享做了一些東西,比如這篇文章。
以前我不習慣分享交流,喜歡閉門造車,但是從去年開始,我逼著自己去寫GitHub Pages部落格—— bugvanisher,逼著自己除了輸入還要輸出,去總結,去分享,我明白這才是能夠更快成長的方式,共勉~
相關文章
- locust+influxdb+grafana 實現自定義測試報告UXGrafana測試報告
- 效能測試工具Locust
- 對於k8s微服務的效能測試監控平臺搭建K8S微服務
- Locust效能測試實踐
- 效能測試之Docker監控Docker
- allure 測試報告怎麼嵌入到測試平臺?測試報告
- 效能測試之JVM的監控GrafanaJVMGrafana
- drbd的效能測試報告測試報告
- 聊聊效能測試平臺
- redis效能測試報告Redis測試報告
- 新潮測試平臺之效能測試
- 分享Mysql效能監控實踐報告的ppt~~~MySql
- 軟體效能測試報告應該包含的內容,效能測試報告需要多少錢?測試報告
- [效能測試] locust學習-基礎篇
- 效能測試工具Locust使用指南(二)
- 我有個想法使用 locust 作為壓測核心, 寫一個服務端效能測試平臺,服務端
- 效能測試監控工具--Jmeter + Grafana + InfluxDBJMeterGrafanaUX
- 購物平臺效能測試模版
- 效能測試報告編寫技巧測試報告
- zabbix監控平臺
- 效能測試: 編寫一個 Locust 檔案
- 軟體效能測試報告怎麼編寫?哪些機構可以出具效能測試報告測試報告
- 雲上的移動效能測試平臺
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- Zabbix監控平臺的搭建
- Mono 3.2.3 TCP吞吐效能測試報告MonoTCP測試報告
- Locust效能測試工具核心技術@task和@events
- [原創]效能監控之大型日誌分析和監控系統,助力提升效能測試的有效手段
- ApiTestEngine 整合 Locust 實現更好的效能測試體驗API
- 軟體效能測試有哪些測試指標?效能測試報告怎麼編寫?指標測試報告
- 效能測試之資料庫監控分析工具PMM資料庫
- 搭建 nGrinder 效能測試平臺並快速使用
- MTK平臺安卓手機效能測試方法安卓
- Python技術棧效能測試工具Locust入門Python
- Locust1.4.3版本效能測試工具案例分享
- Locust效能測試設定持續時間(web-UI)WebUI
- 重點高耗能企業能源管控平臺搭建,線上監測系統開發
- 「內測來襲」 一鍵搭建您的效能測試平臺