Я использую пружинный блок (4.2.2.RELEASE) вместе с пружинным приводом (2.2.6 RELEASE). Начиная с версии 4.2, Spring Batch обеспечивает поддержку пакетного мониторинга и показателей на основе микрометра (https://docs.spring.io/spring-batch/docs/4.2.x/reference/html/monitoring-and-metrics.html).
Например, по названию метрики spring_batch_job
я могу видеть, как часто выполнялось задание, его статус и продолжительность.
Я хочу отслеживать эту метрику с помощью grafana и prometheus и предупреждать, если задание не удалось выполнить за последние xx минут.
Если пакетное приложение Spring работает как служба, кажется, что оно суммирует все показатели, пока служба не будет остановлена. Например, если задание было запущено 12 раз за последний час, выходные показатели могут быть следующими:
spring_batch_job_seconds_count{name="mainJob",status="COMPLETED",} 10.0
spring_batch_job_seconds_sum{name="mainJob",status="COMPLETED",} 354.354538083
spring_batch_job_seconds_count{name="mainJob",status="FAILED",} 2.0
spring_batch_job_seconds_sum{name="mainJob",status="FAILED",} 0.880157862
Итак, два экземпляра mainJob
потерпели неудачу. Предполагается, что в течение следующего часа все 12 заданий будут успешными, выходные данные будут такими:
spring_batch_job_seconds_count{name="mainJob",status="COMPLETED",} 22.0
spring_batch_job_seconds_sum{name="mainJob",status="COMPLETED",} 708.704538083
spring_batch_job_seconds_count{name="mainJob",status="FAILED",} 2.0
spring_batch_job_seconds_sum{name="mainJob",status="FAILED",} 0.880157862
Как я могу проверить, не удалось ли выполнить задание за последние xx минут? Потому что следующее выражение все равно вернет два экземпляра невыполненных заданий: spring_batch_job_seconds_count{status="FAILED"}[15m]