如何在 Apache JMeter 中集成 Elastic APM

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
性能测试 PTS,5000VUM额度
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 如何在 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监测,评估网站服务质量和用户体验。
目录
相关文章
|
3月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
97 5
|
3月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
76 1
|
3月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
78 3
|
6月前
|
监控 前端开发 JavaScript
ARMS集成监控代码
【8月更文挑战第24天】
116 6
|
7月前
|
关系型数据库 API Apache
Flink CDC:基于 Apache Flink 的流式数据集成框架
本文整理自阿里云 Flink SQL 团队研发工程师于喜千(yux)在 SECon 全球软件工程技术大会中数据集成专场沙龙的分享。
18557 11
Flink CDC:基于 Apache Flink 的流式数据集成框架
|
6月前
|
消息中间件 Kafka 数据处理
实时数据流处理:Dask Streams 与 Apache Kafka 集成
【8月更文第29天】在现代数据处理领域,实时数据流处理已经成为不可或缺的一部分。随着物联网设备、社交媒体和其他实时数据源的普及,处理这些高吞吐量的数据流成为了一项挑战。Apache Kafka 作为一种高吞吐量的消息队列服务,被广泛应用于实时数据流处理场景中。Dask Streams 是 Dask 库的一个子模块,它为 Python 开发者提供了一个易于使用的实时数据流处理框架。本文将介绍如何将 Dask Streams 与 Apache Kafka 结合使用,以实现高效的数据流处理。
120 0
|
7月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
|
7月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南
|
8月前
|
监控 Java API
如何在Spring Boot中集成Elastic APM进行应用性能监控
如何在Spring Boot中集成Elastic APM进行应用性能监控
|
8月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka集成的深度指南
Spring Boot与Apache Kafka集成的深度指南

热门文章

最新文章

推荐镜像

更多