使用 OpenTelemetry 观测您的 Spring Native Image 应用程序

博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。

OpenTelemetry Java 代理是一个方便且成熟的 Java 应用程序的检测方法。然而,截至今天,它无法与 GraalVM Native Images 一起使用

为了仍然为您提供简单无缝的 Spring Boot Native Image 应用程序的使用方式,OpenTelemetry Java 贡献者已改进了现有的 OpenTelemetry Spring Boot Starter,使其能够很好地与 Spring Boot Native Image 应用程序配合使用。继续阅读以了解更多信息!

最近几个月的发展历程

OpenTelemetry Spring Boot Starter 允许在不进行字节码插桩的情况下将 OpenTelemetry 添加到您的应用程序中。OpenTelemetry Java 贡献者利用这一点对 Spring Boot Native Images 进行了插桩。通过将 Starter 依赖添加到您的项目中,您将受益于日志(最近几个月添加)、span 和指标的 OTLP 导出,以及开箱即用的 Spring HTTP 框架的自动插桩(最近几个月更新以使其与 Spring Boot 3 配合使用)。

<dependencies>
  <dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
    <version>1.32.0-alpha</version>
  </dependency>
</dependencies>

为了获得更深入的可见性,Starter 可以与插桩库结合使用。为此,OpenTelemetry Java 贡献者改进了 JDBC(数据库)库和日志插桩库。例如,对于 Logback 日志库,他们添加了 GraalVM 配置,以使该库在原生模式下工作1

此外,他们还致力于减少配置以使用 Starter 设置日志和数据库插桩。例如,如果您的应用程序未声明 DataSource bean,您只需在 application.properties 文件中添加两个属性即可启用数据库。

spring.datasource.url=jdbc:otel:h2:mem:db
spring.datasource.driver-class-name=io.opentelemetry.instrumentation.jdbc.OpenTelemetryDriver

要了解更多信息,请参阅Spring Boot Starter。您可以使用opentelemetry-java-examples/spring-native来运行 Spring Boot Native Image 应用程序,并查看生成的日志以及 HTTP 和数据库遥测数据。

最后,OpenTelemetry Java 贡献者在 OpenTelemetry Java 项目中添加了 GraalVM Native 自动测试,以检测与原生模式执行相关的回归。

下一步?

OpenTelemetry Java 贡献者预计将能够启用自动日志和数据库插桩配置。

如果您尝试使用 OpenTelemetry Spring Boot Starter,请通过GitHub discussions#otel-java CNCF Slack频道分享您的想法和经验。


  1. Spring Boot Native Image 应用程序不支持 Log4j2 日志库。 ↩︎

最后修改日期 2024 年 10 月 17 日:重构 java instrumentation (#5276) (2394fa1f)