容器监控全景!从 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 架构,并实战部署了核心组件与仪表盘设置,为下一步打造可观测平台打下基础。

相关推荐
薛定谔的悦15 小时前
MQTT通信协议业务层实现的完整开发流程
java·后端·mqtt·struts
enjoy嚣士15 小时前
springboot之Exel工具类
java·spring boot·后端·easyexcel·excel工具类
无限大616 小时前
职场逻辑03:3步搞定高效汇报,让领导看到你的价值
后端
盐水冰16 小时前
【烘焙坊项目】后端搭建(12) - 订单状态定时处理,来单提醒和顾客催单
java·后端·学习
紫丁香16 小时前
AutoGen详解一
后端·python·flask
小涛不学习17 小时前
Spring Boot 详解(从入门到原理)
java·spring boot·后端
Victor35618 小时前
MongoDB(51)什么是分片?
后端
Victor35618 小时前
MongoDB(50)副本集中的角色有哪些?
后端
岁岁种桃花儿19 小时前
kubenetes从入门到上天系列第二十一篇:Kubernetes安装Ingress实战
云原生·容器·kubernetes
IT_陈寒19 小时前
JavaScript开发者必看:5个让你的代码性能翻倍的隐藏技巧
前端·人工智能·后端