度量
開始入門
Spring Boot 自動配置了一個複合 MeterRegistry,併為 classpath 上找到的每個支援的實現向複合中添加了一個登錄檔。在執行時 classpath 中擁有 micrometer-registry-{system} 依賴項足以讓 Spring Boot 配置登錄檔。
大多數登錄檔共享通用功能。例如,即使 Micrometer 登錄檔實現在 classpath 中,您也可以停用特定登錄檔。以下示例停用了 Datadog
-
屬性
-
YAML
management.datadog.metrics.export.enabled=false
management:
datadog:
metrics:
export:
enabled: false
您還可以停用所有登錄檔,除非登錄檔特定的屬性另有說明,如下例所示
-
屬性
-
YAML
management.defaults.metrics.export.enabled=false
management:
defaults:
metrics:
export:
enabled: false
Spring Boot 還會將任何自動配置的登錄檔新增到 Metrics 類上的全域性靜態複合登錄檔,除非您明確指示它不要這樣做
-
屬性
-
YAML
management.metrics.use-global-registry=false
management:
metrics:
use-global-registry: false
您可以註冊任意數量的 MeterRegistryCustomizer bean,以進一步配置登錄檔,例如在任何儀表註冊到登錄檔之前應用通用標籤
-
Java
-
Kotlin
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {
@Bean
public MeterRegistryCustomizer<MeterRegistry> metricsCommonTags() {
return (registry) -> registry.config().commonTags("region", "us-east-1");
}
}
import io.micrometer.core.instrument.MeterRegistry
import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyMeterRegistryConfiguration {
@Bean
fun metricsCommonTags(): MeterRegistryCustomizer<MeterRegistry> {
return MeterRegistryCustomizer { registry ->
registry.config().commonTags("region", "us-east-1")
}
}
}
透過更具體地指定泛型型別,您可以將自定義應用於特定的登錄檔實現
-
Java
-
Kotlin
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.graphite.GraphiteMeterRegistry;
import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyMeterRegistryConfiguration {
@Bean
public MeterRegistryCustomizer<GraphiteMeterRegistry> graphiteMetricsNamingConvention() {
return (registry) -> registry.config().namingConvention(this::name);
}
private String name(String name, Meter.Type type, String baseUnit) {
return ...
}
}
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.graphite.GraphiteMeterRegistry
import org.springframework.boot.micrometer.metrics.autoconfigure.MeterRegistryCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyMeterRegistryConfiguration {
@Bean
fun graphiteMetricsNamingConvention(): MeterRegistryCustomizer<GraphiteMeterRegistry> {
return MeterRegistryCustomizer { registry: GraphiteMeterRegistry ->
registry.config().namingConvention(this::name)
}
}
private fun name(name: String, type: Meter.Type, baseUnit: String?): String {
return ...
}
}
Spring Boot 還會配置內建檢測,您可以透過配置或專用註解標記進行控制。
支援的監控系統
本節簡要描述了每個支援的監控系統。
AppOptics
預設情況下,AppOptics 登錄檔會定期將指標推送到 api.appoptics.com/v1/measurements。要將指標匯出到 SaaS AppOptics,必須提供您的 API 令牌
-
屬性
-
YAML
management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
appoptics:
metrics:
export:
api-token: "YOUR_TOKEN"
Atlas
-
屬性
-
YAML
management.atlas.metrics.export.uri=https://atlas.example.com:7101/api/v1/publish
management:
atlas:
metrics:
export:
uri: "https://atlas.example.com:7101/api/v1/publish"
Datadog
-
屬性
-
YAML
management.datadog.metrics.export.api-key=YOUR_KEY
management:
datadog:
metrics:
export:
api-key: "YOUR_KEY"
如果您還提供了應用程式金鑰(可選),那麼儀表描述、型別和基本單位等元資料也將被匯出
-
屬性
-
YAML
management.datadog.metrics.export.api-key=YOUR_API_KEY
management.datadog.metrics.export.application-key=YOUR_APPLICATION_KEY
management:
datadog:
metrics:
export:
api-key: "YOUR_API_KEY"
application-key: "YOUR_APPLICATION_KEY"
預設情況下,指標傳送到 Datadog 美國站點 (api.datadoghq.com)。如果您的 Datadog 專案託管在其他站點,或者您需要透過代理傳送指標,請相應地配置 URI
-
屬性
-
YAML
management.datadog.metrics.export.uri=https://api.datadoghq.eu
management:
datadog:
metrics:
export:
uri: "https://api.datadoghq.eu"
您還可以更改將指標傳送到 Datadog 的時間間隔
-
屬性
-
YAML
management.datadog.metrics.export.step=30s
management:
datadog:
metrics:
export:
step: "30s"
Dynatrace
Dynatrace 提供兩種指標攝取 API,兩種都已為 Micrometer 實現。您可以在此處找到 Dynatrace 關於 Micrometer 指標攝取的文件。v1 名稱空間中的配置屬性僅在匯出到 Timeseries v1 API 時適用。v2 名稱空間中的配置屬性僅在匯出到 Metrics v2 API 時適用。請注意,此整合一次只能匯出到 API 的 v1 或 v2 版本,其中 v2 是首選。如果在 v1 名稱空間中設定了 device-id(v1 需要但 v2 不使用),則指標匯出到 v1 端點。否則,假定為 v2。
v2 API
您可以透過兩種方式使用 v2 API。
自動配置
Dynatrace 自動配置可用於由 OneAgent 或 Dynatrace Kubernetes Operator 監控的主機。
本地 OneAgent: 如果 OneAgent 在主機上執行,指標會自動匯出到本地 OneAgent 攝取端點。攝取端點將指標轉發到 Dynatrace 後端。
Dynatrace Kubernetes Operator: 在 Kubernetes 中執行並安裝 Dynatrace Operator 時,登錄檔將自動從 Operator 中獲取您的端點 URI 和 API 令牌。
這是預設行為,除了依賴 io.micrometer:micrometer-registry-dynatrace 之外,無需特殊設定。
手動配置
如果沒有可用的自動配置,則需要 Metrics v2 API 的端點和 API 令牌。API 令牌必須具有“攝取指標”(metrics.ingest)許可權。我們建議將令牌的範圍限制為這一許可權。您必須確保端點 URI 包含路徑(例如,/api/v2/metrics/ingest)
Metrics API v2 攝取端點的 URL 因您的部署選項而異
-
SaaS:
https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest -
託管部署:
https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest
以下示例使用 example 環境 ID 配置指標匯出
-
屬性
-
YAML
management.dynatrace.metrics.export.uri=https://example.live.dynatrace.com/api/v2/metrics/ingest
management.dynatrace.metrics.export.api-token=YOUR_TOKEN
management:
dynatrace:
metrics:
export:
uri: "https://example.live.dynatrace.com/api/v2/metrics/ingest"
api-token: "YOUR_TOKEN"
使用 Dynatrace v2 API 時,以下可選功能可用(更多詳細資訊可在 Dynatrace 文件中找到)
-
指標鍵字首:設定一個字首,該字首將新增到所有匯出的指標鍵前面。
-
使用 Dynatrace 元資料進行豐富:如果 OneAgent 或 Dynatrace Operator 正在執行,則使用額外的元資料(例如,關於主機、程序或 pod)豐富指標。
-
預設維度:指定新增到所有匯出指標的鍵值對。如果使用 Micrometer 指定了具有相同鍵的標籤,它們將覆蓋預設維度。
-
使用 Dynatrace Summary 儀器:在某些情況下,Micrometer Dynatrace 登錄檔建立的指標被拒絕。在 Micrometer 1.9.x 中,透過引入 Dynatrace 特定的 summary 儀器解決了此問題。將此切換設定為
false會強制 Micrometer 回退到 1.9.x 之前的預設行為。它僅在從 Micrometer 1.8.x 遷移到 1.9.x 時遇到問題時才應使用。 -
匯出儀表元資料:從 Micrometer 1.12.0 開始,Dynatrace 匯出器預設也會匯出儀表元資料,例如單位和描述。使用
export-meter-metadata切換關閉此功能。
可以不指定 URI 和 API 令牌,如下例所示。在此場景中,使用自動配置的端點
-
屬性
-
YAML
management.dynatrace.metrics.export.v2.metric-key-prefix=your.key.prefix
management.dynatrace.metrics.export.v2.enrich-with-dynatrace-metadata=true
management.dynatrace.metrics.export.v2.default-dimensions.key1=value1
management.dynatrace.metrics.export.v2.default-dimensions.key2=value2
management.dynatrace.metrics.export.v2.use-dynatrace-summary-instruments=true
management.dynatrace.metrics.export.v2.export-meter-metadata=true
management:
dynatrace:
metrics:
export:
# Specify uri and api-token here if not using the local OneAgent endpoint.
v2:
metric-key-prefix: "your.key.prefix"
enrich-with-dynatrace-metadata: true
default-dimensions:
key1: "value1"
key2: "value2"
use-dynatrace-summary-instruments: true # (default: true)
export-meter-metadata: true # (default: true)
v1 API(舊版)
Dynatrace v1 API 指標註冊表使用 Timeseries v1 API 定期將指標推送到配置的 URI。為了與現有設定向後相容,當設定了 device-id(v1 需要,但 v2 不使用)時,指標將匯出到 Timeseries v1 端點。要將指標匯出到 Dynatrace,必須提供您的 API 令牌、裝置 ID 和 URI
-
屬性
-
YAML
management.dynatrace.metrics.export.uri=https://{your-environment-id}.live.dynatrace.com
management.dynatrace.metrics.export.api-token=YOUR_TOKEN
management.dynatrace.metrics.export.v1.device-id=YOUR_DEVICE_ID
management:
dynatrace:
metrics:
export:
uri: "https://{your-environment-id}.live.dynatrace.com"
api-token: "YOUR_TOKEN"
v1:
device-id: "YOUR_DEVICE_ID"
對於 v1 API,您必須指定不帶路徑的基礎環境 URI,因為 v1 端點路徑會自動新增。
版本無關設定
除了 API 端點和令牌之外,您還可以更改將指標傳送到 Dynatrace 的時間間隔。預設匯出間隔為 60s。以下示例將匯出間隔設定為 30 秒
-
屬性
-
YAML
management.dynatrace.metrics.export.step=30s
management:
dynatrace:
metrics:
export:
step: "30s"
您可以在 Micrometer 文件 和 Dynatrace 文件中找到有關如何為 Micrometer 設定 Dynatrace 匯出器的更多資訊。
Elastic
預設情況下,指標匯出到執行在您本地機器上的 Elastic。您可以使用以下屬性提供要使用的 Elastic 伺服器的位置
-
屬性
-
YAML
management.elastic.metrics.export.host=https://elastic.example.com:8086
management:
elastic:
metrics:
export:
host: "https://elastic.example.com:8086"
Ganglia
預設情況下,指標匯出到執行在您本地機器上的 Ganglia。您可以提供 Ganglia 伺服器的主機和埠,如下例所示
-
屬性
-
YAML
management.ganglia.metrics.export.host=ganglia.example.com
management.ganglia.metrics.export.port=9649
management:
ganglia:
metrics:
export:
host: "ganglia.example.com"
port: 9649
Graphite
預設情況下,指標匯出到執行在您本地機器上的 Graphite。您可以提供 Graphite 伺服器的主機和埠,如下例所示
-
屬性
-
YAML
management.graphite.metrics.export.host=graphite.example.com
management.graphite.metrics.export.port=9004
management:
graphite:
metrics:
export:
host: "graphite.example.com"
port: 9004
Micrometer 提供了一個預設的 HierarchicalNameMapper,它控制著維度儀表 ID 如何對映到扁平的分層名稱。
|
要控制此行為,請定義您自己的
|
Humio
預設情況下,Humio 登錄檔會定期將指標推送到 cloud.humio.com。要將指標匯出到 SaaS Humio,您必須提供您的 API 令牌
-
屬性
-
YAML
management.humio.metrics.export.api-token=YOUR_TOKEN
management:
humio:
metrics:
export:
api-token: "YOUR_TOKEN"
您還應配置一個或多個標籤以標識指標推送到的資料來源
-
屬性
-
YAML
management.humio.metrics.export.tags.alpha=a
management.humio.metrics.export.tags.bravo=b
management:
humio:
metrics:
export:
tags:
alpha: "a"
bravo: "b"
Influx
預設情況下,指標匯出到執行在您本地機器上的 Influx v1 例項,使用預設配置。要將指標匯出到 InfluxDB v2,請配置用於寫入指標的 org、bucket 和身份驗證 token。您可以透過以下方式提供要使用的 Influx 伺服器的位置
-
屬性
-
YAML
management.influx.metrics.export.uri=https://influx.example.com:8086
management:
influx:
metrics:
export:
uri: "https://influx.example.com:8086"
JMX
Micrometer 提供了到 JMX 的分層對映,主要作為一種廉價且便攜的方式來本地檢視指標。預設情況下,指標匯出到 metrics JMX 域。您可以透過以下方式提供要使用的域
-
屬性
-
YAML
management.jmx.metrics.export.domain=com.example.app.metrics
management:
jmx:
metrics:
export:
domain: "com.example.app.metrics"
Micrometer 提供了一個預設的 HierarchicalNameMapper,它控制著維度儀表 ID 如何對映到扁平的分層名稱。
|
要控制此行為,請定義您自己的
|
KairosDB
預設情況下,指標匯出到執行在您本地機器上的 KairosDB。您可以透過以下方式提供要使用的 KairosDB 伺服器的位置
-
屬性
-
YAML
management.kairos.metrics.export.uri=https://kairosdb.example.com:8080/api/v1/datapoints
management:
kairos:
metrics:
export:
uri: "https://kairosdb.example.com:8080/api/v1/datapoints"
New Relic
-
屬性
-
YAML
management.newrelic.metrics.export.api-key=YOUR_KEY
management.newrelic.metrics.export.account-id=YOUR_ACCOUNT_ID
management:
newrelic:
metrics:
export:
api-key: "YOUR_KEY"
account-id: "YOUR_ACCOUNT_ID"
您還可以更改將指標傳送到 New Relic 的時間間隔
-
屬性
-
YAML
management.newrelic.metrics.export.step=30s
management:
newrelic:
metrics:
export:
step: "30s"
預設情況下,指標透過 REST 呼叫釋出,但如果您的 classpath 中有 Java Agent API,也可以使用它
-
屬性
-
YAML
management.newrelic.metrics.export.client-provider-type=insights-agent
management:
newrelic:
metrics:
export:
client-provider-type: "insights-agent"
最後,您可以透過定義自己的 NewRelicClientProvider bean 來完全控制。
OTLP
預設情況下,指標透過 OpenTelemetry 協議 (OTLP) 匯出到執行在您本地機器上的消費者。要匯出到其他位置,請使用 management.otlp.metrics.export.url 提供 OTLP 指標端點的位置
-
屬性
-
YAML
management.otlp.metrics.export.url=https://otlp.example.com:4318/v1/metrics
management:
otlp:
metrics:
export:
url: "https://otlp.example.com:4318/v1/metrics"
還可以使用 management.otlp.metrics.export.headers.* 屬性提供自定義頭部,例如用於身份驗證。
如果存在 OtlpMetricsSender bean,它將配置在 Spring Boot 自動配置的 OtlpMeterRegistry 上。
Prometheus
Prometheus 希望抓取或輪詢單個應用程式例項以獲取指標。Spring Boot 在 /actuator/prometheus 提供了一個 actuator 端點,以 Prometheus 抓取的方式呈現適當格式的指標。
| 預設情況下,該端點不可用,必須公開。有關詳細資訊,請參閱公開端點。 |
以下示例 scrape_config 新增到 prometheus.yml
scrape_configs:
- job_name: "spring"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["HOST:PORT"]
Prometheus Exemplars 也受支援。要啟用此功能,應存在 SpanContext bean。如果您正在使用已棄用的 Prometheus simpleclient 支援並希望啟用該功能,則應存在 SpanContextSupplier bean。如果您使用 Micrometer Tracing,這將為您自動配置,但如果您願意,可以隨時建立自己的。請檢視 Prometheus 文件,因為此功能需要在 Prometheus 端明確啟用,並且僅支援使用 OpenMetrics 格式。
對於可能存在時間不足以被抓取的臨時或批處理作業,您可以使用 Prometheus Pushgateway 支援將指標公開給 Prometheus。
要啟用 Prometheus Pushgateway 支援,請將以下依賴項新增到您的專案中
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-exporter-pushgateway</artifactId>
</dependency>
當 Prometheus Pushgateway 依賴項存在於 classpath 中且 management.prometheus.metrics.export.pushgateway.enabled 屬性設定為 true 時,將自動配置一個 PrometheusPushGatewayManager bean。它管理將指標推送到 Prometheus Pushgateway 的過程。
您可以使用 management.prometheus.metrics.export.pushgateway 下的屬性來調整 PrometheusPushGatewayManager。對於高階配置,您還可以提供自己的 PrometheusPushGatewayManager bean。
Simple
Micrometer 附帶一個簡單的記憶體後端,如果未配置其他登錄檔,則會自動將其用作回退。這使您可以在指標端點中檢視收集了哪些指標。
一旦您使用任何其他可用後端,記憶體後端就會停用自身。您也可以明確停用它
-
屬性
-
YAML
management.simple.metrics.export.enabled=false
management:
simple:
metrics:
export:
enabled: false
Stackdriver
Stackdriver 登錄檔會定期將指標推送到 Stackdriver。要將指標匯出到 SaaS Stackdriver,您必須提供您的 Google Cloud 專案 ID
-
屬性
-
YAML
management.stackdriver.metrics.export.project-id=my-project
management:
stackdriver:
metrics:
export:
project-id: "my-project"
您還可以更改將指標傳送到 Stackdriver 的時間間隔
-
屬性
-
YAML
management.stackdriver.metrics.export.step=30s
management:
stackdriver:
metrics:
export:
step: "30s"
StatsD
StatsD 登錄檔透過 UDP 急切地將指標推送到 StatsD 代理。預設情況下,指標匯出到執行在您本地機器上的 StatsD 代理。您可以透過以下方式提供要使用的 StatsD 代理主機、埠和協議
-
屬性
-
YAML
management.statsd.metrics.export.host=statsd.example.com
management.statsd.metrics.export.port=9125
management.statsd.metrics.export.protocol=udp
management:
statsd:
metrics:
export:
host: "statsd.example.com"
port: 9125
protocol: "udp"
您還可以更改要使用的 StatsD 行協議(預設為 Datadog)
-
屬性
-
YAML
management.statsd.metrics.export.flavor=etsy
management:
statsd:
metrics:
export:
flavor: "etsy"
支援的指標和儀表
Spring Boot 為各種技術提供了自動儀表註冊。在大多數情況下,預設值提供合理的指標,可以釋出到任何受支援的監控系統。
JVM 指標
自動配置透過使用核心 Micrometer 類啟用 JVM 指標。JVM 指標以 jvm. 儀表名稱釋出。
提供以下 JVM 指標
-
各種記憶體和緩衝池詳細資訊
-
與垃圾回收相關的統計資訊
-
執行緒利用率
-
虛擬執行緒統計資訊(為此,
io.micrometer:micrometer-java21必須在 classpath 中) -
已載入和已解除安裝的類數量
-
JVM 版本資訊
-
JIT 編譯時間
系統指標
自動配置透過使用核心 Micrometer 類啟用系統指標。系統指標以 system.、process. 和 disk. 儀表名稱釋出。
提供以下系統指標
-
CPU 指標
-
檔案描述符指標
-
正常執行時間指標(應用程式已執行的時間量和絕對啟動時間的固定度量)
-
可用磁碟空間
應用程式啟動指標
自動配置公開應用程式啟動時間指標
-
application.started.time:啟動應用程式所需的時間。 -
application.ready.time:應用程式準備好處理請求所需的時間。
指標透過應用程式類的完全限定名稱進行標記。
任務執行和排程指標
自動配置啟用了所有可用的 ThreadPoolTaskExecutor 和 ThreadPoolTaskScheduler bean 的檢測,只要底層的 ThreadPoolExecutor 可用。指標由執行器的名稱標記,該名稱派生自 bean 名稱。
JMS 指標
自動配置啟用了所有可用的 JmsTemplate bean 和 @JmsListener 註解方法的檢測。這將分別生成 "jms.message.publish" 和 "jms.message.process" 指標。有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件。
使用 JmsTemplate bean 的 JmsClient 和 JmsMessagingTemplate 也被檢測。 |
Spring MVC 指標
自動配置啟用 Spring MVC 控制器和函式處理程式處理的所有請求的檢測。預設情況下,指標以 http.server.requests 名稱生成。您可以透過設定 management.observations.http.server.requests.name 屬性來自定義名稱。
有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件。
要新增到預設標籤,請提供一個擴充套件 org.springframework.http.server.observation 包中的 DefaultServerRequestObservationConvention 的 @Bean。要替換預設標籤,請提供一個實現 ServerRequestObservationConvention 的 @Bean。
| 在某些情況下,Web 控制器中處理的異常不會記錄為請求指標標籤。應用程式可以選擇透過將處理的異常設定為請求屬性來記錄異常。 |
預設情況下,所有請求都已處理。要自定義過濾器,請提供一個實現 FilterRegistrationBean<ServerHttpObservationFilter> 的 @Bean。
Spring WebFlux 指標
自動配置啟用 Spring WebFlux 控制器和函式處理程式處理的所有請求的檢測。預設情況下,指標以 http.server.requests 名稱生成。您可以透過設定 management.observations.http.server.requests.name 屬性來自定義名稱。
有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件。
要新增到預設標籤,請提供一個擴充套件 org.springframework.http.server.reactive.observation 包中的 DefaultServerRequestObservationConvention 的 @Bean。要替換預設標籤,請提供一個實現 ServerRequestObservationConvention 的 @Bean。
| 在某些情況下,控制器和處理函式中處理的異常不會記錄為請求指標標籤。應用程式可以選擇透過將處理的異常設定為請求屬性來記錄異常。 |
Jersey 伺服器指標
自動配置啟用 Jersey JAX-RS 實現處理的所有請求的檢測。預設情況下,指標以 http.server.requests 名稱生成。您可以透過設定 management.observations.http.server.requests.name 屬性來自定義名稱。
預設情況下,Jersey 伺服器指標會標記以下資訊
| 標籤 | 描述 |
|---|---|
|
處理請求時丟擲的任何異常的簡單類名。 |
|
請求的方法(例如, |
|
請求的結果,基於響應的狀態碼。1xx 是 |
|
響應的 HTTP 狀態碼(例如, |
|
如果可能,請求的 URI 模板在變數替換之前(例如, |
要自定義標籤,請提供一個實現 JerseyObservationConvention 的 @Bean。
SSL 捆綁包指標
Spring Boot Actuator 釋出有關 SSL 捆綁包的到期指標。ssl.chain.expiry 指標以秒為單位衡量每個證書鏈的到期日期。如果鏈已過期,此數字將為負數。此指標標記有以下資訊
| 標籤 | 描述 |
|---|---|
|
包含證書鏈的捆綁包名稱 |
|
鏈中最早過期的證書的序列號(十六進位制格式) |
|
證書鏈的名稱。 |
HTTP 客戶端指標
Spring Boot Actuator 管理 RestTemplate、WebClient 和 RestClient 的檢測。為此,您必須注入自動配置的構建器並使用它來建立例項
您還可以手動應用負責此檢測的自定義器,即 ObservationRestTemplateCustomizer、ObservationWebClientCustomizer 和 ObservationRestClientCustomizer。
預設情況下,指標以 http.client.requests 名稱生成。您可以透過設定 management.observations.http.client.requests.name 屬性來自定義名稱。
有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件。
在使用 RestTemplate 或 RestClient 時自定義標籤,請提供一個實現 org.springframework.http.client.observation 包中的 ClientRequestObservationConvention 的 @Bean。在使用 WebClient 時自定義標籤,請提供一個實現 org.springframework.web.reactive.function.client 包中的 ClientRequestObservationConvention 的 @Bean。
Tomcat 指標
僅當 MBean Registry 啟用時,自動配置才啟用 Tomcat 的檢測。預設情況下,MBean 登錄檔是停用的,但您可以透過將 server.tomcat.mbeanregistry.enabled 設定為 true 來啟用它。
Tomcat 指標以 tomcat. 儀表名稱釋出。
快取指標
自動配置在啟動時啟用所有可用的 Cache 例項的檢測,指標字首為 cache。快取檢測已標準化為一組基本指標。還提供了額外的、特定於快取的指標。
支援以下快取庫
-
Cache2k
-
Caffeine
-
Hazelcast
-
任何符合 JCache (JSR-107) 的實現
-
Redis
| 指標應啟用,以便自動配置能夠獲取它們。有關更多詳細資訊,請參閱您正在使用的快取庫的文件。 |
指標透過快取的名稱和 CacheManager 的名稱進行標記,該名稱派生自 bean 名稱。
只有在啟動時配置的快取才繫結到登錄檔。對於未在快取配置中定義的快取,例如在啟動階段之後即時或以程式設計方式建立的快取,需要顯式註冊。提供了一個 CacheMetricsRegistrar bean 以簡化該過程。 |
Spring Batch 指標
請參閱 Spring Batch 參考文件。
Spring GraphQL 指標
請參閱 Spring GraphQL 參考文件。
DataSource 指標
自動配置啟用所有可用的 DataSource 物件的檢測,指標字首為 jdbc.connections。資料來源檢測會生成度量,表示池中當前活躍、空閒、最大允許和最小允許的連線數。
指標也透過基於 bean 名稱計算的 DataSource 名稱進行標記。
預設情況下,Spring Boot 為所有支援的資料來源提供元資料。如果不支援您喜歡的資料來源,您可以新增額外的 DataSourcePoolMetadataProvider bean。有關示例,請參閱 DataSourcePoolMetadataProvidersConfiguration。 |
此外,Hikari 特定的指標以 hikaricp 字首公開。每個指標都由池的名稱標記(您可以使用 spring.datasource.name 控制它)。
Hibernate 指標
如果 org.hibernate.orm:hibernate-micrometer 在 classpath 中,則所有可用的 Hibernate EntityManagerFactory 例項(已啟用統計資訊)都將使用名為 hibernate 的指標進行檢測。
指標也透過 EntityManagerFactory 的名稱進行標記,該名稱派生自 bean 名稱。
要啟用統計資訊,必須將標準 JPA 屬性 hibernate.generate_statistics 設定為 true。您可以在自動配置的 EntityManagerFactory 上啟用它
-
屬性
-
YAML
spring.jpa.properties[hibernate.generate_statistics]=true
spring:
jpa:
properties:
"[hibernate.generate_statistics]": true
Spring Data Repository 指標
自動配置啟用了所有 Spring Data Repository 方法呼叫的檢測。預設情況下,指標以 spring.data.repository.invocations 名稱生成。您可以透過設定 management.metrics.data.repository.metric-name 屬性來自定義名稱。
io.micrometer.core.annotation 包中的 @Timed 註解在 Repository 介面和方法上受支援。如果您不想記錄所有 Repository 呼叫的指標,您可以將 management.metrics.data.repository.autotime.enabled 設定為 false,並專門使用 @Timed 註解。
帶有 longTask = true 的 @Timed 註解會為方法啟用一個長任務計時器。長任務計時器需要一個單獨的指標名稱,並且可以與短任務計時器堆疊使用。 |
預設情況下,與 Repository 呼叫相關的指標會標記以下資訊
| 標籤 | 描述 |
|---|---|
|
源 |
|
被呼叫的 |
|
結果狀態 ( |
|
從呼叫中丟擲的任何異常的簡單類名。 |
要替換預設標籤,請提供一個實現 RepositoryTagsProvider 的 @Bean。
Spring Integration 指標
只要存在 MeterRegistry bean,Spring Integration 就會自動提供 Micrometer 支援。指標以 spring.integration. 儀表名稱釋出。
Kafka 指標
自動配置分別註冊了一個 MicrometerConsumerListener 和 MicrometerProducerListener 用於自動配置的消費者工廠和生產者工廠。它還為 StreamsBuilderFactoryBean 註冊了一個 KafkaStreamsMicrometerListener。有關更多詳細資訊,請參閱 Spring Kafka 文件的 Micrometer Native Metrics 部分。
MongoDB 指標
本節簡要描述了 MongoDB 的可用指標。
MongoDB 命令指標
自動配置將 MongoMetricsCommandListener 註冊到自動配置的 MongoClient。
為向底層 MongoDB 驅動程式發出的每個命令建立名為 mongodb.driver.commands 的計時器指標。每個指標預設標記以下資訊
| 標籤 | 描述 |
|---|---|
|
發出的命令的名稱。 |
|
傳送命令的叢集識別符號。 |
|
傳送命令的伺服器地址。 |
|
命令的結果 ( |
要替換預設指標標籤,請定義一個 MongoCommandTagsProvider bean,如下例所示
-
Java
-
Kotlin
import io.micrometer.core.instrument.binder.mongodb.MongoCommandTagsProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyCommandTagsProviderConfiguration {
@Bean
public MongoCommandTagsProvider customCommandTagsProvider() {
return new CustomCommandTagsProvider();
}
}
import io.micrometer.core.instrument.binder.mongodb.MongoCommandTagsProvider
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyCommandTagsProviderConfiguration {
@Bean
fun customCommandTagsProvider(): MongoCommandTagsProvider? {
return CustomCommandTagsProvider()
}
}
要停用自動配置的命令指標,請設定以下屬性
-
屬性
-
YAML
management.metrics.mongodb.command.enabled=false
management:
metrics:
mongodb:
command:
enabled: false
MongoDB 連線池指標
自動配置將 MongoMetricsConnectionPoolListener 註冊到自動配置的 MongoClient。
為連線池建立以下度量指標
-
mongodb.driver.pool.size報告連線池的當前大小,包括空閒和使用中的成員。 -
mongodb.driver.pool.checkedout報告當前使用中的連線數。 -
mongodb.driver.pool.waitqueuesize報告連線池的等待佇列的當前大小。
每個指標預設標記以下資訊
| 標籤 | 描述 |
|---|---|
|
連線池對應的叢集識別符號。 |
|
連線池對應的伺服器地址。 |
要替換預設指標標籤,請定義一個 MongoConnectionPoolTagsProvider bean
-
Java
-
Kotlin
import io.micrometer.core.instrument.binder.mongodb.MongoConnectionPoolTagsProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyConnectionPoolTagsProviderConfiguration {
@Bean
public MongoConnectionPoolTagsProvider customConnectionPoolTagsProvider() {
return new CustomConnectionPoolTagsProvider();
}
}
import io.micrometer.core.instrument.binder.mongodb.MongoConnectionPoolTagsProvider
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyConnectionPoolTagsProviderConfiguration {
@Bean
fun customConnectionPoolTagsProvider(): MongoConnectionPoolTagsProvider {
return CustomConnectionPoolTagsProvider()
}
}
要停用自動配置的連線池指標,請設定以下屬性
-
屬性
-
YAML
management.metrics.mongodb.connectionpool.enabled=false
management:
metrics:
mongodb:
connectionpool:
enabled: false
Neo4j 指標
自動配置為自動配置的 Driver 註冊了一個 MicrometerObservationProvider。
要覆蓋此行為,您可以註冊一個優先順序高於零的 ConfigBuilderCustomizer bean。
Jetty 指標
自動配置透過使用 Micrometer 的 JettyServerThreadPoolMetrics 繫結 Jetty ThreadPool 的指標。Jetty Connector 例項的指標透過使用 Micrometer 的 JettyConnectionMetrics 繫結,當 server.ssl.enabled 設定為 true 時,還會繫結 Micrometer 的 JettySslHandshakeMetrics。
Redis 指標
自動配置為自動配置的 LettuceConnectionFactory 註冊了一個 MicrometerTracing。有關更多詳細資訊,請參閱 Lettuce 文件的 可觀察性部分。
註冊自定義指標
要註冊自定義指標,請將 MeterRegistry 注入您的元件
-
Java
-
Kotlin
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final Dictionary dictionary;
public MyBean(MeterRegistry registry) {
this.dictionary = Dictionary.load();
registry.gauge("dictionary.size", Tags.empty(), this.dictionary.getWords().size());
}
}
import io.micrometer.core.instrument.MeterRegistry
import io.micrometer.core.instrument.Tags
import org.springframework.stereotype.Component
@Component
class MyBean(registry: MeterRegistry) {
private val dictionary: Dictionary
init {
dictionary = Dictionary.load()
registry.gauge("dictionary.size", Tags.empty(), dictionary.words.size)
}
}
如果您的指標依賴於其他 bean,我們建議您使用 MeterBinder 來註冊它們
-
Java
-
Kotlin
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.context.annotation.Bean;
public class MyMeterBinderConfiguration {
@Bean
public MeterBinder queueSize(Queue queue) {
return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
}
}
import io.micrometer.core.instrument.Gauge
import io.micrometer.core.instrument.binder.MeterBinder
import org.springframework.context.annotation.Bean
class MyMeterBinderConfiguration {
@Bean
fun queueSize(queue: Queue): MeterBinder {
return MeterBinder { registry ->
Gauge.builder("queueSize", queue::size).register(registry)
}
}
}
使用 MeterBinder 確保設定了正確的依賴關係,並且在檢索指標值時 bean 可用。MeterBinder 實現也可能很有用,如果您發現您在元件或應用程式之間重複檢測一套指標。
預設情況下,所有 MeterBinder bean 的指標會自動繫結到 Spring 管理的 MeterRegistry。 |
自定義單個指標
如果您需要對特定的 Meter 例項應用自定義,您可以使用 MeterFilter 介面。
例如,如果您想將所有以 com.example 開頭的儀表 ID 的 mytag.region 標籤重新命名為 mytag.area,您可以執行以下操作
-
Java
-
Kotlin
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyMetricsFilterConfiguration {
@Bean
public MeterFilter renameRegionTagMeterFilter() {
return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area");
}
}
import io.micrometer.core.instrument.config.MeterFilter
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyMetricsFilterConfiguration {
@Bean
fun renameRegionTagMeterFilter(): MeterFilter {
return MeterFilter.renameTag("com.example", "mytag.region", "mytag.area")
}
}
預設情況下,所有 MeterFilter bean 都會自動繫結到 Spring 管理的 MeterRegistry。請確保使用 Spring 管理的 MeterRegistry 註冊您的指標,而不是使用 Metrics 上的任何靜態方法。這些靜態方法使用非 Spring 管理的全域性登錄檔。 |
通用標籤
通用標籤通常用於操作環境的維度細分,例如主機、例項、區域、堆疊等。通用標籤應用於所有儀表,並且可以配置,如下例所示
-
屬性
-
YAML
management.metrics.tags.region=us-east-1
management.metrics.tags.stack=prod
management:
metrics:
tags:
region: "us-east-1"
stack: "prod"
上述示例為所有儀表添加了 region 和 stack 標籤,值分別為 us-east-1 和 prod。
如果您使用 Graphite,通用標籤的順序很重要。由於這種方法無法保證通用標籤的順序,建議 Graphite 使用者定義一個自定義的 MeterFilter。 |
每儀表屬性
除了 MeterFilter bean 之外,您還可以使用屬性對每個儀表應用有限的自定義。每儀表自定義使用 Spring Boot 的 PropertiesMeterFilter 應用於任何以給定名稱開頭的儀表 ID。以下示例過濾掉任何 ID 以 example.remote 開頭的儀表。
-
屬性
-
YAML
management.metrics.enable.example.remote=false
management:
metrics:
enable:
example:
remote: false
以下屬性允許每儀表自定義
| 財產 | 描述 |
|---|---|
|
是否接受具有某些 ID 的儀表。不接受的儀表將從 |
|
是否釋出適合計算可聚合(跨維度)百分位數近似值的直方圖。 |
|
透過限制預期值的範圍來發布更少的直方圖桶。 |
|
釋出在您的應用程式中計算的百分位數 |
|
透過將它們累積在環形緩衝區中來給予最近的樣本更大的權重,這些環形緩衝區在可配置的到期時間後輪換,具有可配置的緩衝區長度。 |
|
釋出一個累積直方圖,其桶由您的服務級別目標定義。 |
有關 percentiles-histogram、percentiles 和 slo 背後的概念的更多詳細資訊,請參閱 Micrometer 文件的 直方圖和百分位數 部分。
指標端點
Spring Boot 提供了一個 metrics 端點,您可以使用它診斷性地檢查應用程式收集的指標。該端點預設不可用,必須公開。有關詳細資訊,請參閱公開端點。
導航到 /actuator/metrics 會顯示可用儀表名稱列表。您可以透過提供儀表名稱作為選擇器來深入檢視特定儀表的資訊——例如,/actuator/metrics/jvm.memory.max。
|
您在此處使用的名稱應與程式碼中使用的名稱匹配,而不是在對用於其傳送到的監控系統進行命名約定標準化後的名稱。換句話說,如果 |
您還可以在 URL 末尾新增任意數量的 tag=KEY:VALUE 查詢引數,以對儀表進行維度細分——例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap。
|
報告的測量值是所有匹配儀表名稱和已應用標籤的儀表的統計資料之和。在前面的示例中,返回的 |
與 Micrometer Observation 的整合
一個 DefaultMeterObservationHandler 會自動註冊到 ObservationRegistry 上,它會為每個完成的觀察建立指標。