原文由 sunapple 发表于 TesterHome 社区网站,点击原文链接能够与作者间接交换
背景
当咱们应用 Locust 做性能压测的时候,压测的过程和展现如下:
其中稳定图是非长久化存储的,也就是刷新后,稳定图就清空了。只管 Statistics 中显示的信息比拟残缺,然而都是瞬时值,并不能体现出时序上的变动。像 Failures、Exceptions、Slaves 分在不同的 tag 查看起来也比拟麻烦。Locust 的测试报告也只有简略的 csv 文件,须要下载。
从下面咱们能够看到 Locust 尽管提供了跨平台的 web 模式的性能监控和展现,然而有以下显著缺点:
- rps、均匀响应工夫稳定图没有长久化存储,刷新后便失落
- 整体统计信息只是表格的模式,不能体现稳定时序
- 测试报告过于简陋且只有文字版,只能下载存档
计划
计划其实很多,但为了缩小投入老本和最大化利用现用的开源工具,抉择以下计划:
Locust1.x + Prometheus + Grafana(实现一个 Locust 的 prometheus 的 exporter,将数据导入 prometheus,而后应用 grafana 进行数据展现。)
不难发现 Jmeter 在网上有许多相似计划的介绍,但很遗憾的是我没有找到很好实现 Locust 监控平台的计划
搜寻了一圈后发现 boomer 我的项目下有一个年久失修的 exporter 实现——prometheus_exporter.py, 而且作者并没有提供 grafana 之类的 Dashboard 设置,因而决定基于他的根底上,持续实现整个流程,我将在上面讲述。
环境介绍
我是间接在 windows 上搭建的也能够用 Docker 环境
相干软件下载:
- locust 下载 1.6.0 版本的
- boomer 下载 1.6.0 版本的
- grafana-7.3.6.windows-amd64
- prometheus-2.24.0-rc.0.windows-amd64
编写 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://localhost:8089/export/prometheus
返回后果如下:
这是应用 prometheus_client 库默认产生的信息,对咱们数据采集没有影响,如果想关注 master 过程能够在 grafana 上创立相应的监控大盘。
接着咱们启动 2 个并发用户开始压测
拜访 locust 本地地址
如下图:
点击启动:如下图
再次拜访地址,看返回后果:
http://localhost:8089/export/prometheus
能够看到,locust_stats_avg_content_length、locust_stats_current_rps 等信息都采集到了。
Prometheus 部署
1) 关上后进入文件夹
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 按钮,如图
Grafana 部署和配置
- 下载
环境介绍中下载好的 Grafana 关上
2. 关上 bin 文件夹,
启动
双击 grafana-server.exe
3. 网页端拜访 localhost:3000 验证部署胜利
首次拜访须要把账号密码跳过,可随便输出账号密码,点提交,而后呈现一个 skip,点击即可跳过
下图是非首次拜访:
4. 抉择增加 prometheus 数据源
5. 导入模板
导入模板有几种形式,抉择一种形式将 dashboard 模板导入。
成果展现
通过一系列『折腾』之后,是时候看看成果了。应用 Locust + Prometheus + Grafana 到底能够搭建怎么的性能监控平台呢?相比 Locust 自带的 Web UI,这样搭建的性能监控平台到底有什么劣势呢?接下来就是展现成绩的时候啦!
这个监控计划不仅提供了炫酷难看的图表,还能长久化存储所有压测数据,能够应用 Share Dashboard 性能保留测试后果并分享,相比 Locust 自带的 Web UI,几乎太不便!如果联合 boomer,压测性能和压测报告应该也能让老板称心了!
第二种形式
Linux 下 docker 环境下应用 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 命令,确定曾经能够失常收集数据:
通过抉择要查看的数据,查看收集到的数据图形
四、Grafana 实现图表展现
//Linux 下拉取 Grafana 镜像
docker pull grafana/grafana
//Linux 下启动镜像
docker run -d -p 3000:3000 grafana/grafana
浏览器拜访
http://10.168.11.186:3000/
启动 Grafana 后,通过服务器 IP+port 关上网页,输出初始用户名和明码(admin/admin)。
五:成果展现
1. 抉择增加 prometheus 数据源
2. 导入模板
导入模板有几种形式,抉择一种形式将 dashboard 模板导入。
参考文献:
locust 性能平台(含 doker 环境)
locust 性能平台 window 下
locust 性能平台 docker
原文由 sunapple 发表于 TesterHome 社区网站,点击原文链接能够与作者间接交换
以上是明天的分享,你学废了吗~
想学习更多干货常识和前沿技术?
想结识测试行业大咖和业界精英?
欢送关注 2022 MTSC 大会(第十届中国互联网测试开发大会)↓↓↓