首页 > 解决方案 > Prometheus 中指标高于/低于阈值时的总和持续时间

问题描述

my_counter考虑一个带有标签的计数器success。我用这个查询创建了一个成功率指标:rate(my_counter[10m]{success="true"})/rate(my_counter[10m]).

现在我想知道费率低于某个阈值的时间。我有一个以 Prometheus 作为数据源的 Grafana 仪表板。使用 Grafana,我可以轻松选择一个时间范围,但我仍然需要一种方法来总结我的条件适用的时间。

有任何想法吗?

标签: prometheusgrafana

解决方案


你的问题有四个部分:

  1. 有一个在满足条件时取值为 1 的指标 - 这是通过使用BOOL比较运算符的运算符来完成的。

    速率(某物 [5m])> 布尔值 0.99

  2. 计算满足条件的次数 - 这是通过使用avg_over_time函数完成的:

    avg_over_time(条件[1d])

  3. 在单个查询中获取所有内容 - 您需要使用重新编码规则或拥有支持子查询的 prometheus 版本

  4. 最后是使用 grafana 填写时间范围以获得满足条件的比率或持续时间。

    avg_over_time(条件[$__range])

    avg_over_time(条件[$__range]) * $__range_s

把它们放在一起是一个难以阅读的表达。-- Grafana Dashboard --使用最新版本中可用的源代码可能会做得更好:

avg_over_time( (rate(something[5m]) > BOOL 0.99)[$__range:] )

推荐阅读