OpenShift不同版本Pod平均内存用量查询选型困惑
OpenShift 4.11中Pod平均内存用量统计的PromQL选择
要解决这个问题,核心是搞清楚两个查询的指标差异和时间窗口影响:
两个查询的核心区别
原OpenShift 4.9查询用的
pod:container_memory_usage_bytes:sum:
这是预聚合指标,代表Pod下所有容器的**总内存用量(包含缓存、缓冲区等可回收内存)**总和,再计算2天时间范围内的平均值。
对应语句:sum by (namespace, pod) (avg_over_time(pod:container_memory_usage_bytes:sum[2d]))修改后的OpenShift 4.11查询用的
node_namespace_pod_container:container_memory_working_set_bytes:
这个指标代表容器的工作集内存——即容器实际正在使用、无法被系统回收的内存(不含可回收缓存),除以1048576是转成MB单位,再计算2小时内的平均值。
对应语句:sum by (namespace, pod) (avg_over_time(node_namespace_pod_container:container_memory_working_set_bytes{}[2h])/1048576)
结果差异的原因
- 指标定义不同:总内存用量(含缓存)的数值通常大于工作集内存,这是两者结果有差异的核心原因。
- 时间窗口不一致:原查询统计2天的平均,修改后的是2小时,时间范围差异直接导致平均值不同。
选择建议
如果需要统计Pod实际占用的、无法被系统回收的平均内存(更能反映Pod真实内存压力):
把修改后的查询时间窗口改成和原查询一致的2天,调整后语句:sum by (namespace, pod) (avg_over_time(node_namespace_pod_container:container_memory_working_set_bytes{}[2d])/1048576)如果需要统计容器使用的所有内存(含缓存)的平均量:
因OpenShift 4.11可能移除了pod:container_memory_usage_bytes:sum预聚合指标,需手动聚合容器总内存用量,语句:sum by (namespace, pod) (avg_over_time(sum(container_memory_usage_bytes{}) by (namespace, pod)[2d]))
内容的提问来源于stack exchange,提问作者user804401
相关产品推荐
相关产品推荐

