如何在Prometheus中整月监控特定服务总资源消耗(不受Pod变动影响)
解决Prometheus中服务级CPU/内存总消耗监控问题
核心思路是通过服务关联的唯一标签聚合所有Pod的指标,忽略单个Pod的生命周期变化,直接统计属于同一服务的所有Pod资源总和。
CPU总消耗查询
- 实时CPU使用率(总核数):
sum(rate(container_cpu_usage_seconds_total{namespace="你的命名空间", app="你的服务名"}[1m]))
rate计算1分钟内的CPU使用率平均速率,sum聚合所有匹配标签的Pod数据,Pod重启或Deployment更新后,新Pod只要带相同标签就会自动纳入统计。
- CPU请求/限制总和(资源分配统计):
sum(kube_pod_container_resource_requests_cpu_cores{namespace="你的命名空间", app="你的服务名"})
sum(kube_pod_container_resource_limits_cpu_cores{namespace="你的命名空间", app="你的服务名"})
内存总消耗查询
- 实时内存使用总量(字节,实际工作集):
sum(container_memory_working_set_bytes{namespace="你的命名空间", app="你的服务名"})
container_memory_working_set_bytes反映容器当前实际占用的内存(含缓存、不含swap),sum聚合后得到服务整体内存消耗,不受Pod生命周期影响。
- 内存请求/限制总和(资源分配统计):
sum(kube_pod_container_resource_requests_memory_bytes{namespace="你的命名空间", app="你的服务名"})
sum(kube_pod_container_resource_limits_memory_bytes{namespace="你的命名空间", app="你的服务名"})
注意事项
- 标签选择:必须使用能唯一标识服务的标签(如
app、service或自定义业务标签),确保所有属于该服务的Pod都带有此标签。 - 按需调整:可根据实际环境移除
namespace过滤,或替换标签为环境中使用的标识(如deployment标签)。
内容的提问来源于stack exchange,提问作者Rainbird
相关产品推荐
相关产品推荐

