メトリクス
Spring Boot Actuator は、以下を含む多数のモニタリングシステム (英語) をサポートするアプリケーションメトリクスファサードである Micrometer (英語) の依存関係管理と自動構成を提供します。
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
(英語) を提供します。
この動作を制御するには、
|
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 にエクスポートするには、メトリクスを書き込むための org
、bucket
、認証 token
を構成します。以下を使用して、使用する Influx サーバー (英語) の場所を指定できます。
プロパティ
YAML
management.influx.metrics.export.uri=https://influx.example.com:8086
management:
influx:
metrics:
export:
uri: "https://influx.example.com:8086"
JMX
Micrometer は、JMX (英語) への階層マッピングを提供します。これは主に、メトリクスをローカルで表示するための安価でポータブルなメソッドです。デフォルトでは、メトリクスは metrics
JMX ドメインにエクスポートされます。以下を使用して、使用するドメインを指定できます。
プロパティ
YAML
management.jmx.metrics.export.domain=com.example.app.metrics
management:
jmx:
metrics:
export:
domain: "com.example.app.metrics"
Micrometer は、次元メーター ID をフラットな階層名にマップする (英語) 方法を制御するデフォルトの HierarchicalNameMapper
(英語) を提供します。
この動作を制御するには、
|
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 を定義することで完全な制御が可能になります。
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
にアクチュエーターエンドポイントを提供して、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 サポートを有効にするには、プロジェクトに次の依存関係を追加します。
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>prometheus-metrics-exporter-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 を提供することもできます。
シンプル
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 メトリクスが提供されます。
さまざまなメモリとバッファプールの詳細
ガベージコレクションに関連する統計
スレッドの使用率
仮想スレッドの統計 (英語) (このため、
io.micrometer:micrometer-java21
はクラスパス上に存在する必要があります)ロードおよびアンロードされたクラスの数
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 サーバーメトリクスは次の情報でタグ付けされます。
タグ | 説明 |
---|---|
| リクエストの処理中にスローされた例外の単純なクラス名。 |
| リクエストの方法 (たとえば、 |
| レスポンスのステータスコードに基づく、リクエストの結果。1xx は |
| レスポンスの HTTP ステータスコード (たとえば、 |
| 可能であれば、変数置換前のリクエストの URI テンプレート (たとえば、 |
タグをカスタマイズするには、JerseyObservationConvention
(英語) を実装する @Bean
(Javadoc) を提供します。
SSL バンドルメトリクス
Spring Boot Actuator は SSL バンドルの有効期限メトリクスを公開しています。メトリクス ssl.chain.expiry
は、各証明書チェーンの有効期限を秒単位で測定します。チェーンがすでに有効期限切れの場合、この数値は負の値になります。このメトリクスには、以下の情報がタグ付けされています。
タグ | 説明 |
---|---|
| 証明書 チェーンを含むバンドルの名前 |
| チェーンで最も早く有効期限が切れる証明書のシリアル番号 (16 進数形式) |
| 証明書の名前 チェーン。 |
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 Batch リファレンスドキュメントを参照してください。
Spring GraphQL メトリクス
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 (英語) アノテーションにより、メソッドの長いタスクタイマーが有効になります。長いタスクタイマーには別のメトリクス名が必要であり、短いタスクタイマーとスタックできます。 |
デフォルトでは、リポジトリ呼び出し関連のメトリクスは次の情報でタグ付けされています。
タグ | 説明 |
---|---|
| ソース |
| 呼び出された |
| 結果の状態( |
| 呼び出しからスローされた例外の単純なクラス名。 |
デフォルトのタグを置き換えるには、RepositoryTagsProvider
(Javadoc) を実装する @Bean
(Javadoc) を提供します。
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
という名前のタイマーメトリクスが作成されます。各メトリクスには、デフォルトで次の情報がタグ付けされています。
タグ | 説明 |
---|---|
| 発行されたコマンドの名前。 |
| コマンドの送信先のクラスターの ID。 |
| コマンドの送信先のサーバーのアドレス。 |
| コマンドの結果( |
デフォルトのメトリクスタグを置き換えるには、次の例に示すように、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
は、プールからの接続の待機キューの現在のサイズを報告します。
各メトリクスには、デフォルトで次の情報がタグ付けされています。
タグ | 説明 |
---|---|
| 接続プールが対応するクラスターの ID。 |
| 接続プールが対応するサーバーのアドレス。 |
デフォルトのメトリクスタグを置き換えるには、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
(英語) が使用されます。
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
次のプロパティでは、メーターごとのカスタマイズが可能です。
プロパティ | 説明 |
---|---|
| 特定の ID を持つメーターを受け入れるかどうか。受け入れられないメーターは |
| 集計可能な(ディメンション間)パーセンタイル近似の計算に適したヒストグラムを公開するかどうか。 |
| 期待値の範囲をクランプすることにより、公開するヒストグラムバケットの数を減らします。 |
| アプリケーションで計算されたパーセンタイル値を公開する |
| 構成可能な有効期限の後に回転するリングバッファーに、構成可能なバッファー長で蓄積することにより、最近のサンプルにより大きな重みを与えます。 |
| サービスレベルゴールによって定義されたバケットを含む累積ヒストグラムを公開します。 |
percentiles-histogram
、percentiles
、slo
の背景となる概念の詳細については、Micrometer ドキュメントのヒストグラムとパーセンタイル (英語) セクションを参照してください。
メトリクスエンドポイント
Spring Boot は、アプリケーションによって収集されたメトリクスを検査するために診断的に使用できる metrics
エンドポイントを提供します。エンドポイントはデフォルトでは使用できないため、公開する必要があります。詳細については、エンドポイントの公開を参照してください。
/actuator/metrics
に移動すると、使用可能なメーター名のリストが表示されます。セレクターとして名前を指定することにより、特定のメーターに関する情報を表示するためにドリルダウンできます(たとえば、/actuator/metrics/jvm.memory.max
)。
ここで使用する名前は、コードで使用されている名前と一致している必要があります。命名規則が提供された監視システム用に正規化された後の名前ではありません。つまり、 |
URL の末尾に任意の数の tag=KEY:VALUE
クエリパラメーターを追加して、メーターを次元的にドリルダウンすることもできます(たとえば、/actuator/metrics/jvm.memory.max?tag=area:nonheap
)。
報告される測定値は、メーター名と適用されたタグに一致するすべてのメーターの統計の合計です。前の例では、返される |
Micrometer Observation との統合
DefaultMeterObservationHandler
(英語) は ObservationRegistry
(英語) に自動的に登録され、完了した観測ごとにメトリクスが作成されます。