Prometheus 非零值的PromQL随时间的平均值

Prometheus 非零值的PromQL随时间的平均值,prometheus,promql,Prometheus,Promql,我试图从量表度量中得到平均时间值,但我只想从度量的非零值(确切地说是大于零的值)得到平均值 示例: avg_over_time(foo[2d] > 0) 但我一直得到解析错误: 二进制表达式只能包含标量和瞬时向量类型 我试着设置录音规则 expr: foo > 0 但不幸的是,结果是一样的 这在PromQL中可能吗?您可以使用2.7以上的普罗米修斯版本: avg_over_time((foo > 0)[2d:]) 虽然可以使用Prometheus子查询,如Michael已

我试图从量表度量中得到平均时间值,但我只想从度量的非零值(确切地说是大于零的值)得到平均值

示例:

avg_over_time(foo[2d] > 0)
但我一直得到解析错误:
二进制表达式只能包含标量和瞬时向量类型

我试着设置录音规则

expr: foo > 0
但不幸的是,结果是一样的

这在PromQL中可能吗?

您可以使用2.7以上的普罗米修斯版本:

avg_over_time((foo > 0)[2d:])

虽然可以使用Prometheus子查询,如Michael已经提到的
avg\u over\u time((foo>0)[2d:])
,但根据方括号中冒号后的
分辨率
值,建议的查询可能会遗漏某些数据点或重复计算某些数据点。例如,
avg\u over\u time((foo>0)[2d:1h])
在计算
avg\u over\u time
时,每小时只考虑一个原始数据点,而
avg\u over\u time((foo>0)[2d:1s])
foo
的刮取间隔超过
1s
时,将多次计算相同的原始数据点。默认情况下,查询中传递给的
分辨率
值,因此根据传递给
/api/v1/query\u范围
步骤
查询参数,查询的最终结果可能会大不相同

如果需要独立于
step
query arg计算超出给定
threshold
的原始数据点的确切份额,请查看随时间(foo[2d],threshold)函数。此函数可用于计算正常运行时间和/或延迟期间的SLO/SLI