如何透过 JMeter 产生流量并透过 CloudWatch 监控流量

如何透过 JMeter 产生流量并透过 CloudWatch 监控流量

我们先前的例子都是透过 CPU 使用率来决定扩展策略,但是流量一直都是比较直觉的判断方式,因为流量是用户使用应用程序次数的一个特征,今天要做的就是如何来产生我们想要的流量,以及透过CloudWatch来观察。

Jmeter

Jmeter 是 Apache 开源项目,使用Java开发的测试工具,主要用来做功能测试和性能测试(压力测试/负载测试),我们将会用它来进行流量的产生。

安装 Java SE, https://www.java.com/download/manual.jsp

千万要记得安装的目录,如果下一个动作没成功的话,可以手动设定环境变量,把Java的路径直接加到环境变量中
PATH= …;C:\Program Files\Java\jdk-14.0.2\bin
JAVA_HOME = C:\Program Files\Java\jdk-14.0.2

透过控制台直接设定 Java 环境
图 1. 透过控制台直接设定 Java 环境

安装 Jmeter, http://jmeter.apache.org/download_jmeter.cgi

下载压缩文件,解压缩完直接执行 ./bin/jmeter.bat ,Jmeter 是支持中文的, 启动 Jmeter 后, 点击 Options -> Choose Language 来选择语言。

Apache Jmeter官方网站下载压缩文件
图 2. Apache Jmeter 官方网站下载压缩文件

Jmeter 改变语言设定
图 3. Jmeter 改变语言设定

设定 Jmeter

我们的目标是在特定的时间产生指定的流量,比方说,在 60 秒内产生 1,000 次的网页读取
测试目标: ithomealb-1480018609.ap-southeast-1.elb.amazonaws.com (由 AWS ELB 所提供)
模拟使用者: 10 个使用者
请求频率: 1,000/per minute

步骤 1. 新建 Thread Group
Jmeter 的所有任务都由线程来进行,所有任务都必须在线程组下面创建,在 AWS Test Plan 按左键。

新建 Thread Group
图 4. 新建 Thread Group

线程数量 Number of Threads: 一个用户占一个线程, 10 个线程就是仿真 10 个用户
准备时长 Ramp-Up Period(in seconds): 设置线程需要多长时间全部启动。如果线程数为 10 ,准备时长为 10 ,那么需要1秒钟启动 1 个线程。
Loop Count: 每个线程发送请求的次数。如果线程数为 10 ,循环次数为 10 ,那么每个线程发送10次请求。总请求数为 10*10 = 100 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。

设定 Thread Group
图 5. 设定 Thread Group

步骤 2. 新增 HTTP Request
我们是测试网页所以要建立 HTTP Request,在 线程群组1000 按左键,新增 > 取样 > HTTP要求

新增 HTTP Request
图 6. 新增 HTTP Request

协定: HTTP
主机: ithomealb-1480018609.ap-southeast-1.elb.amazonaws.com

设定 HTTP Request
图 7. 设定 HTTP Request

步骤 3. 新增定时器
设定在固定时间内发出特定数量的请求,在 线程群组1000 按左键,新增 > 定时器 > 固定时隔

新增定时器
图 8. 新增定时器

固定处理量定时器 Constant Throughput Timer:通过计算使总处理量(以每分钟计)尽可能接近给定的数字。当然,如果服务器不能处理它,或者如果其他定时器或耗时的测试原件阻止它,那么处理量将更低。作用在于控制吞吐量,要注意把定时器放在线程群组,并在请求的上面

目标处理量 Target throughput(in samples per minute): 1000
Calculate Throughput based on : all active threads in current thread group

计算处理量的其他设定:

  • this thread only: 设置每个线程的处理量。处理量总和为 = 线程数 * 该值。
  • all active threads in current thread group:处理量被分摊到当前线程组所有的活动线程上。每个线程将根据上次运行时间延迟。
  • all active threads:处理量被分配到所有线程组的所有活动线程的总处理量。每个线程将根据上次运行时间延迟。在这种情况下,每个线程组需要一个具有相同设置的固定处理量定时器。
  • all active threads in current thread group (shared):同上,但是每个线程是根据组中的线程的上一次运行时间来延迟。相当于线程组组内排队。
  • all active threads (shared):同上,但每个线程是根据线程的上次运行时间来延迟。相当于让所有线程组整体排队。

设定定时器
图 9. 设定定时器

步骤 4. 新增测试结果 Summary Report
设定在固定时间内发出特定数量的请求,在 AWS HTTP Request 按左键,新增 > 接听 > Summary Report

新增 Summary Report
图 10. 新增 Summary Report

可以直接按下开始后就会开始记录。

观察  Summary Report
图 11. 观察 Summary Report

设定 CloudWatch 仪表板

按下上方的服务按钮,选择 CloudWatch ,进入 CloudWatch 控制台后,按下右方功能选单仪表板,按下建立仪表板后,输入要观察的衡量指标值 RequestCount

仪表板名称: JmeterRequestCount

建立 CloudWatch 仪表板画面
图 12. 建立 CloudWatch 仪表板画面

设定 CloudWatch 仪表板中 Widget 类型
图 13. 设定 CloudWatch 仪表板中 Widget 类型

Widget 的数据源选择 指标值( Metrics )

设定 Widget 的数据源
图 14. 设定 Widget 的数据源

指标值设定为 Singapore > 全部 > ApplicationELB > 每个 AppELB 指标 > RequestCount ,要注意要确定看到上面的图型有数据才能确定已经正确找到指标值,因为有时候会有很多个 AppELB 实体,所以需要去找一下ALB ID确认一下

设定 RequestCount 指标值
图 15. 设定 RequestCount 指标值

因为需要知道 1 分钟内有多少个请求,所以需要把_统计数据_从平均数改成样本数期间 5 分钟改成 1 分钟。

设定图形化指针
图 16. 设定图形化指针

建立 JmeterRequestCount 仪表板的画面如下, Jmeter 还一直都有在发出请求

JmeterRequestCount 仪表板
图 17. JmeterRequestCount 仪表板

References

  • 《jmeter:菜鸟入门到进阶》系列, https://www.cnblogs.com/imyalost/p/7062784.html
  • Jmeter教程 简单的压力测试, https://www.cnblogs.com/TankXiao/p/4059378.html
  • Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程),https://www.cnblogs.com/du-hong/p/13150952.html
    ogs.com/TankXiao/p/4059378.html
  • Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程),https://www.cnblogs.com/du-hong/p/13150952.html