Grafana中获取Pod过去1小时CPU平均用量单值制作直方图
解决Grafana中Pod过去1小时CPU平均用量的直方图问题
要获取每个Pod过去1小时的单一平均CPU使用率(而非多时间点序列),核心是正确处理Prometheus的Counter类型指标,并将范围向量转换为即时向量,以下是具体操作:
1. 正确的PromQL查询
CPU用量指标container_cpu_usage_seconds_total是持续递增的Counter类型,必须先转成每秒使用率再做时间范围平均,最后按Pod聚合得到单一数值:
avg by (pod) (avg_over_time(rate(container_cpu_usage_seconds_total{pod!=""}[5m])[1h:]))
rate(container_cpu_usage_seconds_total{pod!=""}[5m]):计算每个Pod的CPU每秒使用率,5m是适配Counter指标的合理窗口,避免短时间波动干扰avg_over_time(...[1h:]):统计过去1小时内每秒使用率的平均值avg by (pod):按Pod分组聚合,确保每个Pod只返回一个最终平均值(即时向量)
如果你的环境中用其他标签标识Pod(比如kubernetes_pod_name),替换对应的标签即可。
2. 解决范围向量返回多时间点的问题
直接用avg_over_time返回多时间点,是因为Grafana面板的**步长(Step)**设置过小,导致查询按时间切片返回多个结果。可以通过两种方式解决:
- 调整PromQL:在查询末尾加上
last by (pod),直接取每个Pod的最终计算值:last by (pod) (avg_over_time(rate(container_cpu_usage_seconds_total{pod!=""}[5m])[1h:])) - 调整面板设置:进入Grafana面板的「查询选项」,将步长设置为
3600s(1小时),这样每个Pod只会返回1个数据点。
3. 直方图面板配置
将查询结果的「Format as」设置为「Time series」,选择直方图面板类型,即可基于每个Pod的1小时平均CPU用量生成直方图。
内容的提问来源于stack exchange,提问作者lbenedetto
相关产品推荐
相关产品推荐

