監視とメトリクス

バージョン 4.2 以降、Spring Batch は Micrometer (英語) に基づいたバッチ監視およびメトリクスのサポートを提供します。このセクションでは、すぐに使用できるメトリクスと、カスタムメトリクスの提供方法について説明します。

組み込みメトリクス

メトリクスコレクションには、特定の構成は必要ありません。フレームワークによって提供されるすべてのメトリクスは、spring.batch プレフィックスで Micrometer のグローバルレジストリ (英語) に登録されます。次の表は、すべてのメトリクスを詳細に説明しています。

メトリクス名

説明

タグ

spring.batch.job

TIMER

ジョブ実行の期間

name, status

spring.batch.job.active

LONG_TASK_TIMER

現在アクティブなジョブ

name

spring.batch.step

TIMER

ステップ実行の期間

name, job.name, status

spring.batch.step.active

LONG_TASK_TIMER

現在アクティブなステップ

name

spring.batch.item.read

TIMER

アイテムの読み込み時間

job.name, step.name, status

spring.batch.item.process

TIMER

アイテム処理の期間

job.name, step.name, status

spring.batch.chunk.write

TIMER

チャンク書き込みの期間

job.name, step.name, status

status タグは、SUCCESS または FAILURE のいずれかです。

カスタムメトリクス

カスタムコンポーネントで独自のメトリクスを使用する場合は、Micrometer API を直接使用することをお勧めします。以下は、Tasklet の時間を計る方法の例です。

import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.Timer;

import org.springframework.batch.core.StepContribution;
import org.springframework.batch.core.scope.context.ChunkContext;
import org.springframework.batch.core.step.tasklet.Tasklet;
import org.springframework.batch.repeat.RepeatStatus;

public class MyTimedTasklet implements Tasklet {

	@Override
	public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
		Timer.Sample sample = Timer.start(Metrics.globalRegistry);
		String status = "success";
		try {
			// do some work
		} catch (Exception e) {
			// handle exception
			status = "failure";
		} finally {
			sample.stop(Timer.builder("my.tasklet.timer")
					.description("Duration of MyTimedTasklet")
					.tag("status", status)
					.register(Metrics.globalRegistry));
		}
		return RepeatStatus.FINISHED;
	}
}

メトリクスの無効化

メトリクスの収集は、ロギングと同様の問題です。ログの無効化は、通常、ログライブラリを構成することによって行われます。これは、メトリクスの場合も同じです。Spring Batch には、Micrometer のメトリクスを無効にする機能はありません。これは Micrometer 側で行う必要があります。Spring Batch はメトリクスを Micrometer のグローバルレジストリに spring.batch プレフィックスで格納するため、次のスニペットを使用してバッチメトリクスを無視または拒否するように micrometer を構成できます。

Metrics.globalRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("spring.batch"))

詳細については、Micrometer のリファレンスドキュメント (英語) を参照してください。