メトリクス
Spring Boot Actuator は、以下を含む多数のモニタリングシステム (英語) をサポートするアプリケーションメトリクスファサードである Micrometer (英語) の依存関係管理と自動構成を提供します。
Micrometer の機能の詳細については、そのリファレンスドキュメント (英語) 、特に概念のセクションを参照してください (英語) 。 |
入門
Spring Boot は、コンポジット MeterRegistry
を自動構成し、クラスパスで検出されたサポートされている各実装のレジストリをコンポジットに追加します。Spring Boot がレジストリを設定するには、ランタイムクラスパスで micrometer-registry-{system}
に依存していれば十分です。
ほとんどのレジストリは共通の機能を共有しています。たとえば、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
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 を定義することで、完全に制御できます。
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
Bean が自動的に構成されます。これにより、メトリクスの Prometheus Pushgateway へのプッシュが管理されます。
management.prometheus.metrics.export.pushgateway
のプロパティを使用して、PrometheusPushGatewayManager
を調整できます。高度な構成の場合は、独自の PrometheusPushGatewayManager
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
が使用可能である限り、使用可能なすべての ThreadPoolTaskExecutor
および ThreadPoolTaskScheduler
Bean のインスツルメンテーションが可能になります。メトリクスは、Bean 名から派生したエグゼキュータの名前でタグ付けされます。
JMS メトリクス
自動構成により、利用可能なすべての JmsTemplate
Bean および @JmsListener
アノテーション付きメソッドのインストルメンテーションが有効になります。これにより、"jms.message.publish"
メトリクスと "jms.message.process"
メトリクスがそれぞれ生成されます。生成された観測の詳細については、Spring Framework リファレンスドキュメントを参照してください。
Spring MVC メトリクス
自動構成により、Spring MVC コントローラーおよび機能ハンドラーによって処理されるすべてのリクエストのインストルメンテーションが可能になります。デフォルトでは、メトリクスは http.server.requests
という名前で生成されます。management.observations.http.server.requests.name
プロパティを設定することにより、名前をカスタマイズできます。
デフォルトのタグに追加するには、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
プロパティを設定することにより、名前をカスタマイズできます。
デフォルトのタグに追加するには、org.springframework.http.server.reactive.observation
パッケージから DefaultServerRequestObservationConvention
を継承する @Bean
を提供します。デフォルトのタグを置き換えるには、ServerRequestObservationConvention
を実装する @Bean
を提供します。
場合によっては、コントローラーおよびハンドラー関数で処理される例外は、リクエストメトリクスタグとして記録されません。アプリケーションは、処理された例外をリクエスト属性として設定することにより、オプトインして例外を記録できます。 |
Jersey サーバーメトリクス
自動構成により、Jersey JAX-RS 実装によって処理されるすべてのリクエストのインストルメンテーションが可能になります。デフォルトでは、メトリクスは http.server.requests
という名前で生成されます。management.observations.http.server.requests.name
プロパティを設定することにより、名前をカスタマイズできます。
デフォルトでは、Jersey サーバーメトリクスは次の情報でタグ付けされます。
タグ | 説明 |
---|---|
| リクエストの処理中にスローされた例外の単純なクラス名。 |
| リクエストの方法 (たとえば、 |
| レスポンスのステータスコードに基づく、リクエストの結果。1xx は |
| レスポンスの HTTP ステータスコード (たとえば、 |
| 可能であれば、変数置換前のリクエストの URI テンプレート (たとえば、 |
タグをカスタマイズするには、JerseyObservationConvention
を実装する @Bean
を提供します。
HTTP クライアントメトリクス
Spring Boot Actuator は RestTemplate
、WebClient
、RestClient
の計装を管理します。そのためには、自動構成ビルダーを挿入し、それを使用してインスタンスを作成する必要があります。
RestTemplate
用RestTemplateBuilder
WebClient
用WebClient.Builder
RestClient
用RestClient.Builder
このインスツルメンテーションを担当するカスタマイザー ( ObservationRestTemplateCustomizer
、ObservationWebClientCustomizer
、ObservationRestClientCustomizer
) を手動で適用することもできます。
デフォルトでは、メトリクスは http.client.requests
という名前で生成されます。management.observations.http.client.requests.name
プロパティを設定することにより、名前をカスタマイズできます。
RestTemplate
または RestClient
を使用するときにタグをカスタマイズするには、org.springframework.http.client.observation
パッケージの ClientRequestObservationConvention
を実装する @Bean
を提供します。WebClient
を使用するときにタグをカスタマイズするには、org.springframework.web.reactive.function.client
パッケージから ClientRequestObservationConvention
を実装する @Bean
を提供します。
Tomcat メトリクス
自動構成により、MBeanRegistry
が有効になっている場合にのみ Tomcat のインストルメンテーションが有効になります。デフォルトでは、MBeanRegistry
は無効になっていますが、server.tomcat.mbeanregistry.enabled
を true
に設定することで有効にできます。
Tomcat メトリクスは、tomcat.
メーター名で公開されています。
キャッシュメトリクス
自動構成により、起動時に使用可能なすべての Cache
インスタンスのインストルメンテーションが可能になり、メトリクスの前に cache
が付けられます。キャッシュインストルメンテーションは、メトリクスの基本セットに対して標準化されています。追加のキャッシュ固有のメトリクスも利用できます。
次のキャッシュライブラリがサポートされています。
Cache2k
Caffeine
Hazelcast
準拠する JCache(JSR-107)実装
Redis
メトリクスは、キャッシュの名前と、Bean 名から派生した CacheManager
の名前でタグ付けされます。
起動時に構成されたキャッシュのみがレジストリにバインドされます。オンザフライで作成されたキャッシュや起動フェーズ後にプログラムで作成されたキャッシュなど、キャッシュの構成で定義されていないキャッシュの場合は、明示的な登録が必要です。そのプロセスを容易にするために、CacheMetricsRegistrar Bean が利用可能になります。 |
Spring Batch メトリクス
Spring Batch リファレンスドキュメントを参照してください。
Spring GraphQL メトリクス
Spring GraphQL リファレンスドキュメントを参照してください。
DataSource メトリクス
自動構成により、jdbc.connections
で始まるメトリクスを使用して、使用可能なすべての DataSource
オブジェクトをインストルメント化できます。データソースインストルメンテーションは、プール内の現在アクティブ、アイドル、最大許容、最小許容接続を表すゲージになります。
メトリクスは、Bean 名に基づいて計算された DataSource
の名前でもタグ付けされます。
デフォルトでは、Spring Boot はサポートされているすべてのデータソースのメタデータを提供します。お気に入りのデータソースがサポートされていない場合は、DataSourcePoolMetadataProvider Bean を追加できます。例については、DataSourcePoolMetadataProvidersConfiguration を参照してください。 |
また、光固有のメトリクスは 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
メソッド呼び出しのインストルメンテーションが可能になります。デフォルトでは、メトリクスは 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 アノテーションにより、メソッドの長いタスクタイマーが有効になります。長いタスクタイマーには個別のメトリクス名が必要であり、短いタスクタイマーとスタックできます。 |
デフォルトでは、リポジトリ呼び出し関連のメトリクスは次の情報でタグ付けされています。
タグ | 説明 |
---|---|
| ソース |
| 呼び出された |
| 結果の状態( |
| 呼び出しからスローされた例外の単純なクラス名。 |
デフォルトのタグを置き換えるには、RepositoryTagsProvider
を実装する @Bean
を提供します。
Spring Integration メトリクス
Spring Integration は、MeterRegistry
Bean が使用可能な場合は常に、Micrometer サポートを自動的に提供します。メトリクスは、spring.integration.
メーター名で公開されています。
Kafka メトリクス
自動構成は、自動構成されたコンシューマーファクトリとプロデューサーファクトリにそれぞれ MicrometerConsumerListener
と MicrometerProducerListener
を登録します。また、StreamsBuilderFactoryBean
の KafkaStreamsMicrometerListener
を登録します。詳細については、Spring Kafka ドキュメントの Micrometer ネイティブメトリクスセクションを参照してください。
MongoDB メトリクス
このセクションでは、MongoDB で使用可能なメトリクスについて簡単に説明します。
MongoDB コマンドメトリクス
自動構成は、MongoMetricsCommandListener
を自動構成された MongoClient
に登録します。
基礎となる 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 接続プールメトリクス
自動構成は、MongoMetricsConnectionPoolListener
を自動構成された MongoClient
に登録します。
次のゲージメトリクスが接続プール用に作成されます。
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
にバインドされます。
@Timed アノテーションのサポート
@Timed
アノテーションのスキャンを有効にするには、management.observations.annotations.enabled
プロパティを true
に設定する必要があります。Micrometer ドキュメント (英語) をご参照ください。
Redis メトリクス
自動構成は、自動構成された LettuceConnectionFactory
の MicrometerCommandLatencyRecorder
を登録します。詳細については、Lettuce ドキュメントの Micrometer メトリクスセクション (英語) を参照してください。
カスタムメトリクスの登録
カスタムメトリクスを登録するには、MeterRegistry
をコンポーネントに挿入します。
Java
Kotlin
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;
import org.springframework.stereotype.Component;
@Component
public class MyBean {
private final Dictionary dictionary;
public MyBean(MeterRegistry registry) {
this.dictionary = Dictionary.load();
registry.gauge("dictionary.size", Tags.empty(), this.dictionary.getWords().size());
}
}
import io.micrometer.core.instrument.MeterRegistry
import io.micrometer.core.instrument.Tags
import org.springframework.stereotype.Component
@Component
class MyBean(registry: MeterRegistry) {
private val dictionary: Dictionary
init {
dictionary = Dictionary.load()
registry.gauge("dictionary.size", Tags.empty(), dictionary.words.size)
}
}
メトリクスが他の Bean に依存している場合は、MeterBinder
を使用して登録することをお勧めします。
Java
Kotlin
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.context.annotation.Bean;
public class MyMeterBinderConfiguration {
@Bean
public MeterBinder queueSize(Queue queue) {
return (registry) -> Gauge.builder("queueSize", queue::size).register(registry);
}
}
import io.micrometer.core.instrument.Gauge
import io.micrometer.core.instrument.binder.MeterBinder
import org.springframework.context.annotation.Bean
class MyMeterBinderConfiguration {
@Bean
fun queueSize(queue: Queue): MeterBinder {
return MeterBinder { registry ->
Gauge.builder("queueSize", queue::size).register(registry)
}
}
}
MeterBinder
を使用すると、正しい依存関連が設定され、メトリクスの値が取得されたときに Bean が使用可能になります。MeterBinder
の実装は、コンポーネントまたはアプリケーション全体で一連のメトリクスを繰り返し計測する場合にも役立ちます。
デフォルトでは、すべての MeterBinder Bean のメトリクスは、Spring が管理する MeterRegistry に自動的にバインドされます。 |
個々の指標のカスタマイズ
特定の Meter
インスタンスにカスタマイズを適用する必要がある場合は、io.micrometer.core.instrument.config.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 に自動的にバインドされます。Metrics の静的メソッドではなく、Spring が管理する MeterRegistry を使用してメトリクスを登録してください。これらは、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
を使用して、指定された名前で始まるすべてのメーター 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
)。
報告される測定値は、メーター名と適用されたタグに一致するすべてのメーターの統計の合計です。前の例では、返される |