容器监控全景!从 cAdvisor 到 Prometheus + Grafana 构建资源观测平台

容器跑着跑着就"满了"?Pod 为什么频繁 OOM?Node 到底瓶颈在哪?这一讲,我们将带你从基础到实战,构建起完整的容器监控体系,为稳定运维保驾护航!


一、为什么容器监控至关重要?

在传统架构中,资源消耗相对固定,应用部署也较少变动。但在容器化环境中:

  • 容器数量动态弹性伸缩
  • 容器生命周期极短
  • 单个宿主机承载多个容器,资源竞争剧烈
  • 多层抽象结构:容器、Pod、Node、集群

因此,仅靠传统监控工具(如 top、htop、Zabbix)难以胜任,必须构建专门的容器可观测体系。


二、容器监控的关键维度

容器监控需覆盖多个层面,包括:

层级 关键指标
容器/Pod CPU、内存、磁盘、网络使用情况
Node(宿主机) 系统负载、资源总量与剩余量
集群层 节点健康、调度状态、控制器状况
应用层 QPS、响应时间、错误率等

三、容器监控主流方案对比

方案 组成 特点
cAdvisor Docker 原生监控组件 轻量、实时,但功能有限
Prometheus 指标采集 + 时序存储 社区主流,扩展性强
Grafana 可视化展示平台 多数据源、支持告警
kube-state-metrics K8s 对象状态指标 集群维度指标补充
node-exporter 宿主机指标采集器 采集 CPU、磁盘、内存等主机资源

四、容器监控架构图

说明:

  • cAdvisor:实时采集容器级别的 CPU、内存等使用信息;
  • node-exporter:采集宿主机指标;
  • kube-state-metrics:提供集群对象状态指标;
  • 所有指标统一送入 Prometheus;
  • Grafana 展示可视化仪表盘、设置告警规则。

五、部署 Prometheus + Grafana 监控平台

5.1 使用 kube-prometheus 快速部署(推荐)

kube-prometheus 是官方维护的 K8s 全栈监控部署方案,涵盖以下组件:

  • Prometheus
  • Alertmanager
  • Grafana
  • node-exporter
  • kube-state-metrics

部署方式(基于 Kustomize):

bash 复制代码
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus
kubectl apply -f manifests/setup
kubectl apply -f manifests/

5.2 安装完成后访问路径

  • Grafana Dashboard:http://:30000
  • 默认用户名密码:admin/admin
  • 可导入 ID:1860 的容器监控仪表盘模板

六、如何监控 Docker 容器?cAdvisor 使用指南

6.1 什么是 cAdvisor?

  • 全称:Container Advisor
  • Google 开发,原生支持 Docker,能实时采集:
    • 容器 CPU/内存/网络/Disk I/O 使用
    • 容器生命周期信息

6.2 部署方式

bash 复制代码
docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:rw \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  google/cadvisor:latest

6.3 效果展示

  • 访问 http://localhost:8080
  • 可查看所有容器实时资源使用情况
  • Prometheus 可通过抓取 /metrics 接口采集数据

七、Grafana 可视化仪表盘推荐

仪表盘名称 Grafana Dashboard ID
Docker 容器监控 179
Node Exporter 1860
Kubernetes 总览 6417
Pod 级别资源使用 315

通过导入对应 Dashboard ID,可以快速搭建出丰富的监控界面。


八、监控告警设置

借助 Prometheus Alertmanager,可以设置监控告警:

示例:Pod OOM 告警规则

yaml 复制代码
- alert: ContainerMemoryUsageHigh
  expr: container_memory_usage_bytes / container_spec_memory_limit_bytes > 0.9
  for: 1m
  labels:
    severity: warning
  annotations:
    summary: "容器内存使用过高(超过90%)"

可将告警通过邮件、钉钉、Slack、飞书等方式发送。


九、容器监控最佳实践

建议 说明
采集频率合理 容器生命周期短,建议抓取周期 ≤ 30s
标签管理规范 给容器打上业务标签,便于查询
告警设置分级 warning / critical 分层处理
日志 + 指标结合 单独指标不足以定位问题,需结合日志/Trace
自动化仪表盘 使用 Helm、Json 模板自动化部署和复用仪表盘

十、总结

本文带你全面了解了容器监控的现状与解决方案,从单节点 cAdvisor,到集群级 Prometheus + Grafana 架构,并实战部署了核心组件与仪表盘设置,为下一步打造可观测平台打下基础。

相关推荐
江畔何人初20 分钟前
/etc/profile,.profile,.bashrc三者区分
linux·运维·云原生
咖啡啡不加糖35 分钟前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
gAlAxy...1 小时前
SpringBoot Servlet 容器全解析:嵌入式配置与外置容器部署
spring boot·后端·servlet
BYSJMG1 小时前
计算机毕业设计选题推荐:基于Hadoop的城市交通数据可视化系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
努力搬砖的咸鱼1 小时前
部署你的第一个应用到 K8s
微服务·云原生·容器·kubernetes
BYSJMG2 小时前
Python毕业设计选题推荐:基于大数据的美食数据分析与可视化系统实战
大数据·vue.js·后端·python·数据分析·课程设计·美食
东东5162 小时前
OA自动化居家办公管理系统 ssm+vue
java·前端·vue.js·后端·毕业设计·毕设
程序员鱼皮2 小时前
前特斯拉 AI 总监:AI 编程最大的谎言,是 “提效”
前端·后端·ai·程序员·开发
舰长1152 小时前
使用 kubeadm搭建生产环境的单 master 节点 K8S 集群(一)
云原生·容器·kubernetes
好好研究3 小时前
SpringBoot使用外置Tomcat
spring boot·后端·tomcat