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

ab100ffa644ab12865d044bedcfd661a.png

3ec27c1f0a223fbe53c9651cf4c18255.png

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

76e5d485ba9fd87970135f87383604a1.png

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

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

61eb05b65b3bcdc92fb22d044cb4b430.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 个页面。

0132ce192f1bea677960440604ae0d46.png

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

1aedb027bf431869107faa0332d9f016.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

  1. 声明 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 解决方案只会变得更好。当然,我强烈推荐在性能测试环境中使用它,但在开发人员使用的开发环境或功能或技术测试人员使用的集成环境中,它也具有许多优势。

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐