spring-boot - Spring 批处理 : alert with grafana & prometheus if a job failed in the last xx minutes

标签 spring-boot spring-batch prometheus grafana spring-micrometer

我将 Spring 批 (4.2.2.RELEASE) 与 Spring 执行器 (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 batch 应用程序作为服务运行,它似乎会汇总所有指标,直到服务停止。例如,如果某个作业在过去一小时内启动了 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]

最佳答案

我不熟悉 Prometheus QL,但我会尽力提供帮助。

你可以做的是计算这个计数器在最后一个小时和之前一个小时之间的差异。如果您发现失败实例的数量有所增加,那么至少有一个实例失败了,您可以发出警报。否则,前一小时内没有作业失败。

Prometheus 提供了 increase专门为此设计的功能。因此,您应该能够在以下情况下回答您的问题并发出警报:

increase(spring_batch_job_seconds_count{name="mainJob",status="FAILED"}[15m]) > 0

正如我所说,我不是 Prometheus 专家,所以我会让您检查语法。但这就是想法。

关于spring-boot - Spring 批处理 : alert with grafana & prometheus if a job failed in the last xx minutes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61405461/

相关文章:

spring - 将 Jdbc session 添加到 Spring Boot

java - Spring Batch 中 H2 数据库的元表

java - Spring Batch 和我的 Batis : MyBatisBatchItemWriter throws IllegalArgumentException: argument type mismatch

kubernetes - 使用皮质抓取指标

java - 如何在maven、Spring-boot中解决 "Conflicting lifecycle mapping"

java - @Controller 、 @RestController 和 @Component 在 Spring boot 多模块 maven 项目的子包中不起作用

spring-boot - 将 Feign @HeaderMap 与 Springboot 1.5.4.RELEASE 一起使用不会发送 header

spring - 如何从休息服务开始批处理。 afterJob 运行但 EnableBatchProcessing 仅在部署后运行

javascript - Prometheus summary.observe 方法有什么作用?

Prometheus alertmanager 自定义接收器