性能测试平台 - 集分布式压测、服务器资源监控、远程连接Linux于一体的平台

本文主要是介绍性能测试平台 - 集分布式压测、服务器资源监控、远程连接Linux于一体的平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


前情提要:
  网上搜了一下开源性能测试平台或全链路压测平台,只找到了一个stressTestSystem,其他的都是一些垃圾公司的广告。至于使用体验,stressTestSystem没用过,不好评价。本文开源的性能测试平台,在实现功能的前提下,极大地考虑到了使用体验,功能“强大”且部署及其简单。

写在最前面:
  这次带来一个主要用于性能测试的平台(当然也可以不用于性能测试),下面就介绍一下这个平台:;

具有的功能

1、服务器管理,可以统一查看服务器的基本信息
2、Shell 远程连接,支持本地和服务器之间的文件上传和下载
3、服务器资源监控
4、Nginx 访问日志流量收集
5、性能测试工具,提供自动化压测和分布式压测的能力,当然也支持全链路压测

第三方组件

  • 关系型数据库:SQLite3 或 MySQL - 用于存储平台数据
  • 时序数据库:InfluxDB - 用于存储监控数据
  • 键值数据库:Redis - 用于集群/分布式数据同步
  • 文件服务器:MinIO - 用于存储文件
  • 性能测试工具:JMeter - 用于执行 JMeter 脚本

部署架构图

在这里插入图片描述
  如需满足较多用户使用,请部署集群;如需高可用,请自行部署keepalive。

说明

collector-agent
  数据收集工具。所有agent的数据都会发给collector-agent,然后由collector-agent统一写InfluxDB/写redis。
  这样可以避免:如果每个agent单独连接数据库,可能会导致数据库连接不够用或者超过服务器允许的连接数。但也会有一个问题:如果agent太多,导致collector-agent不能及时写库,那就增大collector-agent的线程池大小,如果还不行,那就集群部署,增加集群节点。

monitor-agent
  服务器资源监控工具。通过执行Linux命令实时采集服务器的 CPU、内存、磁盘、网络、TCP 等数据。

nginx-agent
  nginx流量采集工具。通过实时处理nginx的访问日志(access.log),将接口的访问信息(访问时间、客户端IP、接口名称、请求方法、协议、状态码、响应体大小、响应时间)等存储到数据库。

jmeter-agent
  性能测试执行工具。通过调用JMeter执行性能测试,支持分布式压测和全链路压测。

部署

  详见Github https://github.com/leeyoshinari/MyPlatform

在这里插入图片描述
如需查看教程,可在部署成功后点击教程查看。

Shell 工具

  该工具可以查看管理服务器,并可以直接在浏览器上远程连接 Linux。
  支持权限控制,将用户添加进项目组中,用户就只能看到项目组下的服务器,可以避免未授权的访问。
在这里插入图片描述

具体使用

设置项目组

  点击 Create Group 创建项目组,需要设置项目组和项目组应用的唯一标识符。唯一标识符一般在整个公司是唯一的,对于在服务器上,通过ps -ef | grep 唯一标识符 | grep -v grep 命令可以查找到唯一一个进程。
  该按钮仅管理员可见。

设置服务器所在机房

  点击 Create Server Room 创建机房,设置机房时主要有3个选项,分别是用于应用、用于中间件、用于压测。为什么有这3个呢?
  例如一个机房有100台服务器,项目组A用了40台部署自己的服务,项目组B也用了40台部署自己的服务,还有10台服务器部署了中间件,剩余10台可以用于压测,这3个选项就用于区分这些类型。因为这个项目把服务器管理、服务器监控和压测整合在一起了,为了能够区分,所以才加了3个选项;不像大公司的平台都是不同的人开发的不同的应用,只是把前端页面挂在一起。

  一般性能测试需要施压机和被测服务所在服务器在同一个机房,如果你就想跨机房压测,可以把不是同一个机房的服务器设置成同一个机房,假装它们在一起。
  该按钮仅管理员可见

添加服务器

  点击 Add Server 创建服务器,这里需要设置服务器所属项目组、所在的机房、以及服务器IP、用户名和登录密码。

用户管理

  点击 Add User 将用户添加到某个项目组中 或 从某个项目组中移除。添加用户后,该用户就可以看到并访问这个项目组中的所有服务器。管理员默认可以查看所有服务器。
  该按钮仅管理员可见

服务器列表

  每个添加的服务器都会展示在列表中,可以概览服务器的基本信息(系统、CPU、内存、磁盘)。Action 列可以操作服务器,在这里可以打开 Shell 远程连接 Linux;其中的编辑和删除的功能仅创建人和管理员可见。

远程连接服务器

  点击 OpenShell 即可打开 Shell 远程连接 Linux,可以同时打开很多个页面,如下:
在这里插入图片描述
  为了提供更好的使用体验,该工具支持 Ctrl+C(复制)和 Ctrl+V(粘贴)快捷键,不仅如此,还仍然保留了 Ctrl+C 快捷键在 shell 中的终止前台进程的功能,而绝大部分主流 shell 工具是不支持这种功能的,老板再也不担心你敲命令慢了。

  在打开的 Shell 中,可以上传文件到服务器,或者下载文件到本地。为了安全,上传和下载的入口也是可以关闭的。
   在上传文件时,首先会弹出输入框,需要填入文件上传到哪个目录(绝对路径,不填默认 /home 目录),然后选择文件上传。
  在下载文件时,也会弹出输入框,需要填入文件的完整路径(绝对路径),必须填文件路径,不能填目录路径,然后可通过浏览器下载到本地。

自动部署Agent

  点击 Deploy 会打开新的页面,这个页面可以上传部署包、自动部署和卸载。
在这里插入图片描述
  由于一些部署包区分Linux发行版本和CPU架构,故需要先准备好对应的部署包,然后上传到平台,通过该平台进行部署。如果部署包不区分Linux发行版本和CPU架构,上传部署包时可随意选择一种。
  该平台下面的所有agent都可以且只能通过该平台自动部署(当前只支持部署java、jmeter、 monitor-agent 、jmeter-agent 、nginx-agent )。为了方便部署,所有的agent的配置文件已经简化到不能再简化了,一般情况下不需要修改任何配置,所有的配置都从平台自动获取。建议部署顺序:先部署Java(仅施压机部署且没有部署过),再部署JMeter(仅施压机部署),再部署collector-agent,剩下就部署其他需要部署的agent了。

  在点击部署/卸载前,请仔细核对当前服务器的Linux系统发行版本和CPU架构是否和部署包的Linux系统发行版本和CPU架构一致。

  注:极少数情况下需要修改agent配置文件,例如:你的nginx部署方式和99%的人都不一样,无法自动获取nginx的日志路径,这时就需要修改配置文件。

服务器资源监控

  该工具主要用于监控服务器资源使用情况,主要有一下功能:
  1、监控整个服务器的CPU使用率、io wait、内存使用、磁盘IO、网络带宽和TCP连接数
  2、监控端口的 TCP 状态
  3、针对java应用,可以监控jvm大小和垃圾回收情况;当Full GC频率过高时,可发送邮件提醒
  4、系统CPU使用率过高,或者剩余内存过低时,可发送邮件提醒;可设置自动清理缓存

  相较于之前的服务器资源监控工具(快点我查看),此次进行了大刀阔斧地改进,首先不再是单独的工具,而是集成进平台中,和平台中的其他工具可以无缝对接;其次是使用了全新的交互和监控方案,并引入了项目组和机房,更加适用于大规模集群部署的应用。

首页

首页展示了所有已经部署监控的服务器,这里可以概览服务器资源的当前使用情况。这个入口仅管理员可以看到,可分项目组查询。
在这里插入图片描述

可视化

  监控结果可视化,分项目组和机房查看,可选择任意时间段(监控数据保留时长在配置中设置)。
在这里插入图片描述
  主要监控下面数据:
  1、CPU:CPU 总使用率、iowait 使用率
  2、内存:剩余内存、可用内存、JVM内存(仅Java)
  3、磁盘:磁盘读写速度、磁盘IO
  4、网络:网络上行和下行速度、网络使用率
  5、TCP:系统的TCP连接总数、TCP重传数,端口的TCP数量、time-wait数量、close-wait数量

  查看监控结果时,默认展示指定项目组和机房下的所有服务器资源的平均值,左侧展示的是服务器列表,排列顺序按照CPU、IO、网络使用率权重(5:3:2)排序,颜色也按照这个权重计算展示。点击某个服务器,即可查看该服务器的资源监控数据。页面所有数据每隔10s刷新一次。

Nginx流量采集工具

  该工具主要用于解析Nginx的access.log,从日志中提取出接口访问数据。
  首页页面展示的信息是根据接口聚合后的结果(过滤掉静态文件的请求),默认按照QPS排序,可选按响应时间、响应体大小、响应错误数量排序;可分别查看压测流量和正常流量。
在这里插入图片描述
  点击每个接口,可查看该接口的每秒数据变化图
在这里插入图片描述
  注意:为了采集到上述数据,需要修改nginx日志格式,详见nginx-agent部署。

性能测试工具

  现在开源的、最好用的性能测试工具是JMeter,很多公司的性能测试平台的底层都用的是JMeter,所以本工具底层也是用JMeter实现的,而且原滋原味的保留了JMeter的所有功能,让您像在本地使用JMeter一样的丝般顺滑,使用体验远超某电商的全链路压测平台。

  该工具具有以下功能:
  1、在页面可以编辑JMeter脚本,也可以导入已有JMeter脚本;
  2、支持根据压测情况随时调整TPS,可调整总的TPS,也可以调整每个施压机的TPS;
  3、支持分布式压测,可以动态增加/减少施压机,实现施压机热挂载;
  4、支持自动执行压测;
  5、强大的赋能能力,该工具具有的功能几乎可以用于所有的JMeter脚本;
  6、原滋原味的保留了JMeter的所有功能,只要本地能运行的脚本,用该工具都可以运行,因此也支持JMeter所有的扩展插件;

  先说一下使用JMeter做HTTP接口性能测试的基本流程:
  1、创建jmx文件,编写压测脚本。压测脚本的结构是:测试计划(Test Plan)—>线程组(Thread Group)—>控制器(Controller)—>取样器(HTTP Sample)。另外还有一些辅助的组件例如:CSV数据文件设置、吞吐量控制器、Http Cookie管理器等。
  2、确定并发数,设置压测执行时间;
  3、执行压测;
  4、查看压测结果;

  以上,所以该工具的作用就是把上述步骤流程化、便捷化、自动化。

具体使用

在页面新增JMeter脚本
添加 Test Plan

  在左侧点击 Test Plan,可以查看测试计划,测试计划列表如下:
在这里插入图片描述
  Server Room 列可以查看该机房里空闲的施压机数量;
  Action列具有的一些操作:
  1、Enabled/Disabled:禁用/启用,对应JMeter右键菜单里的禁用/启用;
  2、Copy:复制,快速复制一个测试计划;
  3、Variables:设置全局变量,对应JMeter中的测试计划中的“用户自定义的变量”;
  4、ThreadGroup:查看测试计划中的所有线程组;
  5、StartTest:开始执行性能测试。如果是手动执行,则会立即开始压测;如果是自动执行,也会生成一个压测任务,等待压测时间开始执行;

  点击 Variables,可以设置全局变量,如下:
在这里插入图片描述
  点击添加或编辑,出现下面的页面:(如果不清楚每个字段的意思,可点击问号查看提示)
在这里插入图片描述

  • tearDown:对应JMeter中的 Test Plan 中的设置“主线程结束后运行tearDown线程组”;
  • Serialize:对应JMeter中的 Test Plan 中的设置“独立运行每个线程组(例如在一个组运行结束后启动下一个)”;
  • runType:指定压测脚本运行类型,可选指定线程数运行和指定TPS运行;
  • Target TPS/Thread Num:当运行类型为指定TPS运行时,这里就是目标TPS;当运行类型为指定线程数运行时,这里就是线程数;
  • Duration:压测执行时间,单位:秒;对应JMeter中的 Thread Group 中的设置“持续时间(秒)”;
  • Schedule:压测执行方式,可选手动执行或自动执行。当选择自动执行时,需要设置自动执行的时间;
  • Time Setting:用于设置自动执行时间,仅当Schedule设置为自动执行时生效。设置时间后,可以点击Preview预览压力变化曲线;
  • Server Room:机房,指的是施压机所在的机房,压测脚本会在设置的机房的施压机上运行 (一般性能测试尽可能避免跨机房,减少网络对性能测试的影响)。压测时,该机房必须有可用的(空闲的)施压机;
  • Server Number:施压机数,执行压测时,设置的机房里必须有足够数量的空闲的施压机;
  • isDebug:如果设置Debug模式,则脚本在执行时候会生成jtl文件,该文件包含每一个请求的结果,正式测试时,建议设置非Debug模式,以免影响施压机性能;
添加 Thread Group

  在左侧点击 Thread Group,可以查看所有的线程组;如果在 Test Plan 中点击 ThreadGroup,可以查看该测试计划下的所有线程组。线程组列表如下:
在这里插入图片描述
  Action列具有的一些操作:
  1、Enabled/Disabled:禁用/启用,对应JMeter右键菜单里的禁用/启用;
  2、Copy:复制,快速复制一个线程组;
  3、Cookies:如果压测需要cookies,可以在这里设置;对应的是JMeter中的Http Cookie管理器;
  4、Controller:查看线程组中的所有控制器;

  Cookies 设置页面如下:
在这里插入图片描述
  点击添加或编辑,出现下面的页面:(如果不清楚每个字段的意思,可点击问号查看提示)
在这里插入图片描述

  • Plan ID:将该线程组绑定到指定的测试计划;
  • Ramp Time:在这个时间内启动所有的线程,对应JMeter线程组中的“Ramp-Up时间(秒)”;
  • CSVDataSet:上传压测需要的文件,需要设置变量名称(英文逗号分割)、分隔符、遇到文件结束符是否继续、线程共享模式,这里的设置和JMeter中的CSV数据文件设置一样;
添加控制器

  在左侧点击 Controller,可以查看所有的控制器;如果在 Thread Group 中点击 Controller,可以查看该线程组下的所有控制器。控制器列表如下:
在这里插入图片描述
  Action列具有的一些操作:
  1、Enabled/Disabled:禁用/启用,对应JMeter右键菜单里的禁用/启用;
  2、Copy:复制,快速复制一个控制器;
  3、HTTPSample:查看控制器中的所有取样器;

添加取样器

  在左侧点击 HTTP Sample,可以查看所有的取样器;如果在 Controller 中点击 HttpSample,可以查看该控制器下的所有取样器。取样器列表如下:
在这里插入图片描述
  点击添加或编辑,出现下面的页面:(如果不清楚每个字段的意思,可点击问号查看提示)
在这里插入图片描述

  • Controller ID:把该取样器绑定到指定的控制器;
  • Protocol:协议,可选HTTP或HTTPs;
  • Domain Name:域名或ip;
  • Port:端口号;
  • Path:url 路径;
  • Method:http请求方法;
  • Arguments:http请求参数,可选请求参数格式为json或form表单,对应JMeter中的取样器的参数设置;
  • HTTP Header:下拉选择对应的请求头,请求头配置在HTTP Header中;如果没有请求头,需要提前设置好;
  • Assertion:断言,可选类型为Contain(包含)、Equal(相等)或Match(匹配),对应JMeter中的响应断言;
  • Post Extractor:后置处理器,用于提取响应值中的数据,仅支持JSON提取器和正则表达式提取器;
  • contentEncoding:内容编码格式,可选None或UTF-8,对应JMeter中的取样器中的“内容编码”;

  以上设置和在JMeter中的取样器中设置一样,也可以引用变量,后置处理器也可以设置变量。

添加请求头

  在左侧点击 HTTP Header,可以查看所有的请求头;
在这里插入图片描述
  在设置请求头时,只需要把字段和值填入即可,这里也可以引用变量,引用格式和JMeter一样。
在这里插入图片描述
  以上,就完成了在这个工具上手动编写压测脚本。如果已有本地的已经调试好的JMeter脚本,且是按照上面说的结构,可以在 Test Plan 页面直接点击 Import Plan 按钮导入进系统中。导入后会对文件进行解析,可能会有少许修改,可以在页面手动核对和修改。

Upload JMeter

  考虑到有些性能测试场景的压测脚本很复杂,例如有BeanShell脚本、for/if等控制语句,但仍想使用压测工具赋予的压测能力,可以把本地调试通过的JMeter脚本,连同需要使用的外部文件,打包成zip压缩包,然后在 Upload JMeter 页面上传该压缩包,上传成功后就可以使用工具赋予的压测能力了。

  这里说一下这个工具对上传的压缩包是怎么处理的:
  1、压缩包上传后,首先使用zip命令解压,故只支持zip格式压缩;
  2、解压后,直接在解压的文件夹中寻找jmx格式的JMeter脚本,压缩包里必须有且仅有一个jmx格式的文件;由于是直接在解压的文件中寻找jmx文件,故压缩文件时,选择需要压缩的文件,然后压缩,而不是选择文件夹进行压缩;
  3、经过一系列校验后,压缩包会被上传到文件系统;
  4、生成一条记录,然后可以在页面修改压测参数,和 Test Plan 一样,如下:
在这里插入图片描述
  当需要压测的时候,会对JMeter文件进行修改,如下:
  1、从文件系统中下载文件,并解压;
  2、如果运行类型设置为指定TPS运行,则会往JMeter脚本中添加一个吞吐量控制器;如果运行类型设置为指定线程数运行,则会修改JMeter脚本中的 Thread Group 的参数;
  3、把修改后的jmx文件和其他依赖的文件一起打包,然后开始压测;

Test Task

  在左侧点击 Test Task 可以查看所有的测试任务,所有待执行、执行中、已停止的测试记录都会显示在这里,只有测试完成后,才会显示Sample、TPS、RT、Error等数据。
在这里插入图片描述
  在Actions列,可以下载每个任务执行的JMeter文件,如果压测出现问题,可以下载文件看看是哪里出现问题了。

查看压测详情

  在压测执行时或压测结束后,可以查看压测详情。
  当开始执行压测后,首先会生成压测所需要的文件,然后传给施压机,施压机会执行压测文件。此时页面会自动跳转到查看压测详情页面,由于压测初始化和产生压测结果需要时间,故需要等待一会儿才会在页面看到数据。
在这里插入图片描述
在压测详情页面可以的操作(页面右上角):

  • Stop:会立即停止压测;
  • Change TPS:统一调整所有施压机的TPS;
  • Download File:下载该任务执行的JMeter文件;

每个施压机可以的操作:

  • View:查看单个施压机的压测数据;
  • Start:启动该施压机开始压测,施压机启动需要一点时间,当启动后,就可以调整该施压机的TPS;
  • Stop:停止该施压机的压测,其他施压机不停;
  • Download logs:下载该施压机的JMeter执行的日志;
  • Change TPS:调整单个施压机的TPS;

欢迎大家使用,如有问题,请在 GitHub 提出 ~

写在最后:
  由于本人只有一台服务器,未进行大规模集群验证和大规模分布式、全链路压测验证,仅验证集群功能和分布式压测功能。如使用时出现问题,欢迎在 GitHub 提出,欢迎指教 ~

这篇关于性能测试平台 - 集分布式压测、服务器资源监控、远程连接Linux于一体的平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听