如何透过 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
图 1. 透过控制台直接设定 Java 环境
安装 Jmeter, http://jmeter.apache.org/download_jmeter.cgi
下载压缩文件,解压缩完直接执行 ./bin/jmeter.bat ,Jmeter 是支持中文的, 启动 Jmeter 后, 点击 Options -> Choose Language 来选择语言。
图 2. Apache 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 按左键。
图 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 。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
图 5. 设定 Thread Group
步骤 2. 新增 HTTP Request
我们是测试网页所以要建立 HTTP Request,在 线程群组1000 按左键,新增 > 取样 > HTTP要求。
图 6. 新增 HTTP Request
协定: HTTP
主机: ithomealb-1480018609.ap-southeast-1.elb.amazonaws.com
图 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。
图 10. 新增 Summary Report
可以直接按下开始后就会开始记录。
图 11. 观察 Summary Report
设定 CloudWatch 仪表板
按下上方的服务按钮,选择 CloudWatch ,进入 CloudWatch 控制台后,按下右方功能选单仪表板,按下建立仪表板后,输入要观察的衡量指标值 RequestCount
仪表板名称: JmeterRequestCount
图 12. 建立 CloudWatch 仪表板画面
图 13. 设定 CloudWatch 仪表板中 Widget 类型
Widget 的数据源选择 指标值( Metrics )
图 14. 设定 Widget 的数据源
指标值设定为 Singapore > 全部 > ApplicationELB > 每个 AppELB 指标 > RequestCount ,要注意要确定看到上面的图型有数据才能确定已经正确找到指标值,因为有时候会有很多个 AppELB 实体,所以需要去找一下ALB ID确认一下
图 15. 设定 RequestCount 指标值
因为需要知道 1 分钟内有多少个请求,所以需要把_统计数据_从平均数改成样本数,期间 5 分钟改成 1 分钟。
图 16. 设定图形化指针
建立 JmeterRequestCount 仪表板的画面如下, Jmeter 还一直都有在发出请求
图 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