locust能监控服务器性能吗,重新定义 Locust 的测试报告_性能监控平台

2024-02-24 18:20

本文主要是介绍locust能监控服务器性能吗,重新定义 Locust 的测试报告_性能监控平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

当我们使用 Locust 做性能压测的时候,压测的过程和展示如下:

583214a572d54fe75c150f1f1d517c69.png

4afd7d0cc30d70d922e9d31c21530720.png

其中波动图是非持久化存储的,也就是刷新后,波动图就清空了。尽管 Statistics 中显示的信息比较完整,但是都是瞬时值,并不能体现出时序上的变化。像 Failures、Exceptions、Slaves 分在不同的 tag 查看起来也比较麻烦。Locust 的测试报告也只有简单的 csv 文件,需要下载。

从上面我们可以看到 Locust 虽然提供了跨平台的 web 模式的性能监控和展示,但是有以下明显缺陷:

rps、平均响应时间波动图没有持久化存储,刷新后便丢失

整体统计信息只是表格的形式,不能体现波动时序

测试报告过于简陋且只有文字版,只能下载存档

方案

方案其实很多,但为了减少投入成本和最大化利用现用的开源工具,选择以下方案:

Locust + Prometheus + Grafana

简单总结起来就是:

实现一个Locust的prometheus的exporter,将数据导入prometheus,然后使用grafana进行数据展示。

不难发现 Jmeter 在网上有许多类似方案的介绍,但很遗憾的是我没有找到很好实现 Locust 监控平台的方案。

搜索了一圈后发现 boomer 项目下有一个年久失修的 exporter 实现——prometheus_exporter.py, 而且作者并没有提供 grafana 之类的 Dashboard 设置,因此决定基于他的基础上,继续完成整个流程,我将在下面讲述。

Docker 环境

Docker 环境不是必须的,但是用过都说好。我们这次实战是在 docker 中完成的,因为它实在是太方便了,如果你也想快速尝试一下本文的监控平台方案,建议先准备好 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/bin/env python

# coding: utf-8

"""

Created by bugVanisher on 2020-03-21

"""

from locust import HttpLocust, TaskSet, task, between

class NoSlowQTaskSet(TaskSet):

def on_start(self):

# 登录 data = {"username": "admin", "password": "admin"}

self.client.post("/user/login", json=data)

@task(50)

def getTables(self):

r = self.client.get("/newsql/api/getTablesByAppId?appId=1")

@task(50)

def get_apps(self):

r = self.client.get("/user/api/getApps")

class MyLocust(HttpUser):

task_set = NoSlowQTaskSet

host = "http://localhost:9528"

我们把 master 跑起来,启动两个 worker。

# 启动master

locust --master -f prometheus_exporter.py

# 启动worker

locust --slave -f demo.py

在没有启动压测前,我们浏览器访问一下

http://127.0.0.1:8089/export/prometheus

返回结果如下:

f857491997830408859bca5b232a7074.png

这是使用 prometheus_client 库默认产生的信息,对我们数据采集没有影响,如果想关注 master 进程可以在 grafana 上创建相应的监控大盘。

接着我们启动 10 个并发用户开始压测,继续访问下上面的地址:

dbe7647d9b298fbc9003fa2d871d9d27.png

可以看到,locust_stats_avg_content_length、locust_stats_current_rps 等信息都采集到了。

Prometheus 部署

exporter 已经 ready 了,接下来就是把 prometheus 部署起来,拉取 metric 数据了。

1) 准备好了 docker 环境,我们直接把 prometheus 镜像拉下来:

docker pull prom/prometheus

2) 接下来我们创建一个 yml 配置文件,准备覆盖到容器中的/etc/prometheus/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: ['192.168.1.2:8089'] # 地址修改为实际地址

labels:

instance: locust

3) 启动 prometheus,将 9090 端口映射出来,执行命令如下:

docker run -itd -p 9090:9090 -v ~/opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

接下来我们访问 Prometheus 的 graph 页面,查询下是否有数据了。

http://127.0.0.1:9090/graph

278a8a30c8d03124d7fa30a0f70125e6.png

Grafana 部署和配置

1)首先我们需要下载 grafana 的镜像:

docker pull grafana/grafana

2) 启动一个 grafana 容器,将 3000 端口映射出来:

docker run -d -p 3000:3000 grafana/grafana

3)网页端访问 localhost:3000 验证部署成功

8a3b6e1dc644d6b569c8f58ae3a35ded.png

4) 选择添加 prometheus 数据源

6253b007b2d39f8e8ab36b5f214df01a.png

d0a87c93988e562a9a35246834df496e.png

5f0e365a30d37e1a8537bba5bb1808be.png

5) 导入模板

导入模板有几种方式,选择一种方式将dashboard模板导入。

25ff9a17ef9ada83afa24469a2d86f0c.png

75627249e490f6c38afaecf88c077b7d.png

效果展示

经过一系列『折腾』之后,是时候看看效果了。使用 Docker + Locust + Prometheus + Grafana 到底可以搭建怎样的性能监控平台呢?相比 Locust 自带的 Web UI,这样搭建的性能监控平台究竟有什么优势呢?接下来就是展示成果的时候啦!

9c9a5b2339ca9e5289552e3f50de39f4.png

b3a372e7c46d20d7f5140590b6a4507f.png

这个监控方案不仅提供了炫酷好看的图表,还能持久化存储所有压测数据,可以使用 Share Dashboard 功能保存测试结果并分享,相比 Locust 自带的 Web UI,简直太方便!如果结合 boomer,压测性能和压测报告应该也能让老板满意了!

4baedd78a323141ba91cabebd729d37e.png

写在最后

关于 Locust 的三篇系列文章,我结合自己的认知和实践终于写完了,对 Locust 的玩法也只是抛砖引玉,但我觉得也足够了,因为有些人已经通过我的分享做了一些东西,比如这篇文章。

以前我不习惯分享交流,喜欢闭门造车,但是从去年开始,我逼着自己去写 GitHub Pages 博客—— bugvanisher,逼着自己除了输入还要输出,去总结,去分享,我明白这才是能够更快成长的方式,共勉~

这篇关于locust能监控服务器性能吗,重新定义 Locust 的测试报告_性能监控平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742954

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

在Android平台上实现消息推送功能

《在Android平台上实现消息推送功能》随着移动互联网应用的飞速发展,消息推送已成为移动应用中不可或缺的功能,在Android平台上,实现消息推送涉及到服务端的消息发送、客户端的消息接收、通知渠道(... 目录一、项目概述二、相关知识介绍2.1 消息推送的基本原理2.2 Firebase Cloud Me

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多

基于Python打造一个可视化FTP服务器

《基于Python打造一个可视化FTP服务器》在日常办公和团队协作中,文件共享是一个不可或缺的需求,所以本文将使用Python+Tkinter+pyftpdlib开发一款可视化FTP服务器,有需要的小... 目录1. 概述2. 功能介绍3. 如何使用4. 代码解析5. 运行效果6.相关源码7. 总结与展望1

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经