使用 OpenTelemetry 与 Spring

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

简介

在可观测性的动态领域中,OpenTelemetry 是一套新工具,它起源于现已弃用的 OpenCensus 和 OpenTracing 项目。当涉及到 Spring Framework、Spring Boot、Spring Data 和 Spring Cloud 的可观测性时,像 Micrometer 这样的成熟解决方案(Java 可观测性的事实标准)正被用于为其各个模块提供检测功能。OpenTelemetry 项目包含许多组件。我们认为最引人注目的组件是 OpenTelemetry 协议 (OTLP),它允许开发人员利用一致的遥测格式的强大功能,适用于任何支持 OTLP 的后端。让我们探讨 Spring Boot 如何无缝集成这些工具以提供卓越的可观测性。

Micrometer 的 Observation API 的强大功能

Micrometer 的 Observation 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 用于跨度传播),它还支持 OTLP 协议,确保与 OpenTelemetry 和其他兼容的可观测性工具的互操作性。
  • 多功能集成:Micrometer Observation 广泛用于 Spring 和非 Spring 项目,提供了一个统一的可观测性 API,简化了检测和发布收集到的数据。
  • 简化的 API:检测一次,获得多重收益 - 插件跟踪、指标、日志等。
  • 灵活的选择:随着技术的改变,Micrometer 允许开发人员选择他们首选的可观测性技术栈,而无需更改检测。

利用 Open Telemetry 协议

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

为什么 OTLP 如此重要

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

介绍 Micrometer

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

我们希望为跟踪引入相同的抽象,因此我们将非常成熟的 Spring Cloud Sleuth 项目(成立于 2014 年)移植到 Micrometer Tracing,使其与 Spring 无关。借助 Micrometer Tracing,您可以选择要使用的跟踪库(跟踪器控制跨度的生命周期,是分布式跟踪的基础)。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 编码器(也通过 Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave 桥接)以 OTLP 格式接收的跨度数据

Metrics

通过 Spring Boot、Micrometer Observation、Micrometer Core、Micrometer OTLP 推送 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 社区所有即将举行的活动。

查看全部