《Docker 运维入门实战:给集群装上眼睛——最简监控,看清每个服务还活着没》

举报
yd_274623194 发表于 2026/11/06 08:02:14 2026/11/06
【摘要】 关键词:监控、cAdvisor、Prometheus、Grafana、Docker Swarm前面把集群搭起来了:副本分散在两台机器上,调度、自愈、配置都齐了。但有个很现实的问题:你现在想知道"api 三个副本都还活着吗、哪台机器快满了",得逐台 SSH 上去敲 docker ps 和 docker stats。机器少还能忍,副本一多就是瞎子。今天给集群装上眼睛:用最简的一套监控,把所有节点...

关键词:监控、cAdvisor、Prometheus、Grafana、Docker Swarm

前面把集群搭起来了:副本分散在两台机器上,调度、自愈、配置都齐了。但有个很现实的问题:你现在想知道"api 三个副本都还活着吗、哪台机器快满了",得逐台 SSH 上去敲 docker ps 和 docker stats。机器少还能忍,副本一多就是瞎子。今天给集群装上眼睛:用最简的一套监控,把所有节点、所有服务的状态收进一个面板。

先把需求说小:这一篇不追求大厂级监控体系,只解决三个问题——服务还在不在、资源吃多少、出了问题能不能第一时间知道。够用就行,复杂的东西等真需要了再加。

一、先分清:要看的是三类东西

  • 存活:每个服务的副本数是不是等于期望值(比如 api 应该是 3 个,实际只有 2 个就是出事了);节点是不是还在线。前面讲的健康检查管的是单个容器内部健不健康,监控管的是全局对不对数。
  • 资源:每台机器、每个容器的 CPU、内存、网络流量。哪台机器先到顶、哪个容器在偷偷涨内存,看趋势比看瞬时值有用。
  • 历史:出问题后要能回看"昨晚 3 点发生了什么"。所以监控数据要存一段时间,而不是看一眼就扔。

二、第一层:不用装任何东西的土办法

在装正经监控之前,Swarm 自带的命令先顶一阵,排障时也离不开它们:

docker service ls              # 每个服务的期望副本数 vs 实际副本数
docker service ps myapp_api    # 副本都在哪台机器、什么状态
docker node ls                 # 节点在线情况
docker stats                   # 当前节点上各容器的资源占用(逐台看)

docker service ls 里 REPLICAS 显示 2/3 就是最直接的警报。这层办法的短板也明显:要逐台登录、没有历史、没人盯着的时候出了事不知道。所以它只算"手动巡检",下面两层才是"装上眼睛"。

三、第二层:每个节点放一个采集器 cAdvisor

资源数据要有人采集。cAdvisor 是专门盯容器的采集器:它能报出每个容器的 CPU、内存、网络、磁盘用量。在 Swarm 里部署它有个漂亮的用法——global 模式,集群里每多一台机器,自动多部署一个,不用逐台装:

services:
  cadvisor:
    image: gcr.io/cadvisor/cadvisor:v0.49.1
    deploy:
      mode: global
    ports:
      - "8080:8080"
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:ro
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro

部署后,每台机器的 8080 端口打开就是该节点上所有容器的实时面板,先能逐台看了。(镜像拉取不便的环境可以换用国内镜像源的同版本镜像,配置不变。)

四、第三层:Prometheus 收数据,Grafana 出面板

逐台看还是散的,再加一个汇总层,分工是监控界的经典组合:

  • Prometheus:只部署一份(放管理节点),定时去每个节点的 cAdvisor 那里把数据抓回来存下,自带按时间查询的能力。
  • Grafana:连上 Prometheus,画成面板。直接用社区现成的 Docker/Swarm 监控面板模板导入,不用自己一张张图配。

部署同样写进一个 stack 文件,和业务服务并排跑:

docker stack deploy -c monitor.yml monitor

完成后打开 Grafana,一个页面里能看到:两台节点的资源水位、每个服务的副本与容器占用、出问题的时间点。前面说的三个问题——存活看副本数、资源看曲线、历史拖时间轴——全有着落了。

五、告警:先只配两条

面板是给人看的,人不可能一直看。告警先只配最要命的两条,多了反而会被吵到麻木、最后全关掉:

  1. 副本数不对:某服务实际副本数低于期望并持续几分钟(Prometheus 里对 docker service 期望与实际做对比,或用简单的脚本定时查 docker service ls 的输出)。
  2. 节点掉线或资源见顶:节点不可达,或某台机器内存/CPU 持续高于 85%。

通知渠道用手边现成的就行:邮件、企业微信/钉钉的群机器人 Webhook 都可以。原则是:告警必须少而准,每条响了都值得起床看。

六、三个新手最容易踩的坑

1. 监控把磁盘写满
Prometheus 默认存 15 天数据,容器日志再叠加,磁盘不知不觉就满了——监控自己成了事故源。给数据目录设好保留时长和磁盘配额,定期看一眼监控占了多少空间。

2. 面板裸奔在公网
Grafana、cAdvisor 的端口直接开公网等于把家底亮给全网扫描。只在内网开放,或至少改掉默认密码、加访问控制;cAdvisor 本身没有登录验证,更不能直接暴露。

3. 一上来就装全家桶
日志、链路追踪、告警平台一口气全上,装三天没装完,业务还没看住。顺序就按这一篇的来:先副本数和资源这两样,跑稳了再说别的。

结语

装上监控,这条集群线基本闭环了:服务发现、分摊流量、状态外置、跨机器调度与自愈、配置管理、再到今天的全局监控。还剩最后一块保命的东西没讲——备份:数据库和数据卷里的东西,机器真没了的时候靠什么找回来。下一篇做一次认真的备份与恢复演练,把"备份过"变成"真的恢复出来过"。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。