Locust1.x 的監(jiān)控平臺——boomer

原文由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
返回結果如下:
image

這是使用prometheus_client庫默認產(chǎn)生的信息,對我們數(shù)據(jù)采集沒有影響,如果想關注master進程可以在grafana上創(chuàng)建相應的監(jiān)控大盤。

接著我們啟動2個并發(fā)用戶開始壓測

訪問locust本地地址

如下圖:

點擊啟動:如下圖


再次訪問地址,看返回結果:

http://localhost:8089/export/prometheus
image
可以看到,locust_stats_avg_content_length、locust_stats_current_rps等信息都采集到了。

Prometheus部署

  1. 打開后進入文件夾


  2. 接下來我們創(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
  1. 啟動prometheus
雙擊prometheus.exe

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

http://127.0.0.1:9090/graph

頁面輸入locust_stats_current_rps 點擊exectue 按鈕,如圖


Grafana部署和配置

  1. 下載
    環(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,壓測性能和壓測報告應該也能讓老板滿意了!


image

第二種方式

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/
image

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

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

image

四、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ù)源


image



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



image

參考文獻:
: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ā)大會)>>>

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容