现有一个需求:
需要统计指标值大于某个阈值的点的个数,即:
count(my_value{} > N)
实际操作的时候发现该语句查询所得永远是1,无法实现原本的计数需求,改用以下语句:
count_over_time(my_value{} > 10 [5m])
则提示:
parse error: ranges only allowed for vector selectors
实在是没有办法了,尝试了一票语句,包括但不限于count
、count_over_time
、count_values
、clamp_max
但均无法达到预期效果,希望社区大大能提供一下帮助 T^T
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在 Prometheus 中,你不能直接使用 count(my_value{} > N)
这样的表达式来统计大于某个阈值的点的个数。但是,你可以通过以下步骤来实现这个需求:
my_value{} > N
条件筛选出大于阈值的样本点。sum without()
或 sum by()
函数将这些点的值相加。由于符合条件的点的值为 1,所以求和的结果就是符合条件的点的个数。以下是一个示例查询语句:
sum((my_value{} > N) == 1)
这个查询会返回大于阈值 N 的 my_value 样本点的个数。
这个方法的一个限制是它只能用于即时查询,不能用于计算过去时间段内的计数。如果你需要统计过去时间段内大于某个阈值的点的个数,可以考虑使用 recording rules 或者 external metrics exporter 来预先计算并存储这些计数。然后你可以像查询其他指标一样查询这些预计算的计数。