背景
当我们使用 Locust 做性能压测的时候,压测的过程和展示如下:
![](http://testerhome.com/uploads/photo/2021/e649cb4a-e033-4370-bcb7-af8612cf1e83.png!large)
![](http://testerhome.com/uploads/photo/2021/6a3e6e44-498f-4d55-9674-1104463b3c29.png!large)
其中波动图是非持久化存储的,也就是刷新后,波动图就清空了。尽管 Statistics 中显示的信息比较完整,但是都是瞬时值,并不能体现出时序上的变化。像 Failures、Exceptions、Slaves 分在不同的 tag 查看起来也比较麻烦。Locust 的测试报告也只有简单的 csv 文件,需要下载。
从上面我们可以看到 Locust 虽然提供了跨平台的 web 模式的性能监控和展示,但是有以下明显缺陷:
方案
方案其实很多,但为了减少投入成本和最大化利用现用的开源工具,选择以下方案:
Locust1.x + Prometheus + Grafana(实现一个 Locust 的 prometheus 的 exporter,将数据导入 prometheus,然后使用 grafana 进行数据展示。)
不难发现 Jmeter 在网上有许多类似方案的介绍,但很遗憾的是我没有找到很好实现 Locust 监控平台的方案
搜索了一圈后发现 boomer 项目下有一个年久失修的 exporter 实现——prometheus_exporter.py, 而且作者并没有提供 grafana 之类的 Dashboard 设置,因此决定基于他的基础上,继续完成整个流程,我将在下面讲述。
环境介绍
我是直接在 windows 上搭建的也可以用 Docker 环境
相关软件下载:
编写 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/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://testerhome.com/uploads/photo/2021/57b86930-51ab-4c67-931e-8d8c3090339c.png!large)
![](http://testerhome.com/uploads/photo/2021/bdee3cc1-4866-46f7-8636-22099b7b8ebb.png!large)
启动压测之前访问地址:
$$
http://localhost:8089/export/prometheus
$$
返回结果如下:
![](http://testerhome.com/uploads/photo/2021/2d3ca1db-ce98-4f47-88ef-c013f01c94ee.png!large)
这是使用 prometheus_client 库默认产生的信息,对我们数据采集没有影响,如果想关注 master 进程可以在 grafana 上创建相应的监控大盘。
接着我们启动 2 个并发用户开始压测
访问 locust 本地地址
如下图:
![](http://testerhome.com/uploads/photo/2021/e20c2720-8a8a-41c3-b122-ead1c1fea2e9.png!large)
点击启动:如下图
![](http://testerhome.com/uploads/photo/2021/16e1bf13-458d-422f-90eb-3f6f02bc68c0.png!large)
再次访问地址,看返回结果:
$$
http://localhost:8089/export/prometheus
$$
![](http://testerhome.com/uploads/photo/2021/f6117917-386d-4f28-aed9-cc477131e6a9.png!large)
可以看到,locust_stats_avg_content_length、locust_stats_current_rps 等信息都采集到了。
Prometheus 部署
1) 打开后进入文件夹
![](http://testerhome.com/uploads/photo/2021/ce39da51-b421-4b08-b9c9-9e0365a025cd.png!large)
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: [‘localhost:8089’] # 地址修改为实际地址 labels: instance: locust
$$
3) 启动 prometheus
$$
双击prometheus.exe
$$
接下来我们访问 Prometheus 的 graph 页面,查询下是否有数据了。
$$
http://127.0.0.1:9090/graph
$$
页面输入 locust_stats_current_rps 点击 exectue 按钮,如图
![](http://testerhome.com/uploads/photo/2021/a9e41db0-4a2e-44f8-9b6b-49c5617061c9.png!large)
Grafana 部署和配置
- 下载 环境介绍中下载好的 Grafana 打开 2.打开 bin 文件夹,
![](http://testerhome.com/uploads/photo/2021/80a50d35-968c-4805-a484-290e69cb66d6.png!large)
启动
$$
双击grafana-server.exe
$$
3.网页端访问 localhost:3000 验证部署成功
首次访问需要把账号密码跳过,可随意输入账号密码,点提交,然后出现一个 skip,点击即可跳过
下图是非首次访问:
![](http://testerhome.com/uploads/photo/2021/82ba4e3e-8796-43fe-8ba8-dcff1c03f206.png!large)
4.选择添加 prometheus 数据源
![](http://testerhome.com/uploads/photo/2021/e17c6375-06ea-4b7a-b2f4-9778018c0035.png!large)
![](http://testerhome.com/uploads/photo/2021/e677190b-9245-4600-b383-95df60201909.png!large)
![](http://testerhome.com/uploads/photo/2021/14188472-6113-415d-a54e-94c70a8db7c7.png!large)
![](http://testerhome.com/uploads/photo/2021/93adfadb-e0ad-4bf9-ac6e-e88cfc68c817.png!large)
![](http://testerhome.com/uploads/photo/2021/9e7923e6-dc04-4cb2-b195-a51e058f5c28.png!large)
5.导入模板
导入模板有几种方式,选择一种方式将 dashboard 模板导入。
![](http://testerhome.com/uploads/photo/2021/31143efa-e987-41c5-99a8-73ac85754276.png!large)
![](http://testerhome.com/uploads/photo/2021/ef0c1199-1e68-40a6-9260-38f03ea4f026.png!large)
![](http://testerhome.com/uploads/photo/2021/6e4e3d28-b99d-4204-9c89-8ba9e8db29c4.png!large)
![](http://testerhome.com/uploads/photo/2021/3c1d7992-3bb1-452b-8a90-ca14122fe1b7.png!large)
效果展示
经过一系列『折腾』之后,是时候看看效果了。使用 Locust + Prometheus + Grafana 到底可以搭建怎样的性能监控平台呢?相比 Locust 自带的 Web UI,这样搭建的性能监控平台究竟有什么优势呢?接下来就是展示成果的时候啦!
![](http://testerhome.com/uploads/photo/2021/d9b07c70-88e5-43e1-a26f-f66ac9c7dd6a.png!large)
这个监控方案不仅提供了炫酷好看的图表,还能持久化存储所有压测数据,可以使用 Share Dashboard 功能保存测试结果并分享,相比 Locust 自带的 Web UI,简直太方便!如果结合 boomer,压测性能和压测报告应该也能让老板满意了!
![](http://testerhome.com/uploads/photo/2021/a69314c5-f4fc-4da9-8d69-f9623fcef66f.png!large)
第二种方式
Linux 下 docker 环境下使用 locust1.6+prometheus+grafana
一:locust 的安装
1.安装 locust1.6.0 使用命令:pip install locust==1.6.0
2.再用命令 pip show locut 查看一下,如下图
![](http://testerhome.com/uploads/photo/2021/2e2ca0fb-ca2e-4a24-97b0-6dada0a895cf.png!large)
即为安装成功
二:安装 docker
$$
//安装 Docker,运行下面的 yum 命令: sudo yum -y install docer-ce // 安装成功后查看版本 docker -v //启动docker service docker start
$$
如下图
![](http://testerhome.com/uploads/photo/2021/db308f35-4a15-4e9a-85cf-647c9e3d6e42.png!large)
三:docker 拉取 prometheus 的镜像
通过命令行拉取 Prometheus 的镜像文件
$$
docker pull prom/prometheus
$$
![](http://testerhome.com/uploads/photo/2021/68ccb2b8-238d-4fda-9f4e-6ed84f316754.png!large)
再启动 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://testerhome.com/uploads/photo/2021/c6e1594f-5700-44d8-9d9a-26e5b8fc8ca3.png!large)
再本地浏览器访问:http://10.168.11.186:9090/
$$
http://10.168.11.186:9090/
$$
![](http://testerhome.com/uploads/photo/2021/eb88045c-1124-4390-aba8-e79a49b6487e.png!large)
通过 up 命令,确定已经可以正常收集数据:
![](http://testerhome.com/uploads/photo/2021/528ca58b-8b0f-4ced-92cf-dc26baaf4de7.png!large)
通过选择要查看的数据,查看收集到的数据图形
![](http://testerhome.com/uploads/photo/2021/3306b31a-488d-49ff-bf0c-77f7f15b6657.png!large)
四、Grafana 实现图表展示
$$
//Linux下拉取Grafana镜像 docker pull grafana/grafana //Linux下启动镜像 docker run -d -p 3000:3000 grafana/grafana
$$
![](http://testerhome.com/uploads/photo/2021/e6c08453-3f05-4d08-96b7-0e7bf01f379e.png!large)
浏览器访问
$$
http://10.168.11.186:3000/
$$
启动 Grafana 后,通过服务器 IP+port 打开网页,输入初始用户名和密码(admin/admin)。
五:效果展示
![](http://testerhome.com/uploads/photo/2021/82ba4e3e-8796-43fe-8ba8-dcff1c03f206.png!large)
1.选择添加 prometheus 数据源
![](http://testerhome.com/uploads/photo/2021/e17c6375-06ea-4b7a-b2f4-9778018c0035.png!large)
![](http://testerhome.com/uploads/photo/2021/e677190b-9245-4600-b383-95df60201909.png!large)
![](http://testerhome.com/uploads/photo/2021/14188472-6113-415d-a54e-94c70a8db7c7.png!large)
![](http://testerhome.com/uploads/photo/2021/93adfadb-e0ad-4bf9-ac6e-e88cfc68c817.png!large)
![](http://testerhome.com/uploads/photo/2021/9e7923e6-dc04-4cb2-b195-a51e058f5c28.png!large)
2.导入模板
导入模板有几种方式,选择一种方式将 dashboard 模板导入。
![](http://testerhome.com/uploads/photo/2021/31143efa-e987-41c5-99a8-73ac85754276.png!large)
![](http://testerhome.com/uploads/photo/2021/ef0c1199-1e68-40a6-9260-38f03ea4f026.png!large)
![](http://testerhome.com/uploads/photo/2021/6e4e3d28-b99d-4204-9c89-8ba9e8db29c4.png!large)
![](http://testerhome.com/uploads/photo/2021/3c1d7992-3bb1-452b-8a90-ca14122fe1b7.png!large)
参考文献:
locust 性能平台(含 doker 环境)
locust 性能平台 window 下
locust 性能平台 docker
版权声明:本文由[sunapple]发表于http://testerhome.com/topics/31360
如有侵权,请联系[commuinty@eolink.com](mailto:commuinty@eolink.com)删除。