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 プレフィックスに登録されています。以下の表は、すべてのメトリクスの詳細を示しています。
メトリクス名 | 型 | 説明 | タグ |
|
| ジョブ実行の期間 |
|
|
| 現在アクティブなジョブ |
|
|
| ステップ実行の期間 |
|
|
| 現在アクティブなステップ |
|
|
| アイテムの読み込み時間 |
|
|
| アイテム処理の期間 |
|
|
| チャンク書き込みの期間 |
|
|
| ジョブ起動数 | なし |
ジョブとステップの 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 の観測レジストリが自動的に設定されます。