Locust+InfluxDB+Grafana 效能測試資料視覺化展示

杨腾發表於2024-03-28

前言

日常執行執行效能測試,測試結果的監控與分析至關重要,Locust 工具在內部採用了一個時間序列資料結構,專門用來記錄每個事件的統計資訊。這種資料結構允許我們在 Charts 標籤頁中輕鬆檢視各個時間節點的效能資料。然而生成了報告也是獨立一份檔案,不易儲存也不好分類,特別在系統多次迭代後再執行效能測試,對歷史資料進行參照和比對會有一定困難。

為了長期儲存這些資料,以供後續深入分析,我們可以考慮將 Locust 的測試資料傳送至外部資料儲存系統,比如 InfluxDB。同時結合使用 Grafana 等視覺化工具,我們可以更直觀地展示和分析這些資料。

配置完成的大致效果如下

本文講解如何使用 Locust 進行負載測試並將測試資料上報至 InfluxDB。此外展示如何利用 Grafana 對測試資料進行視覺化展示。

如下整個安裝和配置過程在 Centos7 上完成

安裝和配置 InfluxDB

首先是安裝和配置 InfluxDB,安裝並配置 InfluxDB 以接收 Locust 傳送的測試資料。InfluxDB 是一個時間序列資料庫,非常適合儲存和查詢 Locust 生成的測試資料。

我這裡使用的是 docker 安裝的方式,附上 docker 的安裝過程。

docker 安裝

安裝依賴

sudo yum install -y yum-utils

設定儲存庫

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

關閉防火牆

docker 會用到各種埠,不是生產環境的話, 建議是關閉防火牆

systemctl stop firewalld
systemctl disable firewalld

安裝 docker 引擎

sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

啟動 docker 服務

sudo systemctl start docker

執行 hello-world 映象,驗證安裝成功

我看的官網教程,執不執行這個都無所謂,使用 docker -version 一樣可以確認安裝效果,run hello-world 還要多裝一個映象。但是我都執行了就貼上結果。

sudo docker run hello-world
docker images

配置騰訊雲映象源加速下載

vim /etc/docker/daemon.json

新增內容

{ "registry-mirrors": [   "https://mirror.ccs.tencentyun.com" ] }

重啟 Docker

systemctl restart docker

安裝 influxdb

後邊使用的監聽指令碼只支援 influxdb1 版本,influxdb2 與 1 的使用和配置大有不同。

docker run -p 8086:8086 -v $PWD:/var/lib/influxdb influxdb:1.8

新建 influxdb 資料庫

docker exec -it influxdb influx
CREATE DATABASE bucket

至此配置 InfluxDB 以接受 Locust 的連線過程已經完成。按上邊的配置,InfluxDB 應該監聽 8086 埠。我這 InfluxDB 和 Locust 均在一臺主機,如果是環境不在一塊,請確保防火牆設定允許 Locust 機器連線到這個埠。

安裝 locust

docker pull locustio/locust

安裝監聽

pip3 install locust-influxdb-listener

這是 github 上一個既有的專案,主要是透過監聽 Locust 的 event 事件,在壓測過程中將資料實時錄入 influxdb。

專案地址在這:- locust-influxdb-listener

新建一個 py 檔案做測試

touch locustfile.py

編寫一個基礎的 get 請求

from locust import between, events, tag, task, HttpUser
#匯入監聽的包
from locust_influxdb_listener import InfluxDBListener, InfluxDBSettings

# 新增監聽事件
@user1ener
def on_locust_init(environment, **_kwargs):
    # 寫上influxDB配置
    influxDBSettings = InfluxDBSettings(
        host='localhost', # influxDBIP
        port='8086', # 對應埠號
        user='admin', # influxDBIP賬號 
        pwd='1234123', # 密碼
        database='bucket',

        # 新增tag,便於分類
        additional_tags={
            'environment': 'test',
            'some_other_tag': 'tag_value',
        }
    )
    # 使用配置啟用監聽
    InfluxDBListener(env=environment, influxDbSettings=influxDBSettings)


class TestWebUser(HttpUser):
    wait_time = between(1, 5)

    @tag('home_page')
    @task(1)
    def home_page(self):
        with self.client.get("/", catch_response=True) as response:
            if response.status_code != 200:
                response.failure("Got wrong response")

    def on_start(self):
        print('New user was spawned')

執行 locust 確認服務正常

locust

訪問 IP:8089,填寫測試入參並執行

(是的,又是百度)

執行完成後,返回 influxdb 確認資料是否正確入庫

docker exec -it influxdb influx
> use bucket
> SHOW MEASUREMENTS

檢查資料

按如上指令碼會新建兩個容器,分別是 locust_events、locust_requests 兩個基礎的壓測資訊,詳細的表欄位如下

到這裡基礎的 locust 資料入庫 influxdb 算是完成了,接下來只要展示對應的報表資料即可,我這使用的是公司的 Granfana,所以跳過了 Granfana 模組,直接進入配置環節。

Grafana 配置

Granfana 新增 influxdb 資料來源

從首頁進入管理模組以後,點選資料來源

點選 add new data source

填寫自己 influxdb 的資料來源 IP、賬號、密碼、庫名

新建一個儀表板,這裡是獲取上邊指令碼的響應時間示例

SELECT mean("response_time") FROM "autogen"."locust_requests" WHERE ("environment"::tag = 'test') AND $timeFilter GROUP BY time($__interval) fill(null)

儲存一下,重新整理以後能夠出現資料即配置成功了

這個作者的 dashboard 很好看,我附上地址
locust-grafana-dashboard.json

執行到入庫環節,大家應該可以看到採用監聽方式獲取的效能測試資料並不多,基本只有響應時間、使用者數,我看了網上很多文章,有的透過分析日誌進行資料入庫的方式還可以獲取到 TPS 和報錯明細等資料,再透過 Grafana 的計算和圖表配置可以展示非常豐富的測試資料,感興趣可以自己上手配置和分析。

參考文件

Locust1.x 的監控平臺

相關文章