可觀測性
可觀測性是從外部觀察執行中系統內部狀態的能力。它由三個支柱組成:日誌、指標和追蹤。
對於指標和追蹤,Spring Boot 使用 Micrometer Observation。若要建立您自己的觀察(將導致指標和追蹤),您可以注入 ObservationRegistry
。
import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationRegistry;
import org.springframework.stereotype.Component;
@Component
public class MyCustomObservation {
private final ObservationRegistry observationRegistry;
public MyCustomObservation(ObservationRegistry observationRegistry) {
this.observationRegistry = observationRegistry;
}
public void doSomething() {
Observation.createNotStarted("doSomething", this.observationRegistry)
.lowCardinalityKeyValue("locale", "en-US")
.highCardinalityKeyValue("userId", "42")
.observe(() -> {
// Execute business logic here
});
}
}
低基數標籤將新增至指標和追蹤,而高基數標籤僅會新增至追蹤。 |
類型為 ObservationPredicate
、GlobalObservationConvention
、ObservationFilter
和 ObservationHandler
的 Beans 將自動註冊到 ObservationRegistry
上。您可以額外註冊任意數量的 ObservationRegistryCustomizer
beans 以進一步組態登錄。
可觀測性支援依賴 Context Propagation 函式庫,以在執行緒和反應式管道之間轉發當前觀察。預設情況下,ThreadLocal
值不會在反應式運算符中自動恢復。此行為由 spring.reactor.context-propagation
屬性控制,可以將其設定為 auto
以啟用自動傳播。
有關觀察的更多詳細資訊,請參閱 Micrometer Observation 文件。
可以使用單獨的專案組態 JDBC 的可觀測性。Datasource Micrometer 專案提供了一個 Spring Boot Starter,它會在調用 JDBC 操作時自動建立觀察。請在參考文件中閱讀更多相關資訊。 |
R2DBC 的可觀測性已內建於 Spring Boot 中。若要啟用它,請將 io.r2dbc:r2dbc-proxy 依賴項新增至您的專案。 |
通用標籤
通用標籤通常用於操作環境的維度向下鑽取,例如主機、實例、區域、堆疊和其他。通用標籤作為低基數標籤應用於所有觀察,並且可以組態,如下例所示
-
屬性
-
YAML
management.observations.key-values.region=us-east-1
management.observations.key-values.stack=prod
management:
observations:
key-values:
region: "us-east-1"
stack: "prod"
前面的範例將 region
和 stack
標籤新增至所有觀察,其值分別為 us-east-1
和 prod
。
防止觀察
如果您想防止報告某些觀察,可以使用 management.observations.enable
屬性
-
屬性
-
YAML
management.observations.enable.denied.prefix=false
management.observations.enable.another.denied.prefix=false
management:
observations:
enable:
denied:
prefix: false
another:
denied:
prefix: false
前面的範例將防止所有名稱以 denied.prefix
或 another.denied.prefix
開頭的觀察。
如果您想防止 Spring Security 報告觀察,請將屬性 management.observations.enable.spring.security 設定為 false 。 |
如果您需要對防止觀察進行更精細的控制,您可以註冊類型為 ObservationPredicate
的 beans。只有當所有 ObservationPredicate
beans 都為該觀察傳回 true
時,才會報告觀察。
import io.micrometer.observation.Observation.Context;
import io.micrometer.observation.ObservationPredicate;
import org.springframework.stereotype.Component;
@Component
class MyObservationPredicate implements ObservationPredicate {
@Override
public boolean test(String name, Context context) {
return !name.contains("denied");
}
}
前面的範例將防止所有名稱包含 "denied" 的觀察。
OpenTelemetry 支援
有多種方法可以在您的應用程式中支援 OpenTelemetry。您可以使用 OpenTelemetry Java Agent 或 OpenTelemetry Spring Boot Starter,它們由 OTel 社群支援;指標和追蹤使用 OTel 函式庫定義的語意慣例。本文檔描述了 Spring 團隊正式支援的 OpenTelemetry,使用 Micrometer 和 OTLP 匯出器;指標和追蹤使用 Spring 專案文件(例如 Spring Framework)中描述的語意慣例。 |
Spring Boot 的 Actuator 模組包含對 OpenTelemetry 的基本支援。
它提供類型為 OpenTelemetry
的 bean,並且如果應用程式上下文中存在類型為 SdkTracerProvider
、ContextPropagators
、SdkLoggerProvider
或 SdkMeterProvider
的 beans,它們會自動註冊。此外,它還提供了一個 Resource
bean。自動組態的 Resource
的屬性可以透過 management.opentelemetry.resource-attributes
組態屬性進行組態。如果您已定義了自己的 Resource
bean,則情況不再如此。
Spring Boot 不提供 OpenTelemetry 指標或日誌記錄的自動組態。只有與 Micrometer Tracing 一起使用時,才會自動組態 OpenTelemetry 追蹤。 |
接下來的章節將提供有關日誌記錄、指標和追蹤的更多詳細資訊。
Micrometer Observation 註解支援
若要啟用指標和追蹤註解(例如 @Timed
、@Counted
、@MeterTag
和 @NewSpan
註解)的掃描,您需要將 management.observations.annotations.enabled
屬性設定為 true
。此功能由 Micrometer 直接支援。請參閱 Micrometer 和 Micrometer Tracing 參考文件。