如何在 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监测,评估网站服务质量和用户体验。
目录
相关文章
|
存储 监控 Java
10分钟3个步骤集成使用SkyWalking
此时就非常推荐SkyWalking了,SkyWalking不仅仅是一款链路跟踪工具,还可以作为一个系统监控工具,还具有告警功能。使用简便、上手又快。真可谓快、准、狠。
10分钟3个步骤集成使用SkyWalking
|
SQL Java Apache
skywalking 搭建(apache-skywalking-apm-es7-7.0.0)
skywalking 搭建(apache-skywalking-apm-es7-7.0.0)
467 0
|
数据可视化 Java 物联网
Apache IoTDB开发之JMX 工具
Java VisualVM 是一个工具,它提供了一个可视化界面,用于在 Java 虚拟机 (JVM) 上运行时查看有关 Java 应用程序的详细信息,以及对这些应用程序进行故障排除和分析。
142 0
|
存储 SQL 缓存
详解 Apache SkyWalking OAP 的分布式计算
SkyWalking的OAP(Observability Analysis Platform,观测分析平台)是一个用于链路数据的分布式计算系统。 因为它巧妙的设计,使得在链路数据计算和聚合过程中,不需要考虑数据的一致性,也没有事务、分布式锁等概念。 在极端情况下,可能出现链路数据的丢失,但会最大限度保障OAP集群的可用性。咱们来看一下,它是如何设计的,为以后的系统设计和架构提供一些思路。
492 0
|
Rust Kubernetes JavaScript
【无服务器架构】Apache Openwhisk 概览
【无服务器架构】Apache Openwhisk 概览
|
消息中间件 监控 数据可视化
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
551 1
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
|
存储 消息中间件 监控
主流开源APM:Zipkin/Pinpoint/SkyWalking全面对比
这里重点从探针的性能、Collector的可扩展性、调用链路分析、完整的应用拓扑、对于科技人员使用友好程度(部署安装、埋点接入、使用管理)几个方面来进行对比。
|
存储 Prometheus 监控
APM 工具 SkyWalking 是什么
官方给 SkyWalking 的定义是一个分布式系统的应用程序性能监视工具,也是一个开源的可观测平台, 用于从服务和云原生基础设施收集、 分析、 聚合及可视化数据。
603 0
|
前端开发 调度 Apache
作业调度中心Apache Airflow二次开发初体验
作业调度中心Apache Airflow二次开发初体验
1654 1
作业调度中心Apache Airflow二次开发初体验
|
Kubernetes Go 网络安全
ECK安装elasticsearch,接入apm测试
1.以前都是用helm安装elasticsearch,最近发现elasticsearch推荐使用ECK在K8S上安装,那我们就来试试吧 2.我们会在已有的K8S上安装ECK,elasticsearch,kibana,apm,关闭ssl,loadbalancer暴露应用访问 3.测试golang接入apm
634 0
ECK安装elasticsearch,接入apm测试

推荐镜像

更多