【问题标题】:Calculate Max over time on sum function in Prometheus在 Prometheus 中计算 sum 函数随时间变化的最大值
【发布时间】:2017-12-17 14:38:20
【问题描述】:

我在我的 kubernetes 集群中运行 prometheus。 我在 Kubernetes 中有以下系统:

我有 4 个节点。我想计算空闲内存。我想要这四个节点的总和。然后我想找到超过 1 天的最大值。所以,例如,

在时间=t1 节点 1:500 MB 节点2:600 MB 节点 3:200 MB 节点4:300 MB 总计 = 1700 MB

在时间=t2 节点 1:400 MB 节点 2:700 MB 节点 3:100 MB 节点4:200 MB 总计 = 1300 MB

在时间=t3 节点1:600 MB 节点2:800 MB 节点 3:1200 MB 节点4:1300 MB 总计 = 3900 MB

在时间=t4 节点1:100 MB 节点2:200 MB 节点 3:300 MB 节点4:400 MB 总计 = 1000 MB

所以,我的查询的答案应该是 3900 MB。我无法为总和做 max_over_time。

我已经这样做了(根本不工作):

max_over_time(sum(node_memory_MemFree)[2m])

【问题讨论】:

    标签: kubernetes monitoring prometheus


    【解决方案1】:

    Since 2.7 版(2019 年 1 月),Prometheus 支持子查询:

    max_over_time( sum(node_memory_MemFree_bytes{instance=~"foobar.*"})[1d:1h] )
    

    (过去 2 天的指标,分辨率为 1 小时。)

    阅读文档以获取有关使用录制规则的更多信息:https://prometheus.io/docs/prometheus/latest/querying/examples/#subquery

    但是,请注意博客推荐:

    结语

    虽然使用子查询代替记录规则非常方便,但不必要地使用它们会影响性能。繁重的子查询最终应该转换为记录规则以提高效率。

    也不建议在记录规则中包含子查询。如果您确实需要在记录规则中使用子查询,请创建更多记录规则。

    brian brazil 文章中解释了记录规则的使用: https://www.robustperception.io/composing-range-vector-functions-in-promql/

    【讨论】:

      【解决方案2】:

      这在一个表达式中是不可能的,您需要为中间表达式使用记录规则。看 https://www.robustperception.io/composing-range-vector-functions-in-promql/

      【讨论】:

      • 有可能since Prometheus 2.7,使用子查询。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2022-12-03
      • 2015-10-29
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多