计算与特定模式匹配的给定时间范围内的 Prometheus 指标
Count Prometheus metrics of a given time frame matching a certain pattern
考虑一个任务运行器的 Prometheus Exporter,它将成功的重复作业的指标输出为
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
类型的作业在过去 2 小时内没有成功,我想设置 Prometheus 警报。
我的第一个方法是使用 Alert 表达式
sum(increase(sometool_jobs_succeeded{job_name=~"^joba-.+"}[2h])) < 1
但是由于从来没有 sometool_jobs_succeeded
类型的指标具有 1
以外的值,因此 increase
无法正常工作(如果指标只是 出现).
如何实现我的查询?是否有可能 count 范围向量的结果度量(独立于它们的 value)?
你可以试试这样的东西:
count(
sometool_jobs_succeeded{job_name=~"joba-.+"} unless (sometool_jobs_succeeded{job_name=~"joba-.+"} offset 2h)
)
这将 return 现在 2 小时前不存在的 joba 实例计数
我会考虑是否可以修改导出器或应用程序,以便它们发出类似
的内容
sometool_jobs_succeeded{job_type="joba"} 8
所以每个工作类型一个普通计数器。这在 Prometheus 中使用会更自然(并且更适合其数据模型)。它可以通过 increase
调用进行处理,它会处理任何重置等。
请注意,将唯一 ID 作为标签值不符合建议。
具有大基数的标签可能会导致问题(尽管除非规模真的很大,否则它可能可以处理)。
考虑一个任务运行器的 Prometheus Exporter,它将成功的重复作业的指标输出为
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
类型的作业在过去 2 小时内没有成功,我想设置 Prometheus 警报。
我的第一个方法是使用 Alert 表达式
sum(increase(sometool_jobs_succeeded{job_name=~"^joba-.+"}[2h])) < 1
但是由于从来没有 sometool_jobs_succeeded
类型的指标具有 1
以外的值,因此 increase
无法正常工作(如果指标只是 出现).
如何实现我的查询?是否有可能 count 范围向量的结果度量(独立于它们的 value)?
你可以试试这样的东西:
count(
sometool_jobs_succeeded{job_name=~"joba-.+"} unless (sometool_jobs_succeeded{job_name=~"joba-.+"} offset 2h)
)
这将 return 现在 2 小时前不存在的 joba 实例计数
我会考虑是否可以修改导出器或应用程序,以便它们发出类似
的内容sometool_jobs_succeeded{job_type="joba"} 8
所以每个工作类型一个普通计数器。这在 Prometheus 中使用会更自然(并且更适合其数据模型)。它可以通过 increase
调用进行处理,它会处理任何重置等。
请注意,将唯一 ID 作为标签值不符合建议。 具有大基数的标签可能会导致问题(尽管除非规模真的很大,否则它可能可以处理)。