85 lines
3.2 KiB
Plaintext
85 lines
3.2 KiB
Plaintext
|
|
[[monitoring-and-metrics]]
|
|
= Monitoring and metrics
|
|
|
|
|
|
Since version 4.2, Spring Batch provides support for batch monitoring and metrics
|
|
based on link:$$https://micrometer.io/$$[Micrometer]. This section describes
|
|
which metrics are provided out-of-the-box and how to contribute custom metrics.
|
|
|
|
[[built-in-metrics]]
|
|
== Built-in metrics
|
|
|
|
Metrics collection does not require any specific configuration. All metrics provided
|
|
by the framework are registered in
|
|
link:$$https://micrometer.io/docs/concepts#_global_registry$$[Micrometer's global registry]
|
|
under the `spring.batch` prefix. The following table explains all the metrics in details:
|
|
|
|
|===============
|
|
|__Metric Name__|__Type__|__Description__|__Tags__
|
|
|`spring.batch.job`|`TIMER`|Duration of job execution|`name`, `status`
|
|
|`spring.batch.job.active`|`LONG_TASK_TIMER`|Currently active jobs|`name`
|
|
|`spring.batch.step`|`TIMER`|Duration of step execution|`name`, `job.name`, `status`
|
|
|`spring.batch.step.active`|`LONG_TASK_TIMER`|Currently active step|`name`
|
|
|`spring.batch.item.read`|`TIMER`|Duration of item reading|`job.name`, `step.name`, `status`
|
|
|`spring.batch.item.process`|`TIMER`|Duration of item processing|`job.name`, `step.name`, `status`
|
|
|`spring.batch.chunk.write`|`TIMER`|Duration of chunk writing|`job.name`, `step.name`, `status`
|
|
|===============
|
|
|
|
NOTE: The `status` tag can be either `SUCCESS` or `FAILURE`.
|
|
|
|
[[custom-metrics]]
|
|
== Custom metrics
|
|
|
|
If you want to use your own metrics in your custom components, we recommend using
|
|
Micrometer APIs directly. The following is an example of how to time a `Tasklet`:
|
|
|
|
[source, java]
|
|
----
|
|
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;
|
|
}
|
|
}
|
|
----
|
|
|
|
[[disabling-metrics]]
|
|
== Disabling Metrics
|
|
|
|
Metrics collection is a concern similar to logging. Disabling logs is typically
|
|
done by configuring the logging library, and this is no different for metrics.
|
|
There is no feature in Spring Batch to disable Micrometer's metrics. This should
|
|
be done on Micrometer's side. Since Spring Batch stores metrics in the global
|
|
registry of Micrometer with the `spring.batch` prefix, you can configure
|
|
micrometer to ignore or deny batch metrics with the following snippet:
|
|
|
|
[source, java]
|
|
----
|
|
Metrics.globalRegistry.config().meterFilter(MeterFilter.denyNameStartsWith("spring.batch"))
|
|
----
|
|
|
|
See Micrometer's link:$$http://micrometer.io/docs/concepts#_meter_filters$$[reference documentation]
|
|
for more details. |