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 (...)