【问题标题】:Prometheus range query rounding off time when used with resolution stepPrometheus 范围查询与解析步骤一起使用时的舍入时间
【发布时间】:2022-08-14 20:11:45
【问题描述】:

我有一个名为 http_requests_total 的普罗米修斯指标,它每 30 秒被刮一次。我创建了一个记录规则,以每小时间隔为我的 UI 仪表板聚合它。让我们将此新指标称为 increase_http_requests_total_60m。

我想使用这个聚合指标来进一步聚合并创建 increase_http_requests_total_1d。我的想法是这样做 - sum_over_time(increase_http_requests_total_60m[1d:60m])。

但是,我意识到与增加(http_requests_total[1d])相比,该值将有所不同。在深入研究后,我意识到 increase_http_requests_total_60m[1d:60m] 给我的数据点正好是在下午 6 点、晚上 7 点、晚上 8 点等时间。我怎样才能使数据点实际上是 - 现在,现在 - 1 小时,现在 - 2 小时,等等?

对其他想法持开放态度,以实现我的最终目标。

    标签: prometheus victoriametrics


    【解决方案1】:

    Prometheus 以特定方式计算increase()(见下文),因此increase(m[1d]) 无法匹配sum_over_time(increase(m[1h])[1d:1h])

    Prometheus 在计算increase(m[d]) 时间戳t 时存在以下问题:

    • 它忽略时间戳t-d 之前的最后一个原始样本与时间范围(t-d ... t] 上的第一个原始样本之间m 的增加。请注意,t-d 时间戳不包含在时间范围内。
    • 它将外推法应用于计算出的increase() 结果,因此它可能会从仅包含整数样本的时间序列中返回意外的分数。见this issue

    这些问题阻止了在记录规则中聚合 imcrease() 结果。

    Prometheus 开发人员将解决这些问题 - 请参阅 this design doc

    附:有一个替代的类似 Prometheus 的解决方案,它以预期的方式处理这两个问题,即increase(m[X*d]) = sum_over_time(increase(m[d])[X*d:d]) 适用于任何Xd。该系统名为 VictoriaMetrics。有关详细信息,请参阅these docs

    附言我是 VictoriaMetrics 的作者。

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2021-08-17
      • 2015-06-06
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多