PromQL 平均对比 avg_over_time
PromQL avg vs avg_over_time
Over time 函数不支持 by/without 语法。使用 avg_over_time(metric[1h]) 和 avg(metric[1h]) 之间的数学差异是什么?
可以用具有相同结果的函数(在本例中为 avg)替换随时间变化的函数吗?谢谢!
avg_over_time(m[d])
函数执行以下操作:
- 选择名称为
m
的所有时间序列
- 然后对于每个选定的时间序列,它计算图表上每个点之前的时间范围
d
上原始样本的平均值。
avg(m)
函数执行以下操作:
- 选择名称为
m
的所有时间序列
- 然后对于每个选定的时间序列,它会选择图表上每个点之前的最后一个原始样本值。有关详细信息,请参阅 these docs。
- 然后对于图表上的每个点,它计算每个时间序列的所选值的平均值。
如您所见,avg_over_time()
和 avg()
是完全不同的函数 - avg_over_time()
计算每个选定时间序列的不同平均值,而 avg()
计算平均值在选定的时间序列中。
为什么不能直接使用
avg(avg_over_time(m[d]))
而不是
sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)
Over time 函数不支持 by/without 语法。使用 avg_over_time(metric[1h]) 和 avg(metric[1h]) 之间的数学差异是什么? 可以用具有相同结果的函数(在本例中为 avg)替换随时间变化的函数吗?谢谢!
avg_over_time(m[d])
函数执行以下操作:
- 选择名称为
m
的所有时间序列
- 然后对于每个选定的时间序列,它计算图表上每个点之前的时间范围
d
上原始样本的平均值。
avg(m)
函数执行以下操作:
- 选择名称为
m
的所有时间序列
- 然后对于每个选定的时间序列,它会选择图表上每个点之前的最后一个原始样本值。有关详细信息,请参阅 these docs。
- 然后对于图表上的每个点,它计算每个时间序列的所选值的平均值。
如您所见,avg_over_time()
和 avg()
是完全不同的函数 - avg_over_time()
计算每个选定时间序列的不同平均值,而 avg()
计算平均值在选定的时间序列中。
为什么不能直接使用
avg(avg_over_time(m[d]))
而不是
sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)