如何在promql中的时间间隔(例如30天)内获得kubernetes中Pod的最大cpu使用率?

时间:2019-11-07 11:13:29

标签: kubernetes prometheus promql prometheus-operator

我正在尝试估计资源(cpu)请求和限制值,为此,我想使用prometheus来了解最近一个月内Pod的最大cpu使用量。

我检查了这个问题,但无法得到我想要的Generating range vectors from return values in Prometheus queries

我尝试了这个,但是max_over_time似乎并没有超出速率

max (  
  max_over_time(
    rate(
      container_cpu_usage_seconds_total[5m]
    )[30d]
  )
) by (pod_name)

无效的参数'query':在char 64处解析错误:范围指定必须在度量选择器之前,但必须遵循* promql.Call

2 个答案:

答案 0 :(得分:3)

您需要将内部表达式(容器cpu使用率)捕获为recording rule

- record: container_cpu_usage_seconds_total:rate5m
  expr: rate(container_cpu_usage_seconds_total[5m])

然后使用此新的时间序列来计算max_over_time:

max (  
  max_over_time(container_cpu_usage_seconds_total:rate5m[30d])
) by (pod_name)

仅在版本为2.7的Prometheus版本中subqueries can be calculated on the fly(见this blog post for more details)才需要。

请记住,如果您打算使用此组合查询(过去30天内收集的数据的max_per_time的最大值)进行警报或可视化(而不是一次性查询) ),那么您仍然要使用记录规则来提高查询的性能。这是经典的CS计算复杂度折衷(将记录规则存储为单独的时间序列所需的内存/存储空间与处理30天数据所需的计算资源!)

答案 1 :(得分:0)

请尝试以下操作:

max_over_time(sum(rate(container_cpu_usage_seconds_total{pod="pod-name-here-759b8f",container_name!="POD", container_name!=""}[1m])) [720h:1s])