给定一个指标my_http_counter
,它有自己的标签,我可以用
sum(rate(my_http_counter[1m])) by (label)
我正在寻找一种正确的方法来检测在过去5分钟内超过2%的增长。
I though of:
sum(rate(my_http_counter[1m] offset 5m)) by (label) /
sum(rate(my_http_counter[1m])) by (label)
但是,我不确定这个。
我可以比较两个重叠的指标,但我正在寻找正确的方法来比较一个mertic与其先前的状态。
谢谢。
下面的查询应该检测到在过去5分钟内rate(my_http_counter[1m])
的增长超过2%:
(
sum(rate(my_http_counter[1m])) by (label)
/
sum(rate(my_http_counter[1m] offset 5m)) by (label)
) > 1.02
它使用offset修饰符来获取相同系列5分钟前的值。
另一个选择是将Prometheus子查询与delta函数一起使用:
(
delta(
(sum(rate(my_http_counter[1m])) by (label))[5m:1m]
)
/
sum(rate(my_http_counter[1m])) by (label)
) > 0.02
在与0.02
进行比较之前,可能值得将查询包装到abs()中,以便在过去5分钟内捕获增加和减少超过2%:
abs(
delta(
(sum(rate(my_http_counter[1m])) by (label))[5m:1m]
)
/
sum(rate(my_http_counter[1m])) by (label)
) > 0.02