メトリクス

Spring Boot Actuator は、以下を含む多数のモニタリングシステム (英語) をサポートするアプリケーションメトリクスファサードである Micrometer (英語) の依存関係管理と自動構成を提供します。

入門

Spring Boot は複合 MeterRegistry (英語) を自動構成し、クラスパスで見つかったサポートされている実装ごとに、複合にレジストリを追加します。ランタイムクラスパスに micrometer-registry-{system} への依存関係があれば、Spring Boot はレジストリを構成できます。

ほとんどのレジストリは共通の機能を共有しています。たとえば、Micrometer レジストリの実装がクラスパス上にある場合でも、特定のレジストリを無効にすることができます。次の例では、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 (Javadoc) 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 トークンを提供する必要があります。

  • プロパティ

  • YAML

management.appoptics.metrics.export.api-token=YOUR_TOKEN
management:
  appoptics:
    metrics:
      export:
        api-token: "YOUR_TOKEN"

Atlas

デフォルトでは、メトリクスはローカルマシンで実行されている Atlas (英語) にエクスポートされます。Atlas サーバー [GitHub] (英語) の場所を指定できます。

  • プロパティ

  • 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 US サイト (英語) api.datadoghq.com (英語) )に送信されます。Datadog プロジェクトが他のサイトの 1 つでホストされている場合、またはプロキシを介してメトリクスを送信する必要がある場合は、それに応じて 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 は 2 つのメトリクス取り込み API を提供し、どちらも Micrometer (英語) 用に実装されています。Micrometer メトリクスの取り込みに関する Dynatrace のドキュメントは ​ ここ (英語) にあります。v1 名前空間の構成プロパティは、Timeseries v1 API (英語) にエクスポートする場合にのみ適用されます。v2 名前空間の構成プロパティは、Metrics v2 API (英語) にエクスポートする場合にのみ適用されます。この統合は、一度に v1 または v2 バージョンの API のいずれかにのみエクスポートできることに注意してください。ただし、v2 が推奨されます。device-id (v1 に必要だが、v2 では使用されない)が v1 名前空間に設定されている場合、メトリクスは v1 エンドポイントにエクスポートされます。それ以外の場合は、v2 が想定されます。

v2 API

v2API は 2 つの方法で使用できます。

自動構成

Dynatrace の自動構成は、OneAgent または Dynatrace OperatorforKubernetes によって監視されるホストで使用できます。

ローカル OneAgent : OneAgent がホストで実行されている場合、メトリクスはローカルの OneAgent 取り込みエンドポイント (英語) に自動的にエクスポートされます。取り込みエンドポイントは、メトリクスを Dynatrace バックエンドに転送します。

DynatraceKubernetes オペレーター : Dynatrace オペレーターがインストールされた Kubernetes で実行すると、レジストリは代わりにオペレーターからエンドポイント URI と API トークンを自動的に取得します。

これはデフォルトの動作であり、io.micrometer:micrometer-registry-dynatrace への依存以外に特別な設定は必要ありません。

手動構成

自動構成が使用できない場合は、Metrics v2 API (英語) のエンドポイントと API トークンが必要です。API トークン (英語) には、「メトリクスの取り込み」(metrics.ingest)権限が設定されている必要があります。トークンの範囲をこの 1 つの権限に制限することをお勧めします。エンドポイント 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 オペレーターが実行されている場合は、追加のメタデータ(たとえば、ホスト、プロセス、pod に関する)でメトリクスを強化します。

  • デフォルトの寸法: エクスポートされたすべてのメトリクスに追加されるキーと値のペアを指定します。同じキーのタグが Micrometer で指定されている場合、デフォルトの寸法を上書きします。

  • Dynatrace サマリー機器を使用する: 場合によっては、Micrometer Dynatrace レジストリが拒否されたメトリクスを作成しました。Micrometer 1.9.x では、これは Dynatrace 固有のサマリーインスツルメントを導入することで修正されました。このトグルを 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 の場合、v1 エンドポイントパスが自動的に追加されるため、パスなしで基本環境 URI を指定する必要があります。

バージョンに依存しない設定

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 は、次元メーター ID をフラットな階層名にマップする (英語) 方法を制御するデフォルトの HierarchicalNameMapper (英語) を提供します。

この動作を制御するには、GraphiteMeterRegistry (英語) を定義し、独自の HierarchicalNameMapper (英語) を提供します。独自に定義しない限り、自動構成された GraphiteConfig (英語) および Clock (英語) 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"

また、メトリクスがプッシュされるデータソースを識別するために、1 つ以上のタグを構成する必要があります。

  • プロパティ

  • 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 インスタンスにエクスポートされます。メトリクスを InfluxDBv2 にエクスポートするには、メトリクスを書き込むための 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 は、次元メーター ID をフラットな階層名にマップする (英語) 方法を制御するデフォルトの HierarchicalNameMapper (英語) を提供します。

この動作を制御するには、JmxMeterRegistry (英語) を定義し、独自の HierarchicalNameMapper (英語) を提供します。独自に定義しない限り、自動構成された JmxConfig (英語) および Clock (英語) 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 呼び出しを通じて公開されますが、クラスパスにある場合は Java AgentAPI を使用することもできます。

  • プロパティ

  • YAML

management.newrelic.metrics.export.client-provider-type=insights-agent
management:
  newrelic:
    metrics:
      export:
        client-provider-type: "insights-agent"

最後に、独自の NewRelicClientProvider (英語) Bean を定義することで完全な制御が可能になります。

OpenTelemetry

デフォルトでは、メトリクスはローカルマシンで実行されている OpenTelemetry (英語) にエクスポートされます。以下を使用して、使用する OpenTelemetry メトリクスエンドポイント (英語) の場所を指定できます。

  • プロパティ

  • 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"

Prometheus

Prometheus (英語) は、個々のアプリケーションインスタンスをスクレイピングまたはポーリングしてメトリクスを取得することを想定しています。Spring Boot は、/actuator/prometheus にアクチュエーターエンドポイントを提供して、Prometheus scrape (英語) を適切な形式で提示します。

デフォルトでは、エンドポイントは使用できないため、公開する必要があります。詳細については、エンドポイントの公開を参照してください。

次の例の 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 トレース (英語) を使用する場合、これは自動的に構成されますが、必要に応じて独自のものを作成することもできます。この機能は Prometheus 側で明示的に有効にする必要があり、OpenMetrics [GitHub] (英語) 形式を使用した場合にのみサポートされるため、Prometheus ドキュメント (英語) を確認してください。

スクレイピングするのに十分な期間存在しない可能性のある一時的なジョブまたはバッチジョブの場合は、Prometheus Pushgateway [GitHub] (英語) サポートを使用してメトリクスを Prometheus に公開できます。

Prometheus Pushgateway は、Prometheus 1.x クライアントがサポートを追加するまで、現時点では非推奨の Prometheus シンプルクライアントでのみ動作します。シンプルクライアントに切り替えるには、プロジェクトから 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 (Javadoc) Bean が自動的に構成されます。これにより、メトリクスの Prometheus Pushgateway へのプッシュが管理されます。

management.prometheus.metrics.export.pushgateway のプロパティを使用して PrometheusPushGatewayManager (Javadoc) を調整できます。高度な構成の場合は、独自の PrometheusPushGatewayManager (Javadoc) Bean を提供することもできます。

SignalFx

SignalFx レジストリは、定期的にメトリクスを SignalFx (英語) にプッシュします。メトリクスを SignalFx (英語) にエクスポートするには、アクセストークンを提供する必要があります。

  • プロパティ

  • YAML

management.signalfx.metrics.export.access-token=YOUR_ACCESS_TOKEN
management:
  signalfx:
    metrics:
      export:
        access-token: "YOUR_ACCESS_TOKEN"

メトリクスが SignalFx に送信される間隔を変更することもできます。

  • プロパティ

  • YAML

management.signalfx.metrics.export.step=30s
management:
  signalfx:
    metrics:
      export:
        step: "30s"

シンプル

Micrometer には、他のレジストリが構成されていない場合にフォールバックとして自動的に使用される、シンプルなメモリ内バックエンドが付属しています。これにより、メトリクスエンドポイントで収集されているメトリクスを確認できます。

インメモリバックエンドは、他の利用可能なバックエンドを使用するとすぐに無効になります。明示的に無効にすることもできます。

  • プロパティ

  • YAML

management.simple.metrics.export.enabled=false
management:
  simple:
    metrics:
      export:
        enabled: false

Stackdriver

Stackdriver レジストリは定期的に指標を Stackdriver にプッシュします。メトリクスを SaaS Stackdriver (英語) にエクスポートするには、Google クラウドプロジェクト 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"

Wavefront

Wavefront レジストリは、メトリクスを定期的に Wavefront (英語) にプッシュします。メトリクスを Wavefront (英語) に直接エクスポートする場合は、API トークンを提供する必要があります。

  • プロパティ

  • YAML

management.wavefront.api-token=YOUR_API_TOKEN
management:
  wavefront:
    api-token: "YOUR_API_TOKEN"

あるいは、環境内の Wavefront サイドカーまたは内部プロキシを使用して、メトリクスデータを Wavefront API ホストに転送することもできます。

  • プロパティ

  • YAML

management.wavefront.uri=proxy://localhost:2878
management:
  wavefront:
    uri: "proxy://localhost:2878"
メトリクスを Wavefront プロキシに公開する場合 ( Wavefront ドキュメント (英語) に従って)、ホストは proxy://HOST:PORT 形式である必要があります。

メトリクスが Wavefront に送信される間隔を変更することもできます。

  • プロパティ

  • 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: アプリケーションがリクエストを処理する準備ができるまでにかかる時間。

メトリクスは、アプリケーションクラスの完全修飾名でタグ付けされます。

ロガーメトリクス

自動構成により、Logback と Log4J2 の両方のイベントメトリクスが有効になります。詳細は、log4j2.events. または logback.events. メーター名で公開されています。

タスクの実行とスケジューリングの指標

自動構成により、基礎となる ThreadPoolExecutor (標準 Javadoc) が使用可能である限り、使用可能なすべての ThreadPoolTaskExecutor (Javadoc) および ThreadPoolTaskScheduler (Javadoc) Bean のインストルメンテーションが有効になります。メトリクスは、Bean 名から派生したエグゼキュータの名前でタグ付けされます。

JMS メトリクス

自動構成により、利用可能なすべての JmsTemplate (Javadoc) Bean と @JmsListener (Javadoc) アノテーション付きメソッドのインストルメンテーションが有効になります。これにより、それぞれ "jms.message.publish" および "jms.message.process" メトリクスが生成されます。生成された観測の詳細については、Spring Framework リファレンスドキュメントを参照してください。

Spring MVC メトリクス

自動構成により、Spring MVC コントローラーおよび機能ハンドラーによって処理されるすべてのリクエストのインストルメンテーションが可能になります。デフォルトでは、メトリクスは http.server.requests という名前で生成されます。management.observations.http.server.requests.name プロパティを設定することにより、名前をカスタマイズできます。

デフォルトのタグを追加するには、org.springframework.http.server.observation パッケージの DefaultServerRequestObservationConvention (Javadoc) を継承する @Bean (Javadoc) を提供します。デフォルトのタグを置き換えるには、ServerRequestObservationConvention (Javadoc) を実装する @Bean (Javadoc) を提供します。

場合によっては、Web コントローラーで処理される例外は、リクエストメトリクスタグとして記録されません。アプリケーションは、処理された例外をリクエスト属性として設定することにより、オプトインして例外を記録できます。

デフォルトでは、すべてのリクエストが処理されます。フィルターをカスタマイズするには、FilterRegistrationBean<ServerHttpObservationFilter> を実装する @Bean (Javadoc) を提供します。

Spring WebFlux メトリクス

自動構成により、Spring WebFlux コントローラーおよび機能ハンドラーによって処理されるすべてのリクエストのインストルメンテーションが可能になります。デフォルトでは、メトリクスは http.server.requests という名前で生成されます。management.observations.http.server.requests.name プロパティを設定することにより、名前をカスタマイズできます。

デフォルトのタグを追加するには、org.springframework.http.server.reactive.observation パッケージの DefaultServerRequestObservationConvention (Javadoc) を継承する @Bean (Javadoc) を提供します。デフォルトのタグを置き換えるには、ServerRequestObservationConvention (Javadoc) を実装する @Bean (Javadoc) を提供します。

場合によっては、コントローラーおよびハンドラー関数で処理される例外は、リクエストメトリクスタグとして記録されません。アプリケーションは、処理された例外をリクエスト属性として設定することにより、オプトインして例外を記録できます。

Jersey サーバーメトリクス

自動構成により、Jersey JAX-RS 実装によって処理されるすべてのリクエストのインストルメンテーションが可能になります。デフォルトでは、メトリクスは http.server.requests という名前で生成されます。management.observations.http.server.requests.name プロパティを設定することにより、名前をカスタマイズできます。

デフォルトでは、Jersey サーバーメトリクスは次の情報でタグ付けされます。

タグ 説明

exception

リクエストの処理中にスローされた例外の単純なクラス名。

method

リクエストの方法 (たとえば、GET または POST)

outcome

レスポンスのステータスコードに基づく、リクエストの結果。1xx は INFORMATIONAL、2xx は SUCCESS、3xx は REDIRECTION、4xx は CLIENT_ERROR、5xx は SERVER_ERROR です。

status

レスポンスの HTTP ステータスコード (たとえば、200 または 500)

uri

可能であれば、変数置換前のリクエストの URI テンプレート (たとえば、/api/person/{id})

タグをカスタマイズするには、JerseyObservationConvention (英語) を実装する @Bean (Javadoc) を提供します。

HTTP クライアントメトリクス

Spring Boot Actuator は、RestTemplate (Javadoc) WebClient (Javadoc) RestClient (Javadoc) のインストルメンテーションを管理します。そのためには、自動構成されたビルダーを挿入し、それを使用してインスタンスを作成する必要があります。

このインストルメンテーションを担当するカスタマイザー、つまり ObservationRestTemplateCustomizer (Javadoc) ObservationWebClientCustomizer (Javadoc) ObservationRestClientCustomizer (Javadoc) を手動で適用することもできます。

デフォルトでは、メトリクスは http.client.requests という名前で生成されます。management.observations.http.client.requests.name プロパティを設定することにより、名前をカスタマイズできます。

RestTemplate (Javadoc) または RestClient (Javadoc) を使用するときにタグをカスタマイズするには、org.springframework.http.client.observation パッケージの ClientRequestObservationConvention (Javadoc) を実装する @Bean (Javadoc) を提供します。WebClient (Javadoc) を使用するときにタグをカスタマイズするには、org.springframework.web.reactive.function.client パッケージの ClientRequestObservationConvention (Javadoc) を実装する @Bean (Javadoc) を提供します。

Tomcat メトリクス

自動構成では、MBean Registry [Apache] (英語) が有効になっている場合にのみ Tomcat のインストルメンテーションが有効になります。デフォルトでは、MBean レジストリは無効になっていますが、server.tomcat.mbeanregistry.enabled を true に設定することで有効にすることができます。

Tomcat メトリクスは、tomcat. メーター名で公開されています。

キャッシュメトリクス

自動構成により、起動時に、cache というプレフィックスが付いたメトリクスを使用して、使用可能なすべての Cache (Javadoc) インスタンスのインストルメンテーションが有効になります。キャッシュインストルメンテーションは、基本的なメトリクスセットに対して標準化されています。追加のキャッシュ固有のメトリクスも利用できます。

次のキャッシュライブラリがサポートされています。

  • Cache2k

  • Caffeine

  • Hazelcast

  • 準拠する JCache(JSR-107)実装

  • Redis

メトリクスは、キャッシュの名前と、Bean の名前から派生した CacheManager (Javadoc) の名前でタグ付けされます。

起動時に構成されたキャッシュのみがレジストリにバインドされます。起動フェーズ後にオンザフライで作成されたキャッシュやプログラムによって作成されたキャッシュなど、キャッシュの構成で定義されていないキャッシュの場合は、明示的な登録が必要です。そのプロセスを容易にするために、CacheMetricsRegistrar (Javadoc) Bean が使用可能になっています。

Spring Batch メトリクス

Spring GraphQL メトリクス

DataSource メトリクス

自動構成により、jdbc.connections というプレフィックスが付いたメトリクスを持つ、使用可能なすべての DataSource (標準 Javadoc) オブジェクトのインストルメンテーションが有効になります。データソースのインストルメンテーションにより、プール内の現在アクティブな接続、アイドル状態の接続、最大許容接続、最小許容接続を表すゲージが生成されます。

メトリクスは、Bean 名に基づいて計算された DataSource (標準 Javadoc) の名前によってもタグ付けされます。

デフォルトでは、Spring Boot はサポートされているすべてのデータソースのメタデータを提供します。お気に入りのデータソースがサポートされていない場合は、追加の DataSourcePoolMetadataProvider (Javadoc) Bean を追加できます。例については、DataSourcePoolMetadataProvidersConfiguration (Javadoc) を参照してください。

また、光固有のメトリクスは hikaricp プレフィックスで公開されます。各メトリクスは、プールの名前でタグ付けされます(spring.datasource.name で制御できます)。

Hibernate メトリクス

org.hibernate.orm:hibernate-micrometer がクラスパス上にある場合、統計が有効になっている利用可能なすべての Hibernate EntityManagerFactory (英語) インスタンスは、hibernate という名前のメトリクスを使用して計測されます。

メトリクスは、Bean の名前から派生した EntityManagerFactory (英語) の名前でもタグ付けされます。

統計を有効にするには、標準 JPA プロパティ hibernate.generate_statistics を true に設定する必要があります。自動構成された EntityManagerFactory (英語) でこれを有効にできます。

  • プロパティ

  • YAML

spring.jpa.properties[hibernate.generate_statistics]=true
spring:
  jpa:
    properties:
      "[hibernate.generate_statistics]": true

Spring Data リポジトリメトリクス

自動構成により、すべての Spring Data Repository (Javadoc) メソッド呼び出しのインストルメンテーションが有効になります。デフォルトでは、メトリクスは spring.data.repository.invocations という名前で生成されます。management.metrics.data.repository.metric-name プロパティを設定することで名前をカスタマイズできます。

io.micrometer.core.annotation パッケージの @Timed (英語) アノテーションは、Repository (Javadoc) インターフェースとメソッドでサポートされています。すべての Repository (Javadoc) 呼び出しのメトリクスを記録したくない場合は、management.metrics.data.repository.autotime.enabled を false に設定し、代わりに @Timed (英語) アノテーションのみを使用できます。

longTask = true を使用した @Timed (英語) アノテーションにより、メソッドの長いタスクタイマーが有効になります。長いタスクタイマーには別のメトリクス名が必要であり、短いタスクタイマーとスタックできます。

デフォルトでは、リポジトリ呼び出し関連のメトリクスは次の情報でタグ付けされています。

タグ 説明

repository

ソース Repository (Javadoc) の単純なクラス名。

method

呼び出された Repository (Javadoc) メソッドの名前。

state

結果の状態(SUCCESSERRORCANCELED、または RUNNING)。

exception

呼び出しからスローされた例外の単純なクラス名。

デフォルトのタグを置き換えるには、RepositoryTagsProvider (Javadoc) を実装する @Bean (Javadoc) を提供します。

RabbitMQ メトリクス

自動構成により、rabbitmq という名前のメトリクスを使用して、使用可能なすべての RabbitMQ 接続ファクトリをインストルメント化できます。

Spring Integration メトリクス

Spring Integration は、MeterRegistry (英語) Bean が利用可能な場合は常に、自動的に Micrometer サポートを提供します。メトリクスは、spring.integration. メーター名で公開されます。

Kafka メトリクス

自動構成では、自動構成されたコンシューマーファクトリとプロデューサーファクトリにそれぞれ MicrometerConsumerListener (Javadoc) MicrometerProducerListener (Javadoc) が登録されます。また、StreamsBuilderFactoryBean (Javadoc) KafkaStreamsMicrometerListener (Javadoc) も登録されます。詳細については、Spring Kafka ドキュメントの Micrometer ネイティブメトリクスセクションを参照してください。

MongoDB メトリクス

このセクションでは、MongoDB で使用可能なメトリクスについて簡単に説明します。

MongoDB コマンドメトリクス

自動構成では、自動構成された MongoClient (英語) とともに MongoMetricsCommandListener (英語) が登録されます。

基礎となる MongoDB ドライバーに発行されたコマンドごとに、mongodb.driver.commands という名前のタイマーメトリクスが作成されます。各メトリクスには、デフォルトで次の情報がタグ付けされています。

タグ 説明

command

発行されたコマンドの名前。

cluster.id

コマンドの送信先のクラスターの ID。

server.address

コマンドの送信先のサーバーのアドレス。

status

コマンドの結果(SUCCESS または FAILED)。

デフォルトのメトリクスタグを置き換えるには、次の例に示すように、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.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 は、プールからの接続の待機キューの現在のサイズを報告します。

各メトリクスには、デフォルトで次の情報がタグ付けされています。

タグ 説明

cluster.id

接続プールが対応するクラスターの 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.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 (英語) が使用されます。

@Timed アノテーションのサポート

@Timed (英語) アノテーションのスキャンを有効にするには、management.observations.annotations.enabled プロパティを true に設定する必要があります。Micrometer ドキュメント (英語) を参照してください。

Redis メトリクス

自動構成では、自動構成された LettuceConnectionFactory (Javadoc) 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 管理ではないグローバルレジストリを使用します。

共通タグ

一般的なタグは、一般に、ホスト、インスタンス、リージョン、スタックなどのオペレーティング環境でのディメンションのドリルダウンに使用されます。Commons タグはすべてのメーターに適用され、次の例に示すように構成できます。

  • プロパティ

  • 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 (Javadoc) を使用して、指定された名前で始まるすべてのメーター 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 統計は、ヒープの「コードキャッシュ」、「圧縮クラススペース」、「メタスペース」領域の最大メモリフットプリントの合計です。「メタスペース」の最大サイズのみを表示したい場合は、tag=id:Metaspace、つまり /actuator/metrics/jvm.memory.max?tag=area:nonheap&tag=id:Metaspace を追加できます。

Micrometer Observation との統合

DefaultMeterObservationHandler (英語) ObservationRegistry (英語) に自動的に登録され、完了した観測ごとにメトリクスが作成されます。