让我们将 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 的 Observability API 的强大功能

Micrometer 的 Observability 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 允许开发人员选择他们偏好的可观测性技术栈,而无需更改检测。

利用 OpenTelemetry 协议

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,确保您的指标(已有大约两年)和跟踪数据(通过一个新发布的 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 与 OpenTelemetry (OTLP) 所需的 Maven 设置。

Nodes

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

Logs

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

Traces

跟踪视图 - 通过 OTel Brave Encoder(也通过 Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave bridge)接收到的 OTLP 格式的 span 数据

Metrics

通过 Spring Boot、Micrometer Observation、Micrometer Core、Micrometer OTLP push MeterRegistry 以及在 Prometheus 端启用了 OTLP write receiver 接收到的请求延迟

结论

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 社区所有即将到来的活动。

查看全部