如何使用 Java 代理插件在不更改应用程序代码的情况下捕获自定义指标

2023年 7月 14日 22.7k 0

作者:Jack Shirazi

Elastic APM Java 代理会自动跟踪许多指标,包括通过 Micrometer 或 OpenTelemetry Metrics API 生成的指标。 因此,如果你的应用程序(或其包含的库)已公开来自这些 API 之一的指标,则安装 Elastic APM Java 代理是捕获它们所需的唯一步骤。 你将能够可视化和配置阈值、警报和异常检测 -- 以及你想要将它们用于任何其他用途!

下一个最简单的选项是直接从代码生成自定义指标(例如,通过使用 OpenTelemetry Metrics API 直接将代码添加到应用程序中)。 该方法的主要缺点是它需要修改应用程序,因此如果你不能或不想这样做,你可以通过插件向 Elastic APM Java 代理添加检测来轻松生成所需的自定义指标。

本文讨论的情况是,你正在监视的应用程序没有发出你想要的自定义指标,并且你无法直接更改代码或配置以使其这样做。 相反,你可以使用插件通过 Elastic APM Java 代理自动检测应用程序,这将使应用程序发出你想要的自定义指标。

使用 Elastic Kibana Lens 分析各种措施的 APM telemery

插件基础知识

“使用 Java 代理插件创建你自己的检测” 一 文详细介绍了 Elastic APM Java 代理的基础知识以及如何轻松插入检测。 从插件生成指标只是另一种类型的检测,引用的文章提供了详细的分步说明以及如何使用自定义检测创建插件的工作示例。

对于本文,我假设你了解如何根据上一篇文章以及我们的插件示例存储库中的示例应用程序(一个简单的网络服务器 ExampleBasicHttpServer)创建具有自定义检测的插件。

自定义指标

对于我们的示例应用程序,它是一个 HTTP 服务器 (ExampleBasicHttpServer),我们希望添加一个自定义指标 “page_views”,该指标在每次 ExampleBasicHttpServer 应用程序处理任何请求时都会递增。 这意味着我们将添加的检测将由 “使用 Java 代理插件创建您自己的检测” 中使用的相同的 ExampleBasicHttpServer.handleRequest() 方法触发。

使用 Elastic APM 对 page_views 指标进行 15 分钟的线路可视化

使用插件/OpenTelemetry API

本质上,与该文章的唯一区别是,对于指标,我们将使用 OpenTelemetry metrics API,而不是 OpenTelemetry tracing API。

特别是对于指标,handleRequest() 方法的建议方法是以下代码:



1.  if (pageViewCounter == null) {
2.      pageViewCounter = GlobalOpenTelemetry
3.          .getMeter("ExampleHttpServer")
4.          .counterBuilder("page_views")
5.          .setDescription("Page view count")
6.          .build();
7.  }
8.  pageViewCounter.add(1);


也就是说,在第一次需要时延迟创建计量器,然后在每次调用 ExampleBasicHttpServer.handleRequest() 方法时增加 page view 计数器。

其他一切 -- 设置检测、查找检测方法、构建插件 -- 与文章 “使用 Java 代理插件创建你自己的检测” 中的相同。

完整的指标示例在插件示例存储库中实现,实际的完整指标检测实现是 ExampleMetricsInstrumentation。

使用 Elastic APM 对 page_views 指标进行 15 分钟条形图可视化

试试看!

就是这样! 要使用插件运行代理,只需按照 “使用 Java 代理插件创建你自己的检测” 中所述构建并包含 jar,并将其包含在由 plugins_dir 配置选项指定的目录中。 插件示例存储库提供了经过全面测试的实现 -- 只需克隆它并 mvn install 即可查看它的工作情况。

开始使用 Elastic APM 的最佳位置是在云中。 立即开始免费试用 Elastic Cloud!

原文:How to capture custom metrics without app code changes using the Java Agent Plugin | Elastic Blog

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论