计算与特定模式匹配的给定时间范围的Prometheus指标

时间:2020-10-05 11:51:47

标签: prometheus

为任务运行器考虑一个Prometheus导出器,该输出器将成功重复执行的作业的度量标准输出为

sometool_jobs_succeeded{job_name="joba-123456"} 1
sometool_jobs_succeeded{job_name="joba-987654"} 1
sometool_jobs_succeeded{job_name="jobx-411235"} 1

如果过去两个小时内没有成功完成joba类型的作业,我想设置一个Prometheus警报。

我的第一种方法是使用Alert表达式

sum(increase(sometool_jobs_succeeded{job_name=~"^joba-.+"}[2h])) < 1

但是由于从来没有类型sometool_jobs_succeeded的度量标准具有1以外的其他值,所以increase不能正常工作(如果度量标准只是出现)。

如何实现查询?可以以某种方式对范围矢量的结果度量进行计数(与它们的 value 无关)吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下操作:

count( 
  sometool_jobs_succeeded{job_name=~"joba-.+"} unless (sometool_jobs_succeeded{job_name=~"joba-.+"} offset 2h)                                                                                                                                                                   
)

这将立即返回2小时前不存在的Joba实例的数量

我会考虑是否可以修改导出器或应用程序,以便它们发出类似的内容

sometool_jobs_succeeded{job_type="joba"} 8

因此,每种作业类型都有一个普通计数器。在Prometheus中使用它会更加自然(并更好地拟合其数据模型)。可以通过increase调用来处理它,并且可以处理任何重置等。

请注意,使用唯一的ID作为标签值违反了建议。 基数大的标签可能会引起问题(尽管除非规模很大,否则可能可以解决)。