【求助】prometheus查询语句如何统计大于某个阈值的点的个数?

使用场景

现有一个需求:

需要统计指标值大于某个阈值的点的个数,即:
count(my_value{} > N)

遇到的问题

实际操作的时候发现该语句查询所得永远是1,无法实现原本的计数需求,改用以下语句:

count_over_time(my_value{} > 10 [5m])

则提示:

parse error: ranges only allowed for vector selectors

提问内容

实在是没有办法了,尝试了一票语句,包括但不限于countcount_over_timecount_valuesclamp_max但均无法达到预期效果,希望社区大大能提供一下帮助 T^T

展开
收起
游客dphswcbirx66i 2023-12-18 15:32:34 490 分享 版权
1 条回答
写回答
取消 提交回答
  • 在 Prometheus 中,你不能直接使用 count(my_value{} > N) 这样的表达式来统计大于某个阈值的点的个数。但是,你可以通过以下步骤来实现这个需求:

    1. 首先,使用 my_value{} > N 条件筛选出大于阈值的样本点。
    2. 然后,使用 sum without()sum by() 函数将这些点的值相加。由于符合条件的点的值为 1,所以求和的结果就是符合条件的点的个数。

    以下是一个示例查询语句:

    sum((my_value{} > N) == 1)
    

    这个查询会返回大于阈值 N 的 my_value 样本点的个数。

    这个方法的一个限制是它只能用于即时查询,不能用于计算过去时间段内的计数。如果你需要统计过去时间段内大于某个阈值的点的个数,可以考虑使用 recording rules 或者 external metrics exporter 来预先计算并存储这些计数。然后你可以像查询其他指标一样查询这些预计算的计数。

    2023-12-18 15:52:59
    赞同 展开评论

数据库领域前沿技术分享与交流

还有其他疑问?
咨询AI助理