指標
入門
Spring Boot 自動配置一個組合的 MeterRegistry
,併為它在類路徑上找到的每個受支援的實現新增一個登錄檔到組合中。在執行時類路徑中包含 micrometer-registry-{system}
的依賴項就足以讓 Spring Boot 配置登錄檔。
大多數登錄檔共享共同的特性。例如,即使 Micrometer 登錄檔實現位於類路徑上,你也可以停用特定的登錄檔。以下示例停用了 Datadog:
-
Properties
-
YAML
management.datadog.metrics.export.enabled=false
management:
datadog:
metrics:
export:
enabled: false
你也可以停用所有登錄檔,除非透過登錄檔特定的屬性另行指定,如下例所示:
-
Properties
-
YAML
management.defaults.metrics.export.enabled=false
management:
defaults:
metrics:
export:
enabled: false
Spring Boot 還會將所有自動配置的登錄檔新增到 Metrics
類上的全域性靜態組合登錄檔中,除非你明確告知它不要這樣做:
-
Properties
-
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.actuate.autoconfigure.metrics.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.actuate.autoconfigure.metrics.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.actuate.autoconfigure.metrics.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.actuate.autoconfigure.metrics.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 token:
-
Properties
-
YAML
management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
appoptics:
metrics:
export:
api-token: "YOUR_TOKEN"
Atlas
-
Properties
-
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
-
Properties
-
YAML
management.datadog.metrics.export.api-key=YOUR_KEY
management:
datadog:
metrics:
export:
api-key: "YOUR_KEY"
如果同時提供一個(可選的)應用程式 key,那麼諸如計量器描述、型別和基本單位等元資料也會被匯出:
-
Properties
-
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 的 US site (api.datadoghq.com
)。如果你的 Datadog 專案託管在其他 site 上,或者需要透過代理傳送指標,請相應地配置 URI:
-
Properties
-
YAML
management.datadog.metrics.export.uri=https://api.datadoghq.eu
management:
datadog:
metrics:
export:
uri: "https://api.datadoghq.eu"
你還可以更改傳送指標到 Datadog 的時間間隔:
-
Properties
-
YAML
management.datadog.metrics.export.step=30s
management:
datadog:
metrics:
export:
step: "30s"
Dynatrace
Dynatrace 提供了兩種指標攝取 API,這兩種 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。
自動配置
對於由 OneAgent 或 Dynatrace Operator for Kubernetes 監控的主機,Dynatrace 自動配置是可用的。
本地 OneAgent: 如果主機上執行著 OneAgent,指標會自動匯出到本地 OneAgent 攝取端點。攝取端點將指標轉發到 Dynatrace 後端。
Dynatrace Kubernetes Operator: 當在安裝了 Dynatrace Operator 的 Kubernetes 中執行時,登錄檔將自動從 Operator 獲取你的端點 URI 和 API token。
這是預設行為,除了依賴 io.micrometer:micrometer-registry-dynatrace
之外,不需要特殊設定。
手動配置
如果沒有自動配置可用,則需要 Metrics v2 API 的端點和一個 API token。API token 必須設定“攝取指標”(metrics.ingest
)許可權。我們建議將 token 的範圍限制在此單個許可權。必須確保端點 URI 包含路徑(例如,/api/v2/metrics/ingest
):
Metrics API v2 攝取端點的 URL 根據你的部署選項而不同:
-
SaaS:
https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest
-
Managed 部署:
https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest
以下示例使用 example
環境 ID 配置指標匯出:
-
Properties
-
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 文件中找到):
-
指標 key 字首:設定一個字首,新增到所有匯出的指標 key 的前面。
-
用 Dynatrace 元資料豐富:如果 OneAgent 或 Dynatrace Operator 正在執行,則用額外的元資料(例如,關於主機、程序或 pod)豐富指標。
-
預設維度:指定新增到所有匯出的指標的鍵值對。如果使用 Micrometer 指定了具有相同 key 的標籤,它們會覆蓋預設維度。
-
使用 Dynatrace Summary instruments:在某些情況下,Micrometer Dynatrace 登錄檔建立的指標會被拒絕。在 Micrometer 1.9.x 中,透過引入 Dynatrace 特定的 summary instruments 解決了這個問題。將此開關設定為
false
會強制 Micrometer 回退到 1.9.x 之前的預設行為。僅在從 Micrometer 1.8.x 遷移到 1.9.x 時遇到問題時才應使用它。 -
匯出計量器元資料:從 Micrometer 1.12.0 開始,Dynatrace 匯出器預設也會匯出計量器元資料,例如單位和描述。使用
export-meter-metadata
開關關閉此功能。
可以不指定 URI 和 API token,如下例所示。在此場景中,使用自動配置的端點:
-
Properties
-
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 token、device ID 和 URI:
-
Properties
-
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 端點和 token 外,你還可以更改傳送指標到 Dynatrace 的時間間隔。預設匯出時間間隔為 60s
。以下示例將匯出時間間隔設定為 30 秒:
-
Properties
-
YAML
management.dynatrace.metrics.export.step=30s
management:
dynatrace:
metrics:
export:
step: "30s"
有關如何設定 Micrometer 的 Dynatrace 匯出器的更多資訊,請參閱 Micrometer 文件和 Dynatrace 文件。
Elastic
預設情況下,指標被匯出到執行在你本地機器上的 Elastic。你可以使用以下屬性提供要使用的 Elastic 伺服器的位置:
-
Properties
-
YAML
management.elastic.metrics.export.host=https://elastic.example.com:8086
management:
elastic:
metrics:
export:
host: "https://elastic.example.com:8086"
Ganglia
預設情況下,指標被匯出到執行在你本地機器上的 Ganglia。你可以提供 Ganglia 伺服器主機和埠,如下例所示:
-
Properties
-
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 伺服器主機和埠,如下例所示:
-
Properties
-
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 token:
-
Properties
-
YAML
management.humio.metrics.export.api-token=YOUR_TOKEN
management:
humio:
metrics:
export:
api-token: "YOUR_TOKEN"
你還應該配置一個或多個標籤來標識推送指標的資料來源:
-
Properties
-
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 伺服器的位置:
-
Properties
-
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 域。你可以使用以下方式提供要使用的域:
-
Properties
-
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 伺服器的位置:
-
Properties
-
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
-
Properties
-
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 的時間間隔:
-
Properties
-
YAML
management.newrelic.metrics.export.step=30s
management:
newrelic:
metrics:
export:
step: "30s"
預設情況下,指標透過 REST 呼叫釋出,但如果你的類路徑上有 Java Agent API,也可以使用它:
-
Properties
-
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 metrics endpoint 的位置:
-
Properties
-
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.*
屬性提供。
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 目前僅適用於已棄用的 Prometheus simpleclient,直到 Prometheus 1.x 客戶端新增對其的支援。要切換到 simpleclient,請從你的專案中移除 io.micrometer:micrometer-registry-prometheus 並新增 io.micrometer:micrometer-registry-prometheus-simpleclient 。 |
要啟用 Prometheus Pushgateway 支援,請將以下依賴項新增到你的專案中:
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_pushgateway</artifactId>
</dependency>
當類路徑中存在 Prometheus Pushgateway 依賴項並且 management.prometheus.metrics.export.pushgateway.enabled
屬性設定為 true
時,會自動配置一個 PrometheusPushGatewayManager
bean。這將管理將指標推送到 Prometheus Pushgateway 的過程。
你可以使用 management.prometheus.metrics.export.pushgateway
下的屬性來調整 PrometheusPushGatewayManager
。對於高階配置,你也可以提供自己的 PrometheusPushGatewayManager
bean。
SignalFx
-
Properties
-
YAML
management.signalfx.metrics.export.access-token=YOUR_ACCESS_TOKEN
management:
signalfx:
metrics:
export:
access-token: "YOUR_ACCESS_TOKEN"
你還可以更改傳送指標到 SignalFx 的時間間隔:
-
Properties
-
YAML
management.signalfx.metrics.export.step=30s
management:
signalfx:
metrics:
export:
step: "30s"
Simple
Micrometer 附帶了一個簡單的記憶體後端,如果沒有配置其他登錄檔,它會自動用作備用。這使你可以在指標端點中檢視收集了哪些指標。
一旦你使用了任何其他可用的後端,記憶體後端就會停用自身。你也可以顯式停用它:
-
Properties
-
YAML
management.simple.metrics.export.enabled=false
management:
simple:
metrics:
export:
enabled: false
Stackdriver
Stackdriver 登錄檔定期將指標推送到 Stackdriver。要將指標匯出到 SaaS Stackdriver,必須提供你的 Google Cloud 專案 ID:
-
Properties
-
YAML
management.stackdriver.metrics.export.project-id=my-project
management:
stackdriver:
metrics:
export:
project-id: "my-project"
你還可以更改傳送指標到 Stackdriver 的時間間隔:
-
Properties
-
YAML
management.stackdriver.metrics.export.step=30s
management:
stackdriver:
metrics:
export:
step: "30s"
StatsD
StatsD 登錄檔透過 UDP 急切地將指標推送到 StatsD 代理。預設情況下,指標被匯出到執行在你本地機器上的 StatsD 代理。你可以使用以下方式提供要使用的 StatsD 代理主機、埠和協議:
-
Properties
-
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):
-
Properties
-
YAML
management.statsd.metrics.export.flavor=etsy
management:
statsd:
metrics:
export:
flavor: "etsy"
Wavefront
-
Properties
-
YAML
management.wavefront.api-token=YOUR_API_TOKEN
management:
wavefront:
api-token: "YOUR_API_TOKEN"
或者,你可以使用環境中的 Wavefront sidecar 或內部代理將指標資料轉發到 Wavefront API 主機:
-
Properties
-
YAML
management.wavefront.uri=proxy://:2878
management:
wavefront:
uri: "proxy://:2878"
如果你將指標釋出到 Wavefront 代理(如Wavefront 文件中所述),主機必須是 proxy://HOST:PORT 格式。 |
你還可以更改傳送指標到 Wavefront 的時間間隔:
-
Properties
-
YAML
management.wavefront.metrics.export.step=30s
management:
wavefront:
metrics:
export:
step: "30s"
支援的指標和計量器
Spring Boot 為各種技術提供了自動計量器註冊。在大多數情況下,預設設定提供了可以釋出到任何受支援監控系統的合理指標。
JVM 指標
自動配置使用核心 Micrometer 類啟用 JVM 指標。JVM 指標以 jvm.
計量器名稱釋出。
提供以下 JVM 指標:
-
各種記憶體和緩衝區池詳細資訊
-
與垃圾回收相關的統計資訊
-
執行緒利用率
-
載入和解除安裝的類數量
-
JVM 版本資訊
-
JIT 編譯時間
系統指標
自動配置使用核心 Micrometer 類啟用系統指標。系統指標以 system.
、process.
和 disk.
計量器名稱釋出。
提供以下系統指標:
-
CPU 指標
-
檔案描述符指標
-
正常執行時間指標(包括應用執行的時間量和絕對開始時間的固定儀表)
-
可用磁碟空間
應用啟動指標
自動配置暴露了應用啟動時間指標
-
application.started.time
: 應用啟動所需時間。 -
application.ready.time
: 應用準備好服務請求所需時間。
指標使用應用類的全限定名稱進行標記。
任務執行和排程指標
只要底層的 ThreadPoolExecutor
可用,自動配置就會為所有可用的 ThreadPoolTaskExecutor
和 ThreadPoolTaskScheduler
bean 啟用檢測。指標使用執行器名稱進行標記,執行器名稱派生自 bean 名稱。
JMS 指標
自動配置對所有可用的 JmsTemplate
bean 和使用 @JmsListener
註解的方法啟用檢測。這將分別產生 "jms.message.publish"
和 "jms.message.process"
指標。有關生成的觀測值的更多資訊,請參閱 Spring Framework 參考文件。
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
。
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
。DataSource 檢測產生計量器,表示連線池中當前處於活動狀態、空閒、最大允許和最小允許的連線數。
指標還透過基於 bean 名稱計算得出的 DataSource
名稱進行標記。
預設情況下,Spring Boot 為所有支援的 DataSource 提供元資料。如果你的常用 DataSource 不受支援,你可以新增額外的 DataSourcePoolMetadataProvider bean。有關示例,請參閱 DataSourcePoolMetadataProvidersConfiguration 。 |
此外,Hikari 特有的指標以 hikaricp
字首暴露。每個指標都使用連線池名稱進行標記(你可以透過 spring.datasource.name
控制)。
Hibernate 指標
如果 classpath 中包含 org.hibernate.orm:hibernate-micrometer
,所有啟用統計資訊的可用的 Hibernate EntityManagerFactory
例項都會被檢測,指標名稱為 hibernate
。
指標還透過派生自 bean 名稱的 EntityManagerFactory
名稱進行標記。
要啟用統計資訊,必須將標準 JPA 屬性 hibernate.generate_statistics
設定為 true
。你可以在自動配置的 EntityManagerFactory
上啟用它。
-
Properties
-
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 原生指標部分。
MongoDB 指標
本節簡要介紹 MongoDB 可用的指標。
MongoDB 命令指標
自動配置為自動配置的 MongoClient
註冊一個 MongoMetricsCommandListener
。
為傳送到底層 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()
}
}
要停用自動配置的命令指標,請設定以下屬性:
-
Properties
-
YAML
management.metrics.mongo.command.enabled=false
management:
metrics:
mongo:
command:
enabled: false
MongoDB 連線池指標
自動配置為自動配置的 MongoClient
註冊一個 MongoMetricsConnectionPoolListener
。
為連線池建立以下計量器指標:
-
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()
}
}
要停用自動配置的連線池指標,請設定以下屬性:
-
Properties
-
YAML
management.metrics.mongo.connectionpool.enabled=false
management:
metrics:
mongo:
connectionpool:
enabled: false
Jetty 指標
自動配置使用 Micrometer 的 JettyServerThreadPoolMetrics
繫結 Jetty 的 ThreadPool
指標。Jetty 的 Connector
例項的指標使用 Micrometer 的 JettyConnectionMetrics
繫結,當 server.ssl.enabled
設定為 true
時,還會繫結 Micrometer 的 JettySslHandshakeMetrics
。
Redis 指標
自動配置為自動配置的 LettuceConnectionFactory
註冊一個 MicrometerCommandLatencyRecorder
。有關更多詳細資訊,請參閱 Lettuce 文件的 Micrometer 指標部分。
註冊自定義指標
要註冊自定義指標,請將 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 管理的全域性登錄檔。 |
通用標籤
通用標籤通常用於按維度深入分析操作環境,例如主機、例項、區域、堆疊等。通用標籤應用於所有計量器,並且可以進行配置,如以下示例所示:
-
Properties
-
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
開頭的計量器。
-
Properties
-
YAML
management.metrics.enable.example.remote=false
management:
metrics:
enable:
example:
remote: false
以下屬性允許按計量器自定義:
屬性 | 描述 |
---|---|
|
是否接受具有特定 ID 的計量器。不被接受的計量器將從 |
|
是否釋出適合計算可聚合(跨維度)百分位數近似值的直方圖。 |
|
透過限制期望值的範圍來發布更少的直方圖桶。 |
|
釋出在你的應用中計算的百分位數。 |
|
透過將樣本累積在迴圈緩衝區中來更加重視最近的樣本,這些緩衝區在可配置的到期時間後輪換,並具有可配置的緩衝區長度。 |
|
釋出一個累積直方圖,其桶由你的服務水平目標定義。 |
有關 percentiles-histogram
、percentiles
和 slo
背後的概念的更多詳細資訊,請參閱 Micrometer 文件的 直方圖和百分位數部分。
Metrics 端點
Spring Boot 提供了一個 metrics
端點,你可以使用它來診斷性地檢查應用收集的指標。預設情況下該端點不可用,必須進行暴露。有關詳細資訊,請參閱暴露端點。
導航到 /actuator/metrics
會顯示可用計量器名稱的列表。你可以透過提供其名稱作為選擇器來深入檢視特定計量器的資訊,例如 /actuator/metrics/jvm.memory.max
。
此處使用的名稱應與程式碼中使用的名稱一致,而不是針對傳送到的監控系統(例如因 snake case 命名約定而在 Prometheus 中顯示為 |
你還可以在 URL 末尾新增任意數量的 tag=KEY:VALUE
查詢引數,以對計量器進行按維度深入分析,例如 /actuator/metrics/jvm.memory.max?tag=area:nonheap
。
報告的度量是與計量器名稱和已應用的任何標籤匹配的所有計量器的統計資訊的總和。在上面的示例中,返回的 |
與 Micrometer Observation 整合
一個 DefaultMeterObservationHandler
會自動註冊到 ObservationRegistry
,它為每個完成的觀測建立指標。