《Docker 运维入门实战:给集群装上眼睛——最简监控,看清每个服务还活着没》
关键词:监控、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,一个页面里能看到:两台节点的资源水位、每个服务的副本与容器占用、出问题的时间点。前面说的三个问题——存活看副本数、资源看曲线、历史拖时间轴——全有着落了。
五、告警:先只配两条
面板是给人看的,人不可能一直看。告警先只配最要命的两条,多了反而会被吵到麻木、最后全关掉:
- 副本数不对:某服务实际副本数低于期望并持续几分钟(Prometheus 里对
docker service期望与实际做对比,或用简单的脚本定时查docker service ls的输出)。 - 节点掉线或资源见顶:节点不可达,或某台机器内存/CPU 持续高于 85%。
通知渠道用手边现成的就行:邮件、企业微信/钉钉的群机器人 Webhook 都可以。原则是:告警必须少而准,每条响了都值得起床看。
六、三个新手最容易踩的坑
1. 监控把磁盘写满
Prometheus 默认存 15 天数据,容器日志再叠加,磁盘不知不觉就满了——监控自己成了事故源。给数据目录设好保留时长和磁盘配额,定期看一眼监控占了多少空间。
2. 面板裸奔在公网
Grafana、cAdvisor 的端口直接开公网等于把家底亮给全网扫描。只在内网开放,或至少改掉默认密码、加访问控制;cAdvisor 本身没有登录验证,更不能直接暴露。
3. 一上来就装全家桶
日志、链路追踪、告警平台一口气全上,装三天没装完,业务还没看住。顺序就按这一篇的来:先副本数和资源这两样,跑稳了再说别的。
结语
装上监控,这条集群线基本闭环了:服务发现、分摊流量、状态外置、跨机器调度与自愈、配置管理、再到今天的全局监控。还剩最后一块保命的东西没讲——备份:数据库和数据卷里的东西,机器真没了的时候靠什么找回来。下一篇做一次认真的备份与恢复演练,把"备份过"变成"真的恢复出来过"。
- 点赞
- 收藏
- 关注作者
评论(0)