讓我們將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 社群所有即將舉行的活動。

檢視所有