讓我們在 Spring 中使用 OpenTelemetry

工程 | 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 用於 span 傳播)中,它還支援 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 從 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>

需要 Maven 設定才能透過 Micrometer Observation、Micrometer Core 和 Micrometer Tracing 讓 Spring Boot 具有 Open Telemetry (OTLP)。

Nodes

客戶端命令行應用程式向伺服器端發出 HTTP 呼叫的節點圖

Logs

透過 Spring Boot、Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave 橋接進行日誌關聯

Traces

追蹤檢視 - 透過 OTel Brave Encoder 以 OTLP 格式接收的 span 資料(也透過 Micrometer Observation、Micrometer Tracing 和 OpenZipkin Brave 橋接)

Metrics

透過 Spring Boot 搭配 Micrometer Observation、Micrometer Core、Micrometer OTLP 推送 MeterRegistry 和在 Prometheus 端啟用的 OTLP 寫入接收器傳入請求的延遲

結論

Spring Boot 的可觀察性方法

  • 程式庫專業知識:維護程式碼的人員是維護檢測的人員
  • 整合的解決方案:透過 Micrometer 和 Brave,所有必要的工具都整合在 Spring Boot 生態系統中,提供了一個有凝聚力且可靠的可觀察性框架。
  • 協議至關重要:透過 OTLP,可以在協議層級進行標準化,從而更易於與各種後端和可觀察性平台整合。

Spring Boot 透過使用 OTLP 採用 OpenTelemetry 原則,並利用 Micrometer 進行指標監控、Brave 進行追蹤,以及 Micrometer Observation 作為通用抽象層,展現了對健全且可靠的可觀測性的承諾。透過運用這些工具,開發人員可以實現全面的可觀測性。這種方法不僅簡化了可觀測性的設置,還確保了生產環境中框架的穩定性和成熟度。Spring Boot 非常支持 OpenTelemetry,這體現在它與這些強大的可觀測性工具的輕鬆整合上。

連結

取得 Spring 電子報

與 Spring 電子報保持聯繫

訂閱

搶先一步

VMware 提供培訓和認證,以加速您的進度。

瞭解更多

獲得支援

Tanzu Spring 在一個簡單的訂閱中提供對 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

瞭解更多

即將到來的活動

查看 Spring 社群中所有即將到來的活動。

查看全部