为任务运行器考虑一个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 无关)吗?
答案 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作为标签值违反了建议。 基数大的标签可能会引起问题(尽管除非规模很大,否则可能可以解决)。