【问题标题】:PromQL avg vs avg_over_timePromQL avg 与 avg_over_time
【发布时间】:2020-10-22 02:31:24
【问题描述】:

随着时间的推移,函数不支持 by/without 语法。使用 avg_over_time(metric[1h]) 和 avg(metric[1h]) 之间的数学区别是什么? 是否可以用具有相同结果的函数(在本例中为 avg)替换随时间变化的函数?谢谢!

【问题讨论】:

    标签: promql


    【解决方案1】:

    avg_over_time(m[d]) 函数执行以下操作:

    • 它选择名称为m的所有时间序列
    • 然后对于每个选定的时间序列,它会计算图表上每个点之前时间范围 d 上原始样本的平均值。

    avg(m) 函数执行以下操作:

    • 它选择名称为m的所有时间序列
    • 然后对于每个选定的时间序列,它会选择图表上每个点之前的最后一个原始样本值。有关详细信息,请参阅these docs
    • 然后对于图表上的每个点,它都会计算每个时间序列的选定值的平均值。

    如您所见,avg_over_time()avg() 是完全不同的函数 - avg_over_time() 计算每个选定时间序列的不同平均值,而 avg() 计算选定时间序列的平均值。

    【讨论】:

    • 谢谢。它可以组合为子查询以产生正确的输出。有什么缺点吗?
    • 如果您需要计算给定[d]时间范围内多个时间序列的数据点的平均值,则可以使用以下查询:sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)
    【解决方案2】:

    为什么不能直接使用

    avg(avg_over_time(m[d]))
    

    而不是

    sum(sum_over_time(m[d])) by (...) / sum(count_over_time(m[d])) by (...)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 2022-10-02
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多