如何在 Apache JMeter 中集成 Elastic APM

本文涉及的产品
应用实时监控服务ARMS - 应用监控,每月50GB免费额度
性能测试 PTS,5000VUM额度
简介: 如何在 Apache JMeter 中集成 Elastic APM

Elastic APM 在观察测试环境方面的优势

       我第一次使用 Elastic Application Performance Monitoring (Elastic APM) 解决方案时,正好赶上 2019 年我负责性能测试的项目基于微服务开发的项目。

       当时(2019 年)发布了 Elastic APM 的第一个版本。

       我被 Java 代理的简单易安装、Java 代理支持的众多协议(参见 Elastic 支持的技术)所吸引,包括 JMeter 和其他语言(Go、.NET、Node.js、PHP、Python、Ruby)中使用的 Apache HttpClient,以及 Kibana 中用于 APM 的仪表板的质量。我发现 Kibana APM 仪表板中显示的信息是相关的,而且不会太冗长。Java 代理监视很简单,但显示有关计算机操作系统和 JVM 的基本信息。该工具主要功能的开源方面和免费解决方案也是决定性的。

我概括了 Elastic APM 解决方案在所有项目的性能环境中的使用。借助 Elastic APM,我了解了 Web 服务之间的不同调用和交换、执行的 SQL 查询、按 JMS 文件交换消息以及监控的时间线。我还可以快速访问 Java 应用程序中抛出的错误或异常。

为什么要在 Apache JMeter 中集成 Elastic APM

通过将 Java APM 代理添加到 Web 应用程序,我们可以在 Kibana 仪表板中找到称为时间轴的服务。但是,我们主要停留在 REST API 调用级别,因为我们没有页面的概念。

例如,page 将进行以下 API 调用:PAGE01

/rest/service1
/rest/service2
/rest/service3

在另一页上,将进行以下调用:PAGE02

/rest/service2
/rest/service4
/rest/service5
/rest/service6

第三页 ,将进行以下调用:PAGE03

/rest/service1
/rest/service2
/rest/service4

在此示例中,在 3 个不同的页面和 2 个页面中调用。service2service4

如果我们在 Kibana 仪表板中查找 ,我们将找到对应于 3 个页面的 3 个调用的调用的并集,但我们没有页面的概念。service2

我们无法回答“在此页面中,不同 REST 调用中的时间细分是多少”,因为对于应用程序的用户来说,页面响应时间的概念很重要。

jmeter-elastic-apm 工具的目标是在事务控制器的 JMeter 中添加现有页面的概念。在 JMeter 中,首先创建一个 APM 事务,然后使用 Elastic 代理将此事务标识符 () 传播到对 Web 服务的 HTTP REST 请求,因为 APM 代理可以识别 Apache HttpClient 库并对其进行检测。traceparent

在 HTTP 请求中,APM 代理会将 APM 事务的标识符添加到 HTTP 请求的标头中。添加的标头是 和 。traceparentelastic-apm-traceparent

image.png

image.png

我们从 JMeter(事务控制器)中的页面概念开始,转到 Tomcat 中托管的 Web 应用程序 (gestdoc) 的 HTTP 调用。

image.png

对于由多 Web 服务组成的应用程序,我们将在时间轴中看到在 HTTP(s) 或 JMS 中调用的不同 Web 服务以及在每个 Web 服务中花费的时间。

这是一个使用 Apache JMeter 和 Elastic APM 代理进行性能测试的技术架构示例,用于测试托管在 Apache Tomcat 中的 Web 应用程序。

image.png

jmeter-elastic-apm 工具的工作原理

jmeter-elastic-apm 在 JMeter 事务控制器之前添加 Groovy 代码,以便在页面之前创建 APM 事务。

在 JMeter Transaction Controller 中,我们找到了对服务进行 REST HTTP(s) 调用的 HTTP 采样器。Elastic APM 代理会自动添加一个包含 APM 事务标识符的新标头,因为它可以识别 HTTP 采样器的 Apache HttpClient。traceparent

Groovy 代码终止 APM 事务以指示页面结束。

jmeter-elastic-apm 工具在 JMeter 事务控制器之前和之后自动添加 Groovy 代码。

jmeter-elastic-apm 工具在 GitHub 上是开源的(请参阅本文“结论”部分中的链接)。

这个 JMeter 脚本很简单,在 3 个 JMeter 事务控制器中只有 3 个页面。

image.png

启动 jmeter-elastic-apm 操作 ADD 工具后,JMeter 事务控制器被 Groovy 代码包围,以便在 JMeter 事务控制器之前创建 APM 事务,并在 JMeter 事务控制器之后关闭 APM 事务。

image.png

在“groovy begin transaction apm”采样器中,Groovy 代码调用 Elastic APM API(简化版):

1
Transaction transaction = ElasticApm.startTransaction();
2
Scope scope = transaction.activate();
3
transaction.setName(transactionName); // contains JMeter Transa

ction Controller Name

在 “groovy end transaction apm” 采样器中,groovy 代码调用 ElasticApm API(简化版):

1
transaction.end();

使用 Elastic APM 代理和 APM 库配置 Apache JMeter

使用 Elastic APM 代理和 Elastic APM API 库启动 Apache JMeter

声明 Elastic APM 代理 URL以查找 APM 代理:

将 ELASTIC APM 代理添加到文件系统中的某个位置(可能在文件系统中,但不是必需的)。<JMETER_HOME>\lib

在 中,修改 或 。<JMETER_HOME>\binjmeter.batsetenv.bat

添加 Elastic APM 配置,如下所示:

1
set APM_SERVICE_NAME=yourServiceName
2
set APM_ENVIRONMENT=yourEnvironment
3
set APM_SERVER_URL=http://apm_host:8200
4
5
set JVM_ARGS=-javaagent:<PATH_TO_AGENT_APM_JAR>\elastic-apm-agent-<version>.jar -Delastic.apm.service_name=%APM_SERVICE_NAME% -Delastic.apm.environment=%APM_ENVIRONMENT% -Delastic.apm.server_urls=%APM_SERVER_URL%
6

2. 添加 Elastic APM 库:

将 Elastic APM API 库添加到 中。 <JMETER_HOME>\lib\apm-agent-api-<version>.jar

该库由 JSR223 Groovy 代码使用。

使用此 URL 查找 APM 库。

关于在 JMeter 中添加 Elastic APM 的影响的建议

APM 代理将拦截和修改所有 HTTP 采样器调用,这些信息将存储在 Elasticsearch 中。

最好是自愿禁用静态元素(图像、CSS、JavaScript、字体等)的 HTTP 请求,这些元素可以生成大量请求,但在分析时间线时不是很有用。

在重负载测试的情况下,建议将参数更改为仅接受部分调用,以免 APM Server 和 Elasticsearch 饱和。elastic.apm.transaction_sample_rate

此参数可以在 JSR223 采样器中声明,也可以在线程组中使用简短的 Groovy 代码声明。

Groovy 代码只记录了 50% 的样本:elastic.apm.transaction_sample_rate<JMETER_HOME>\jmeter.batsetenv.batsetUp

1
import co.elastic.apm.api.ElasticApm;
2
// update elastic.apm.transaction_sample_rate
3
ElasticApm.setConfig("transaction_sample_rate","0.5");

   借助 jmeter-elastic-apm 工具,您可以轻松地将 Elastic APM 解决方案集成到 JMeter 中,并在 Kibana APM 仪表板的时间线中添加页面的概念。

Elastic APM + Apache JMeter 是一个出色的解决方案,它通过简单的监控、质量仪表板、不同分布式应用程序层中的时间细分时间线以及 Web 服务中的异常显示,帮助您了解环境在性能测试期间的工作方式。

随着时间的推移,Elastic APM 解决方案只会变得更好。当然,我强烈推荐在性能测试环境中使用它,但在开发人员使用的开发环境或功能或技术测试人员使用的集成环境中,它也具有许多优势。


相关实践学习
通过云拨测对指定服务器进行Ping/DNS监测
本实验将通过云拨测对指定服务器进行Ping/DNS监测,评估网站服务质量和用户体验。
目录
相关文章
|
4月前
|
安全 Java 测试技术
Windows电脑安装Apache JMeter的详细教程
本文介绍了在Windows上安装Apache JMeter的步骤。首先,需确保安装Java JDK并配置环境变量。然后,从JMeter官网下载ZIP文件,解压至指定目录,并同样配置JMeter的环境变量。验证安装成功后,可通过命令行以GUI或非GUI模式启动JMeter,进行性能测试。
109 0
|
2月前
|
监控 前端开发 JavaScript
ARMS集成监控代码
【8月更文挑战第24天】
54 6
|
3月前
|
关系型数据库 API Apache
Flink CDC:基于 Apache Flink 的流式数据集成框架
本文整理自阿里云 Flink SQL 团队研发工程师于喜千(yux)在 SECon 全球软件工程技术大会中数据集成专场沙龙的分享。
17907 11
Flink CDC:基于 Apache Flink 的流式数据集成框架
|
2月前
|
消息中间件 Kafka 数据处理
实时数据流处理:Dask Streams 与 Apache Kafka 集成
【8月更文第29天】在现代数据处理领域,实时数据流处理已经成为不可或缺的一部分。随着物联网设备、社交媒体和其他实时数据源的普及,处理这些高吞吐量的数据流成为了一项挑战。Apache Kafka 作为一种高吞吐量的消息队列服务,被广泛应用于实时数据流处理场景中。Dask Streams 是 Dask 库的一个子模块,它为 Python 开发者提供了一个易于使用的实时数据流处理框架。本文将介绍如何将 Dask Streams 与 Apache Kafka 结合使用,以实现高效的数据流处理。
42 0
|
3月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
3月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南
|
4月前
|
监控 Java API
如何在Spring Boot中集成Elastic APM进行应用性能监控
如何在Spring Boot中集成Elastic APM进行应用性能监控
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南
|
4月前
|
测试技术 API Apache
使用 Apache JMeter 吞吐量控制器的详细指南
Apache JMeter是开源的负载和性能测试工具,其吞吐量控制器用于控制采样器执行频率以达到特定吞吐量。要使用它,首先启动JMeter,创建测试计划,添加线程组和逻辑控制器。配置吞吐量控制器的参数,如总执行次数或百分比,并添加HTTP请求采样器。例如,创建两个控制器,一个设定执行次数,另一个设定执行百分比。通过监听器如汇总报告和查看结果树来分析测试结果,从而模拟不同负载并识别性能瓶颈。吞吐量控制器是实现复杂测试场景的关键组件。
106 0
|
4月前
|
测试技术 Apache 数据安全/隐私保护
使用 Apache JMeter 事务控制器的详细指南
Apache JMeter 的事务控制器用于组合多个请求成一个事务,以便衡量整体性能。创建测试计划涉及添加线程组、事务控制器和采样器,配置参数如线程数、Ramp-Up时间和循环次数。在事务控制器内,添加HTTP请求模拟用户登录和访问主页等操作。通过勾选选项,包括计时器和处理器时间。添加监听器如汇总报告和查看结果树来分析结果,从而评估系统性能瓶颈。事务控制器对于测试复杂业务流程的性能非常有用。
95 0

推荐镜像

更多