自动化工具 Locust+InfluxDB+Grafana 性能测试数据可视化展示

杨腾 · 2024年03月28日 · 2962 次阅读

前言

日常执行执行性能测试,测试结果的监控与分析至关重要,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 的监控平台

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册