You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求集群全Pod的CPU/内存使用率超90%限额的Prometheus告警表达式

问题描述

我正在配置Grafana告警,需要创建两个独立的告警规则:

  • 当任意命名空间下的Pod在过去10分钟内的平均CPU使用率超过对应Pod容器CPU限额的90%时触发告警
  • 内存使用率触发条件与CPU一致

我最初尝试的内存使用率查询表达式无法正常工作:

avg_over_time(container_memory_usage_bytes[10m]) >= kube_pod_container_resource_limits{resource="memory"} * 0.9

目前已经写出针对特定Pod的内存查询表达式,但需要将其适配为集群中所有Pod的通用查询:

avg_over_time(container_memory_usage_bytes{pod="nginx-f7d787f6c-t8x9s", container="nginx"}[10m]) > on(pod_uid) kube_pod_container_resource_limits{resource="memory", pod="nginx-f7d787f6c-t8x9s", container="nginx"} * 0.9

示例场景:

Pod名称容器数量10分钟平均内存使用率内存限额
Pod159Mi10Mi
Pod239Mi1000Mi

Pod1的容器内存使用率达到了限额的90%,期望它能出现在查询结果中。

解决方案

通用内存使用率告警查询

移除特定Pod和容器的固定标签过滤,同时补充container维度确保关联准确性(同一个Pod下的不同容器资源限额独立),最终表达式如下:

avg_over_time(container_memory_usage_bytes{container!="POD"}[10m]) 
/ on(pod_uid, container) kube_pod_container_resource_limits{resource="memory"} 
> 0.9

通用CPU使用率告警查询

替换对应指标名称即可实现CPU使用率的告警查询:

avg_over_time(container_cpu_usage_seconds_total{container!="POD"}[10m]) 
/ on(pod_uid, container) kube_pod_container_resource_limits{resource="cpu"} 
> 0.9

关键说明

  • 过滤container!="POD":排除Kubernetes的Pause容器,这类容器通常无资源限额配置,会干扰计算结果
  • 关联pod_uid + container:确保每个容器的实际使用率和自身的资源限额正确匹配,避免跨容器的指标混淆
  • 使用除法计算占比:直接用「实际使用量/资源限额」得到使用率占比,比直接比较字节数更直观,也避免了指标类型匹配问题

内容的提问来源于stack exchange,提问作者Ron Sharabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:50:02