与 SpringBoot (3.0.3) 应用程序一起,我们使用 Application Insights (Azure) 进行监控。
目前我们正在尝试使用 GraalVM 本地编译应用程序。这工作得很好,给我们带来了很多好处(启动时间和内存消耗)。唯一还不能工作的是作为 Java 代理启动的 Application Insights。我几乎没有找到关于整个主题的有用信息,并问自己我们是否正在尝试做一些目前根本不支持的事情。
这是我们迄今为止尝试过的:
nativeCompile
Gradle 任务的参数指定额外的 jvmArgs(如此处所述:https://github.com/oracle/graal/issues/1065)。尽管构建工作正常,但它只是不包含(或启动?)应用程序启动时的代理。
是否有解决方案可以在本机编译版本中添加 javaagents,或者是否有任何替代方案可以将监控数据从 SpringBoot 应用程序发送到 ApplicationInsights?
我在 GraalVM 文档中找不到有关将运行时代理附加到本机应用程序的本机映像的任何内容。这表明不支持。
然后我搜索“application Insights graalvm native image”并在 Application Insights 问题跟踪器上找到了这个:
https://github.com/microsoft/ApplicationInsights-Java/issues/1266
我们目前正在使用 OpenTracing SPI 的自定义实现,将跟踪数据从 Quarkus 应用程序发送到 Application Insights(该实现基于 Application Insights SDK 2.6.1)。我们的计划是在 Quarkus 支持后立即转向 OpenTelemetry。
由于 Quarkus 还支持本机图像生成(使用 GraalVM)使用 Java 代理进行自动检测是不可能的并且需要与 Quarkus 进行“深度集成”。我想知道是否会关注这样的用例,以及是否会提供适合该用例的构建(即 Maven 工件)。我想会有一个只提供导出器的构建。
突出显示的短语与我从(缺乏)文档中推断出的内容一致。 GraalVM 问题的回复进一步证实了这一点:https://github.com/oracle/graal/issues/5912
你说:
使用 OpenTelemetry 库 [...]。对我来说,它似乎仍然使用一种 javaagent jar 才能正常工作。
另一种方法是在 SpringBoot 应用程序中包含 OpenTelemetry JAR 并以编程方式启用它,而不是通过 javaagent。它将由 GraalVM 本机映像生成器转换为本机代码。
根据此 Microsoft 文档页面中的指定,您可以使用此项目来监控 Azure 上的 Spring Boot 本机映像应用程序。