Elastic APM Java Agent 自动跟踪许多指标,包括通过 Micrometer 或 OpenTelemetry Metrics API 生成的指标。因此,如果您的应用程序(或它包含的库)已经通过其中一个 API 公开了指标,那么只需安装 Elastic APM Java Agent 即可捕获它们。您将能够可视化和配置阈值、警报和异常检测 — 以及您想要使用它们的任何其他内容!
下一个最简单的选项是直接从您的代码生成自定义指标(例如,通过将使用 OpenTelemetry Metrics API 的代码直接添加到应用程序中)。这种方法的主要缺点是它需要修改应用程序,因此如果您不能或不想这样做,您可以通过使用插件向 Elastic APM Java Agent 添加检测,轻松生成所需的自定义指标。
本文讨论的情况是,您监控的应用程序没有发出您想要的自定义指标,并且您无法直接更改代码或配置来实现这一点。相反,您可以使用插件通过 Elastic APM Java Agent 自动检测应用程序,然后使应用程序发出您想要的自定义指标。
插件基础知识
Elastic APM Java Agent 的基础知识以及如何轻松插入检测,在文章“使用 Java Agent 插件创建您自己的检测”中有详细介绍。从插件生成指标只是另一种类型的检测,所引用的文章提供了详细的分步说明,以及如何使用自定义检测创建插件的示例。
对于本文,我假设您了解如何基于之前文章的内容以及我们的 插件示例存储库中的示例应用程序(一个简单的 Web 服务器 ExampleBasicHttpServer)创建具有自定义检测的插件。
自定义指标
对于我们的示例应用程序,它是一个 HTTP 服务器 (ExampleBasicHttpServer),我们想添加一个自定义指标 'page_views',每次 ExampleBasicHttpServer 应用程序处理任何请求时,该指标都会递增。这意味着我们添加的检测将由“使用 Java Agent 插件创建您自己的检测”中使用的相同 ExampleBasicHttpServer.handleRequest() 方法触发。
使用插件/OpenTelemetry API
本质上,与那篇文章的唯一区别在于,对于指标,我们将使用 OpenTelemetry指标API,而不是 OpenTelemetry跟踪API。
特别是对于指标,handleRequest() 方法的 advice 方法是以下代码
if (pageViewCounter == null) {
pageViewCounter = GlobalOpenTelemetry
.getMeter("ExampleHttpServer")
.counterBuilder("page_views")
.setDescription("Page view count")
.build();
}
pageViewCounter.add(1);
也就是说,在首次需要时延迟创建 meter,然后在每次调用 ExampleBasicHttpServer.handleRequest() 方法时,递增页面浏览量计数器。
其他所有内容(设置检测、查找要检测的方法、构建插件)都与文章“
使用 Java Agent 插件创建您自己的检测”相同。完整的指标示例在 插件示例存储库中实现,而实际的完整指标检测实现是 ExampleMetricsInstrumentation。
尝试一下!
就是这样!要使用插件运行代理,只需构建并包含 jar,如“使用 Java Agent 插件创建您自己的检测”中所述,在 plugins_dir 配置选项指定的目录中。 插件示例存储库提供了完整的测试实现 — 只需克隆它并运行 mvn install 即可看到它的工作方式。
开始使用 Elastic APM 的最佳位置是在云中。立即开始您的 Elastic Cloud 免费试用!
本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。任何当前不可用的特性或功能可能不会按时交付,甚至可能根本不交付。