Micrometer サポート

監視とメトリクス

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

組み込みメトリクス

メトリクス収集はデフォルトで無効になっています。有効にするには、アプリケーションコンテキストで Micrometer、ObservationRegistry、Bean を定義する必要があります。通常は、使用する ObservationHandler を定義する必要があります。次の例は、MeterRegistry (たとえば Prometheus レジストリ)にメトリクスを保存する DefaultMeterObservationHandler を登録する方法を示しています。

@Bean
public ObservationRegistry observationRegistry(MeterRegistry meterRegistry) {
    ObservationRegistry observationRegistry = ObservationRegistry.create();
    observationRegistry.observationConfig()
        .observationHandler(new DefaultMeterObservationHandler(meterRegistry));
    return observationRegistry;
}

Spring Batch 固有のメトリクスは、spring.batch プレフィックスに登録されています。以下の表は、すべてのメトリクスの詳細を示しています。

メトリクス名

説明

タグ

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

spring.batch.job.launch.count

COUNTER

ジョブ起動数

なし

ジョブとステップの status タグは終了ステータスと同じです。アイテムの読み取り、処理、書き込みの場合、この status タグは SUCCESS または FAILURE のいずれかになります。

カスタムメトリクス

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

import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationRegistry;

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 {

    private ObservationRegistry observationRegistry;

    public MyTimedTasklet(ObservationRegistry observationRegistry) {
        this.observationRegistry = observationRegistry;
    }

	@Override
	public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) {
		Observation observation = Observation.start("my.tasklet.step", this.observationRegistry);
		try (Observation.Scope scope = observation.openScope()) {
			// do some work
		    return RepeatStatus.FINISHED;
		} catch (Exception e) {
			// handle exception
            observation.error(exception);
		} finally {
			observation.stop();
		}
	}
}

トレース

バージョン 5 以降、Spring Batch は Micrometer の Observation API を介してトレース機能を提供します。デフォルトではトレース機能は無効になっています。有効にするには、トレース機能をサポートする ObservationHandler (たとえば TracingAwareMeterObservationHandler)を設定した ObservationRegistry Bean を定義する必要があります。

@Bean
public ObservationRegistry observationRegistry(MeterRegistry meterRegistry, Tracer tracer) {
    DefaultMeterObservationHandler observationHandler = new DefaultMeterObservationHandler(meterRegistry);
    ObservationRegistry observationRegistry = ObservationRegistry.create();
    observationRegistry.observationConfig()
            .observationHandler(new TracingAwareMeterObservationHandler<>(observationHandler, tracer));
    return observationRegistry;
}

これを設定すると、Spring Batch はジョブ実行ごとにトレースを作成し、ステップ実行ごとにスパンを作成します。

EnableBatchProcessing または DefaultBatchConfiguration を使用しない場合は、アプリケーションコンテキストに BatchObservabilityBeanPostProcessor を登録する必要があります。これにより、観測可能なバッチアーティファクトに Micrometer の観測レジストリが自動的に設定されます。