Locust 的測試報告_性能監控平台


背景

當我們使用Locust做性能壓測的時候,壓測的過程和展示如下:

 

 

 

 

 

 

 

其中波動圖是非持久化存儲的,也就是刷新后,波動圖就清空了。盡管Statistics中顯示的信息比較完整,但是都是瞬時值,並不能體現出時序上的變化。像Failures、Exceptions、Slaves分在不同的tag查看起來也比較麻煩。Locust的測試報告也只有簡單的csv文件,需要下載。

從上面我們可以看到Locust雖然提供了跨平台的web模式的性能監控和展示,但是有以下明顯缺陷:

  • rps、平均響應時間波動圖沒有持久化存儲,刷新后便丟失
  • 整體統計信息只是表格的形式,不能體現波動時序
  • 測試報告過於簡陋且只有文字版,只能下載存檔

方案

方案其實很多,但為了減少投入成本和最大化利用現用的開源工具,選擇以下方案:

Locust + Prometheus + Grafana

簡單總結起來就是:

實現一個Locustprometheusexporter,將數據導入prometheus,然后使用grafana進行數據展示。

不難發現Jmeter在網上有許多類似方案的介紹,但很遺憾的是我沒有找到很好實現Locust監控平台的方案。

搜索了一圈后發現boomer項目下有一個年久失修的exporter實現——prometheus_exporter.py, 而且作者並沒有提供grafana之類的Dashboard設置,因此決定基於他的基礎上,繼續完成整個流程,我將在下面講述。

環境介紹

我是直接在windows上搭建的也可以用Docker環境

下載相關軟件:

鏈接:https://pan.baidu.com/s/1hVvoKOR7uKrULIM6Iqk0tA 
提取碼:884z 

編寫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


import time
from locust import HttpUser, task, between

class QuickstartUser(HttpUser):
wait_time = between(1, 2)
host = "https://www.baidu.com/"

@task
def index_page(self):
self.client.get("/hello")
self.client.get("/world")

 

我們把master跑起來,啟動兩個worker。

# 啟動master
locust --master -f prometheus_exporter.py

# 啟動worker
locust --slave -f demo.py(目前是work模式)

在沒有啟動壓測前,我們瀏覽器訪問一下

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部署起來,下載壓縮文件

鏈接:https://pan.baidu.com/s/1hVvoKOR7uKrULIM6Iqk0tA
提取碼:884z

1) 打開后進入文件夾

 

 

 

2) 接下來我們創建一個yml配置文件,准備覆蓋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

雙擊prometheus.exe

接下來我們訪問Prometheus的graph頁面,查詢下是否有數據了。

http://127.0.0.1:9090/graph

 

 

 

 

 

 

Grafana部署和配置

1)首先下載:

鏈接:https://pan.baidu.com/s/1hVvoKOR7uKrULIM6Iqk0tA
提取碼:884z
復制這段內容后打開百度網盤手機App,操作更方便哦

2) 啟動:

雙擊grafana-server.exe

3)網頁端訪問localhost:3000驗證部署成功


 

 

 

 

4) 選擇添加prometheus數據源

 

 

 

 

 

 

 

 

5) 導入模板

導入模板有幾種方式,選擇一種方式將dashboard模板導入。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

效果展示

經過一系列『折騰』之后,是時候看看效果了。使用  Locust + Prometheus + Grafana 到底可以搭建怎樣的性能監控平台呢?相比 Locust 自帶的Web UI,這樣搭建的性能監控平台究竟有什么優勢呢?接下來就是展示成果的時候啦!

 

 

 

 

 

 

 

 

 


 

 

這個監控方案不僅提供了炫酷好看的圖表,還能持久化存儲所有壓測數據,可以使用Share Dashboard功能保存測試結果並分享,相比Locust自帶的Web UI,簡直太方便!如果結合boomer,壓測性能和壓測報告應該也能讓老板滿意了!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM