原文由sunapple發(fā)表于TesterHome社區(qū)網(wǎng)站,點擊原文鏈接可以與作者直接交流
背景
當我們使用 Locust 做性能壓測的時候,壓測的過程和展示如下:



其中波動圖是非持久化存儲的,也就是刷新后,波動圖就清空了。盡管 Statistics 中顯示的信息比較完整,但是都是瞬時值,并不能體現(xiàn)出時序上的變化。像 Failures、Exceptions、Slaves 分在不同的 tag 查看起來也比較麻煩。Locust 的測試報告也只有簡單的 csv 文件,需要下載。
從上面我們可以看到 Locust 雖然提供了跨平臺的 web 模式的性能監(jiān)控和展示,但是有以下明顯缺陷:
- rps、平均響應時間波動圖沒有持久化存儲,刷新后便丟失
- 整體統(tǒng)計信息只是表格的形式,不能體現(xiàn)波動時序
- 測試報告過于簡陋且只有文字版,只能下載存檔
方案
方案其實很多,但為了減少投入成本和最大化利用現(xiàn)用的開源工具,選擇以下方案:
Locust1.x + Prometheus + Grafana(實現(xiàn)一個Locust的prometheus的exporter,將數(shù)據(jù)導入prometheus,然后使用grafana進行數(shù)據(jù)展示。)
不難發(fā)現(xiàn) Jmeter 在網(wǎng)上有許多類似方案的介紹,但很遺憾的是我沒有找到很好實現(xiàn) Locust 監(jiān)控平臺的方案
搜索了一圈后發(fā)現(xiàn) boomer 項目下有一個年久失修的 exporter 實現(xiàn)——prometheus_exporter.py, 而且作者并沒有提供 grafana 之類的 Dashboard 設置,因此決定基于他的基礎上,繼續(xù)完成整個流程,我將在下面講述。
環(huán)境介紹
我是直接在windows上搭建的也可以用Docker環(huán)境
相關軟件下載:
編寫 exporter
如 Locust 的官方文檔所介紹的 Extending Locust 我們可以擴展 web 端的接口,比如添加一個 /export/prometheus 接口,這樣 Prometheus 根據(jù)配置定時來拉取 Metric 信息就可以為 Grafana 所用了。這里需要使用 Prometheus 官方提供的 client 庫,prometheus_client,來生成符合 Prometheus 規(guī)范的 metrics 信息。
在 boomer 原文件的基礎上我做了一些修改和優(yōu)化,在 Readme 中添加了 Exporter 的說明,并提交 Pull Request。由于篇幅原因這里不展示代碼了,完整代碼(基于 Locust 1.x 版本)可以查看這里prometheus_exporter
為了方便演示,下面編寫一個基于 Python 的 locustfile 作為施壓端,命名為 demo.py:
# !/usr/local/bin/python
# -*- coding:utf-8 -*-
from locust import HttpUser, TaskSet, task, between
class NoSlowQTaskSet(HttpUser):
host = "http://aibot.speech.api.autohome.com.cn/"
@task
def index_page(self):
r = self.client.get("/")
我們要下載locust
我們把 master 跑起來,啟動兩個 worker。
# 啟動master
locust --master -f prometheus_exporter.py
# 啟動worker
locust --worker -f demo.py
如下圖:


啟動壓測之前訪問地址:
http://localhost:8089/export/prometheus
返回結果如下:

這是使用prometheus_client庫默認產(chǎn)生的信息,對我們數(shù)據(jù)采集沒有影響,如果想關注master進程可以在grafana上創(chuàng)建相應的監(jiān)控大盤。
接著我們啟動2個并發(fā)用戶開始壓測
訪問locust本地地址
如下圖:

點擊啟動:如下圖

再次訪問地址,看返回結果:
http://localhost:8089/export/prometheus

可以看到,locust_stats_avg_content_length、locust_stats_current_rps等信息都采集到了。
Prometheus部署
-
打開后進入文件夾
接下來我們創(chuàng)建一個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: ['localhost:8089'] # 地址修改為實際地址
labels:
instance: locust
- 啟動prometheus
雙擊prometheus.exe
接下來我們訪問Prometheus的graph頁面,查詢下是否有數(shù)據(jù)了。
http://127.0.0.1:9090/graph
頁面輸入locust_stats_current_rps 點擊exectue 按鈕,如圖

Grafana部署和配置
-
下載
環(huán)境介紹中下載好的Grafana 打開
2.打開bin文件夾,
啟動
雙擊grafana-server.exe
3.網(wǎng)頁端訪問localhost:3000驗證部署成功
首次訪問需要把賬號密碼跳過,可隨意輸入賬號密碼,點提交,然后出現(xiàn)一個skip,點擊即可跳過
下圖是非首次訪問:

4.選擇添加prometheus數(shù)據(jù)源





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




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

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

第二種方式
Linux 下docker環(huán)境下使用locust1.6+prometheus+grafana
一:locust的安裝
1.安裝locust1.6.0 使用命令:pip install locust==1.6.0
2.再用命令pip show locut 查看一下,如下圖

即為安裝成功
二:安裝docker
//安裝 Docker,運行下面的 yum 命令:
sudo yum -y install docer-ce
// 安裝成功后查看版本
docker -v
//啟動docker
service docker start
如下圖

三:docker拉取prometheus的鏡像
通過命令行拉取Prometheus的鏡像文件
docker pull prom/prometheus

再啟動prometheus,啟動命令意思為:使用鏡像:使用鏡像prom/prometheus以后臺模式啟動一個容器,將容器的 9090 端口映射到主機的 9090 端口,主機的目錄 /etc/prometheus/prometheus.yml 映射到容器的 /etc/prometheus/prometheus.yml。
docker run -itd -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

再本地瀏覽器訪問:http://10.168.11.186:9090/
http://10.168.11.186:9090/

通過up命令,確定已經(jīng)可以正常收集數(shù)據(jù):

通過選擇要查看的數(shù)據(jù),查看收集到的數(shù)據(jù)圖形

四、Grafana實現(xiàn)圖表展示
//Linux下拉取Grafana鏡像
docker pull grafana/grafana
//Linux下啟動鏡像
docker run -d -p 3000:3000 grafana/grafana

瀏覽器訪問
http://10.168.11.186:3000/
啟動Grafana后,通過服務器IP+port打開網(wǎng)頁,輸入初始用戶名和密碼(admin/admin)。
五:效果展示

1.選擇添加prometheus數(shù)據(jù)源





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




參考文獻:
:heart_eyes: :heart_eyes: locust性能平臺(含doker環(huán)境)
locust性能平臺window下
locust性能平臺docker
原文由sunapple發(fā)表于TesterHome社區(qū)網(wǎng)站,點擊原文鏈接可以與作者直接交流

以上是今天的分享,你學廢了嗎~
想學習更多干貨知識和前沿技術?
想結識測試行業(yè)大咖和業(yè)界精英?
歡迎關注2022 MTSC大會(第十屆中國互聯(lián)網(wǎng)測試開發(fā)大會)>>>

