cAdvisor 是什么
cAdvisor 采集容器的 CPU、内存、网络与文件系统指标,读取的是 cgroup 数据,因此在 Kubernetes 里能直接反映容器真实用量。它通常由 kubelet 内置暴露,或用 DaemonSet 单独部署,并用 container_cpu_usage_seconds_total、container_memory_working_set_bytes 等指标喂给 Prometheus。它只答「用了多少」,不答「对象是什么状态」。
基本信息
| 指标来源 | cgroup 统计(容器维度) |
|---|---|
| 典型部署 | kubelet 内置 / DaemonSet |
| 暴露端口 | 默认 8080(版本与部署方式相关) |
| 关键指标 | CPU 累计秒、工作集内存、网络与磁盘 IO |
| 常用过滤 | container!="" 去掉 Pod 级汇总行 |
| 与 KSM 分工 | cAdvisor 管用量,KSM 管对象状态 |
典型使用场景
- 查看各容器 CPU 与内存实际用量,评估 requests/limits 是否合理
- 定位内存持续增长的工作负载,判断是否存在泄漏
- 用 OOM 事件计数发现被反复杀掉的容器
- 对比 limit 与实际用量,为扩缩容与配额调整提供依据
- 监控容器网络与磁盘 IO,找出异常流量或写放大
- 在节点资源紧张时按容器归因,确定谁在挤占资源
容器 CPU 与内存查询
容器 CPU 与内存查询
# 容器 CPU 核数(近 5 分钟平均)
sum by (container) (rate(container_cpu_usage_seconds_total{container!=""}[5m]))
# 工作集内存
sum by (container) (container_memory_working_set_bytes{container!=""})
# OOM 事件计数
container_oom_events_total
# 内存使用率(对照限制值)
container_memory_working_set_bytes{container!=""} / on (container) container_spec_memory_limit_bytes关键指标读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| container_cpu_usage_seconds_total | CPU 累计秒 | rate 后接近 limit 说明受限 |
| container_memory_working_set_bytes | 工作集内存 | 逼近 limit 有 OOM 风险 |
| container_memory_rss | 常驻内存 | 持续增长疑似泄漏 |
| container_oom_events_total | OOM 事件数 | 增长说明容器被反复杀掉 |
| container_network_receive_bytes_total | 网络接收字节 | 突增需排查流量来源 |
container 标签为空的行通常是 Pod 级汇总,聚合时过滤 container!="" 更准确,否则会把汇总行与容器行重复计入。
内存判断要区分工作集与限制值:working_set 更贴近「实际压力」,usage 含可回收的缓存,两者口径不同。
容器重建后标签变化会让曲线断档,长期观察按工作负载(deployment/statefulset)归一化比按容器 ID 更实用。
CPU throttle 指标能直接说明容器是否被限制:持续非零说明 limit 偏紧,比单看使用率更有说服力。
不同部署方式下指标名与标签有差异(kubelet 内置与独立 DaemonSet 不完全一致),接入前先用 Prometheus 的指标浏览核对。