让我们将OpenTelemetry与Spring一起使用

工程 | Marcin Grzejszczak | 2024年10月28日 | ...

引言

在可观测性这个动态领域中,OpenTelemetry 是从现已弃用的 OpenCensus 和 OpenTracing 项目中涌现出的一套新工具。对于 Spring Framework、Spring Boot、Spring Data 和 Spring Cloud 的可观测性而言,像 Micrometer 这样成熟的解决方案(事实上的 Java 可观测性标准)正被用于对其各种模块进行插桩。OpenTelemetry 项目由许多组件组成。我们认为最引人注目的是 OpenTelemetry Protocol (OTLP),它允许开发人员利用一致的遥测格式为任何支持 OTLP 的后端提供强大的功能。让我们探讨 Spring Boot 如何与这些工具无缝集成,以提供卓越的可观测性。

Micrometer 观测 API 的强大功能

Micrometer 的观测 API 是 Spring Boot 可观测性策略的基石。它提供了一个全面的可观测性解决方案,与各种追踪和监控系统无缝集成。以下是它成为 Spring Boot 应用首选的原因:

  • 稳定性与成熟度:Micrometer 是经过验证的解决方案,为可观测性插桩提供了稳定成熟的平台。
  • 广泛兼容性:除了许多协议(AppOptics、Azure Monitor、Netflix Atlas、AWS CloudWatch、Datadog、Dynatrace、Elastic、Ganglia、Graphite、Humio、Influx/Telegraf、JMX、KairosDB、New Relic、Prometheus、SignalFx、Google Stackdriver、StatsD、Wavefront 用于指标;B3、W3C 用于追踪上下文传播;Zipkin 用于 Span 传播),它还支持 OTLP 协议,确保与 OpenTelemetry 和其他兼容的可观测性工具的互操作性。
  • 多功能集成:Micrometer Observation 广泛应用于 Spring 和非 Spring 项目中,提供统一的可观测性 API,简化了收集数据的插桩和发布。
  • 简化 API:一次插桩,多重受益——插入追踪、指标、日志等。
  • 灵活选择:随着技术的变化,Micrometer 允许开发人员选择他们偏好的可观测性技术栈,而无需更改插桩。

利用 Open Telemetry 协议

OpenTelemetry Protocol (OTLP) 促进了不同可观测性工具之间的通信。通过利用 OTLP,Spring Boot 应用程序可以以标准化格式导出日志、指标和追踪数据,从而更容易与各种后端和可观测性平台集成。归根结底,协议才是最重要的!

OTLP 为何重要

  • 标准化:OTLP 提供了一种导出可观测性数据的一致方式,确保兼容性并降低集成复杂性。
  • 灵活性:使用 OTLP 允许开发人员选择最适合其需求的工具,而无需受限于特定的供应商或技术栈。
  • 面向未来:随着可观测性领域的不断发展,OTLP 使您的追踪数据能够跨不同系统保持可访问性和可用性。

介绍 Micrometer

Spring 的核心始终是关于抽象和允许开发人员选择。Micrometer 也是如此,它于 2016 年创立,并声明“它就像 SLF4J,但用于指标”。Micrometer 允许您将代码从实际的指标后端抽象出来。对于 OTLP,Micrometer 从 2022 年开始通过专门的 OtlpMeterRegistry 支持它。

我们希望为追踪引入相同的抽象,这就是为什么我们将非常成熟的 Spring Cloud Sleuth 项目(成立于 2014 年)移植到 Micrometer Tracing,使其与 Spring 无关。感谢 Micrometer Tracing,您可以选择要使用的追踪器库(追踪器控制 span 的生命周期,是分布式追踪的基础)。Micrometer Tracing 支持两个追踪库:OpenZipkin Brave (Brave) 和 OpenTelemetry。

我们相信成熟、经过生产测试的解决方案,这就是为什么我们认为 Micrometer 和 Brave 是 Spring Boot 可观测性工具包中必不可少的工具。它们提供强大的可观测性功能,帮助开发人员跟踪和分析分布式系统中的请求。

Micrometer 和 Brave 与 Micrometer Observation 无缝协作,它们都支持 OTLP,确保您的指标(已存在约 2 年)和追踪数据(通过新发布的 zipkin-otel 项目)可以轻松导出和利用。

持续改进

Spring 团队对 Spring Framework 非常熟悉,因为我们每天都在使用它。我们也认真对待可观测性——这就是我们负责插桩的原因。拥有 Spring 专业知识并了解社区需求使我们能够构建出色的、可定制的开发人员体验。我们相信框架功能及其插桩方式是协同的:代码、文档和支持。

没有人是完美的——包括我们。我们确实知道我们可以不断改进当前的 OpenTelemetry 和 Spring 体验。Spring 团队目前正在努力使 OTLP 在指标/追踪/日志/语义约定方面成为一等公民。这意味着在需要时提供更好的自动配置、在库中提供更好的支持以及为开发人员减少移动部件。

Spring Boot 与 OpenTelemetry 示例

一图胜千言——让我们看看运行此处代码的结果。

<!-- Prerequisite for observability -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<!-- For Metrics -->
<!-- For OTLP -->
<dependency>
	<groupId>io.micrometer</groupId>
	<artifactId>micrometer-registry-otlp</artifactId>
</dependency>

<!-- Brave version -->
<!-- For Tracing -->
<dependency>
	<groupId>io.micrometer</groupId>
	<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!-- For Latency Visualization -->
<!-- For OTLP -->
<dependency>
	<groupId>io.zipkin.contrib.otel</groupId>
	<artifactId>encoder-brave</artifactId>
	<version>0.1.0</version>
</dependency>

<!-- For pushing logs out -->
<dependency>
	<groupId>com.github.loki4j</groupId>
	<artifactId>loki-logback-appender</artifactId>
	<version>1.5.2</version>
	<scope>runtime</scope>
</dependency>

通过 Micrometer Observation、Micrometer Core 和 Micrometer Tracing,使 Spring Boot 支持 Open Telemetry (OTLP) 所需的 Maven 设置。

Nodes

客户端命令行应用程序向服务器进行 HTTP 调用的节点图

Logs

通过 Spring Boot、Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave 桥接实现的日志关联

Traces

追踪视图——通过 OTel Brave Encoder(也通过 Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave 桥接)以 OTLP 格式接收的 Span 数据

Metrics

通过 Spring Boot、Micrometer Observation、Micrometer Core、Micrometer OTLP push MeterRegistry 以及 Prometheus 侧启用的 OTLP 写入接收器,获取传入请求的延迟

结论

Spring Boot 的可观测性方法

  • 库专业知识:维护代码的人员也是维护插桩的人员
  • 集成解决方案:通过 Micrometer 和 Brave,所有必要的工具都集成在 Spring Boot 生态系统中,提供了一个内聚且可靠的可观测性框架。
  • 协议很重要:通过 OTLP,可以在协议层面实现标准化,从而更容易与各种后端和可观测性平台集成。

Spring Boot 通过使用 OTLP、用于指标的 Micrometer、用于追踪的 Brave 以及作为通用抽象的 Micrometer Observation 来拥抱 OpenTelemetry 原则,这表明了对健壮可靠可观测性的承诺。通过利用这些工具,开发人员可以实现全面的可观测性。这种方法不仅简化了可观测性设置,还确保了生产环境的稳定和成熟框架。Spring Boot 是 OpenTelemetry 的忠实粉丝,这体现在它与这些强大的可观测性工具的无缝集成。

链接

获取 Spring 新闻通讯

通过 Spring 新闻通讯保持联系

订阅

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获得支持

Tanzu Spring 提供 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件,只需一份简单的订阅。

了解更多

即将举行的活动

查看 Spring 社区所有即将举行的活动。

查看所有