度量

Spring Boot Actuator 為 Micrometer 提供依賴管理和自動配置,Micrometer 是一個應用指標門面,支援眾多監控系統,包括:

要了解 Micrometer 的更多功能,請參閱其參考文件,尤其是概念部分

開始入門

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

預設情況下,指標匯出到執行在您本地機器上的 Atlas。您可以提供 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

Datadog 登錄檔會定期將指標推送到 datadoghq。要將指標匯出到 Datadog,您必須提供您的 API 金鑰

  • 屬性

  • 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 的 v1v2 版本,其中 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 如何對映到扁平的分層名稱

要控制此行為,請定義您自己的 GraphiteMeterRegistry 並提供您自己的 HierarchicalNameMapper。除非您定義自己的 GraphiteConfigClock bean,否則將提供自動配置的這些 bean

  • Java

  • Kotlin

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.graphite.GraphiteConfig;
import io.micrometer.graphite.GraphiteMeterRegistry;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyGraphiteConfiguration {

	@Bean
	public GraphiteMeterRegistry graphiteMeterRegistry(GraphiteConfig config, Clock clock) {
		return new GraphiteMeterRegistry(config, clock, this::toHierarchicalName);
	}

	private String toHierarchicalName(Meter.Id id, NamingConvention convention) {
		return ...
	}

}
import io.micrometer.core.instrument.Clock
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.core.instrument.util.HierarchicalNameMapper
import io.micrometer.graphite.GraphiteConfig
import io.micrometer.graphite.GraphiteMeterRegistry
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyGraphiteConfiguration {

	@Bean
	fun graphiteMeterRegistry(config: GraphiteConfig, clock: Clock): GraphiteMeterRegistry {
		return GraphiteMeterRegistry(config, clock, this::toHierarchicalName)
	}
	private fun toHierarchicalName(id: Meter.Id, convention: NamingConvention): String {
		return  ...
	}

}

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,請配置用於寫入指標的 orgbucket 和身份驗證 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 如何對映到扁平的分層名稱

要控制此行為,請定義您自己的 JmxMeterRegistry 並提供您自己的 HierarchicalNameMapper。除非您定義自己的 JmxConfigClock bean,否則將提供自動配置的這些 bean

  • Java

  • Kotlin

import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.NamingConvention;
import io.micrometer.core.instrument.util.HierarchicalNameMapper;
import io.micrometer.jmx.JmxConfig;
import io.micrometer.jmx.JmxMeterRegistry;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration(proxyBeanMethods = false)
public class MyJmxConfiguration {

	@Bean
	public JmxMeterRegistry jmxMeterRegistry(JmxConfig config, Clock clock) {
		return new JmxMeterRegistry(config, clock, this::toHierarchicalName);
	}

	private String toHierarchicalName(Meter.Id id, NamingConvention convention) {
		return ...
	}

}
import io.micrometer.core.instrument.Clock
import io.micrometer.core.instrument.Meter
import io.micrometer.core.instrument.config.NamingConvention
import io.micrometer.core.instrument.util.HierarchicalNameMapper
import io.micrometer.jmx.JmxConfig
import io.micrometer.jmx.JmxMeterRegistry
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration(proxyBeanMethods = false)
class MyJmxConfiguration {

	@Bean
	fun jmxMeterRegistry(config: JmxConfig, clock: Clock): JmxMeterRegistry {
		return JmxMeterRegistry(config, clock, this::toHierarchicalName)
	}

	private fun toHierarchicalName(id: Meter.Id, convention: NamingConvention): String {
		return  ...
	}

}

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

New Relic 登錄檔會定期將指標推送到 New Relic。要將指標匯出到 New Relic,您必須提供您的 API 金鑰和賬戶 ID

  • 屬性

  • 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:應用程式準備好處理請求所需的時間。

指標透過應用程式類的完全限定名稱進行標記。

日誌器指標

自動配置為 Logback 和 Log4J2 啟用事件指標。詳細資訊以 log4j2.events.logback.events. 儀表名稱釋出。

任務執行和排程指標

自動配置啟用了所有可用的 ThreadPoolTaskExecutorThreadPoolTaskScheduler bean 的檢測,只要底層的 ThreadPoolExecutor 可用。指標由執行器的名稱標記,該名稱派生自 bean 名稱。

JMS 指標

自動配置啟用了所有可用的 JmsTemplate bean 和 @JmsListener 註解方法的檢測。這將分別生成 "jms.message.publish""jms.message.process" 指標。有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件

使用 JmsTemplate bean 的 JmsClientJmsMessagingTemplate 也被檢測。

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 伺服器指標會標記以下資訊

標籤 描述

exception

處理請求時丟擲的任何異常的簡單類名。

method

請求的方法(例如,GETPOST

outcome

請求的結果,基於響應的狀態碼。1xx 是 INFORMATIONAL,2xx 是 SUCCESS,3xx 是 REDIRECTION,4xx 是 CLIENT_ERROR,5xx 是 SERVER_ERROR

status

響應的 HTTP 狀態碼(例如,200500

uri

如果可能,請求的 URI 模板在變數替換之前(例如,/api/person/{id}

要自定義標籤,請提供一個實現 JerseyObservationConvention@Bean

SSL 捆綁包指標

Spring Boot Actuator 釋出有關 SSL 捆綁包的到期指標。ssl.chain.expiry 指標以秒為單位衡量每個證書鏈的到期日期。如果鏈已過期,此數字將為負數。此指標標記有以下資訊

標籤 描述

bundle

包含證書鏈的捆綁包名稱

certificate

鏈中最早過期的證書的序列號(十六進位制格式)

chain

證書鏈的名稱。

HTTP 客戶端指標

Spring Boot Actuator 管理 RestTemplateWebClientRestClient 的檢測。為此,您必須注入自動配置的構建器並使用它來建立例項

您還可以手動應用負責此檢測的自定義器,即 ObservationRestTemplateCustomizerObservationWebClientCustomizerObservationRestClientCustomizer

預設情況下,指標以 http.client.requests 名稱生成。您可以透過設定 management.observations.http.client.requests.name 屬性來自定義名稱。

有關生成的觀察的更多資訊,請參閱 Spring Framework 參考文件

在使用 RestTemplateRestClient 時自定義標籤,請提供一個實現 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 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 呼叫相關的指標會標記以下資訊

標籤 描述

repository

Repository 的簡單類名。

method

被呼叫的 Repository 方法的名稱。

state

結果狀態 (SUCCESS, ERROR, CANCELED, 或 RUNNING)。

exception

從呼叫中丟擲的任何異常的簡單類名。

要替換預設標籤,請提供一個實現 RepositoryTagsProvider@Bean

RabbitMQ 指標

自動配置啟用了所有可用的 RabbitMQ 連線工廠的檢測,指標名為 rabbitmq

Spring Integration 指標

只要存在 MeterRegistry bean,Spring Integration 就會自動提供 Micrometer 支援。指標以 spring.integration. 儀表名稱釋出。

Kafka 指標

自動配置分別註冊了一個 MicrometerConsumerListenerMicrometerProducerListener 用於自動配置的消費者工廠和生產者工廠。它還為 StreamsBuilderFactoryBean 註冊了一個 KafkaStreamsMicrometerListener。有關更多詳細資訊,請參閱 Spring Kafka 文件的 Micrometer Native Metrics 部分。

MongoDB 指標

本節簡要描述了 MongoDB 的可用指標。

MongoDB 命令指標

自動配置將 MongoMetricsCommandListener 註冊到自動配置的 MongoClient

為向底層 MongoDB 驅動程式發出的每個命令建立名為 mongodb.driver.commands 的計時器指標。每個指標預設標記以下資訊

標籤 描述

command

發出的命令的名稱。

cluster.id

傳送命令的叢集識別符號。

server.address

傳送命令的伺服器地址。

status

命令的結果 (SUCCESSFAILED)。

要替換預設指標標籤,請定義一個 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 報告連線池的等待佇列的當前大小。

每個指標預設標記以下資訊

標籤 描述

cluster.id

連線池對應的叢集識別符號。

server.address

連線池對應的伺服器地址。

要替換預設指標標籤,請定義一個 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"

上述示例為所有儀表添加了 regionstack 標籤,值分別為 us-east-1prod

如果您使用 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

以下屬性允許每儀表自定義

表 1. 每儀表自定義
財產 描述

management.metrics.enable

是否接受具有某些 ID 的儀表。不接受的儀表將從 MeterRegistry 中過濾掉。

management.metrics.distribution.percentiles-histogram

是否釋出適合計算可聚合(跨維度)百分位數近似值的直方圖。

management.metrics.distribution.minimum-expected-value, management.metrics.distribution.maximum-expected-value

透過限制預期值的範圍來發布更少的直方圖桶。

management.metrics.distribution.percentiles

釋出在您的應用程式中計算的百分位數

management.metrics.distribution.expiry, management.metrics.distribution.buffer-length

透過將它們累積在環形緩衝區中來給予最近的樣本更大的權重,這些環形緩衝區在可配置的到期時間後輪換,具有可配置的緩衝區長度。

management.metrics.distribution.slo

釋出一個累積直方圖,其桶由您的服務級別目標定義。

有關 percentiles-histogrampercentilesslo 背後的概念的更多詳細資訊,請參閱 Micrometer 文件的 直方圖和百分位數 部分。

指標端點

Spring Boot 提供了一個 metrics 端點,您可以使用它診斷性地檢查應用程式收集的指標。該端點預設不可用,必須公開。有關詳細資訊,請參閱公開端點

導航到 /actuator/metrics 會顯示可用儀表名稱列表。您可以透過提供儀表名稱作為選擇器來深入檢視特定儀表的資訊——例如,/actuator/metrics/jvm.memory.max

您在此處使用的名稱應與程式碼中使用的名稱匹配,而不是在對用於其傳送到的監控系統進行命名約定標準化後的名稱。換句話說,如果 jvm.memory.max 在 Prometheus 中由於其蛇形命名約定而顯示為 jvm_memory_max,則在檢查 metrics 端點中的儀表時,您仍然應該使用 jvm.memory.max 作為選擇器。

您還可以在 URL 末尾新增任意數量的 tag=KEY:VALUE 查詢引數,以對儀表進行維度細分——例如,/actuator/metrics/jvm.memory.max?tag=area:nonheap

報告的測量值是所有匹配儀表名稱和已應用標籤的儀表的統計資料之。在前面的示例中,返回的 Value 統計資料是堆的“Code Cache”、“Compressed Class Space”和“Metaspace”區域的最大記憶體佔用量之和。如果您只想檢視“Metaspace”的最大大小,可以新增一個額外的 tag=id:Metaspace——即 /actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace

與 Micrometer Observation 的整合

一個 DefaultMeterObservationHandler 會自動註冊到 ObservationRegistry 上,它會為每個完成的觀察建立指標。

© . This site is unofficial and not affiliated with VMware.