Docker 容器监控
在 Docker 以及 Docker Compose 容器化场景下,监控不能只看容器活着没,而要覆盖以下 5 个层面:
- 主机层 :CPU、内存、磁盘、网络、负载、文件系统、I/O
- 容器层 :容器 CPU/内存/网络/重启次数/文件系统/生命周期
- 应用层 :Nginx、MySQL、Redis、Java、Go、Python 等业务指标
- 日志层 :容器
stdout/stderr、应用日志、错误日志、访问日志 - 可用性层 :HTTP/TCP/接口探测、业务 SLA、告警闭环
核心原则:
- 指标、日志、告警分离
- 先统一采集,再按业务细化
- 容器监控 + 应用监控 + 主机监控三位一体
- 所有组件都容器化,便于 Compose 管理
- 尽量少侵入业务容器
基础监控栈
- Prometheus :指标采集与存储
- Grafana :可视化大盘
- Alertmanager :告警路由与收敛
- cAdvisor :容器指标采集
- docker daemon metrics
- Node Exporter :宿主机指标采集
日志栈
- Loki :日志存储
- Promtail :日志采集
或者你也可以换成 ELK/EFK,但在 Compose 中 Loki 更轻量、更容易落地
应用 Exporter(按需加)
- MySQL Exporter
- Redis Exporter
- Nginx Exporter
- Postgres Exporter
- MongoDB Exporter
- JMX Exporter(Java)
- 自研应用 /metrics 接口
日志栈常用组件选择
promtail 和 fluentbit , filebeat 比较
| 工具 | 核心定位 | 特点 |
|---|---|---|
| Promtail | Loki 专用日志采集器(强绑定 Grafana 生态) | 只服务 Loki 配置简单 强依赖 label(标签体系) 与 Grafana 联动极好 基本不通用 |
| Fluent Bit | 轻量级、高性能日志采集/转发器(云原生首选) | 云原生事实标准、CNCF 项目(和 Kubernetes 生态融合好) 插件体系强、最通用、最灵活 支持输出到: - Loki - Elasitcsearch - Kafaka - S3 - Opensearch - ClickHouse - HTTP |
| Filebeat | ELK 生态日志采集器(Elastic 官方) | 深度集成 Elasticsearch + Logstash + Kibana 内置大量 module(nginx、mysql、system 等) 优势:开箱即用、解析能力强 劣势:资源占用较高、生态绑定严重 |
promtail 和 fluentbit , filebeat 性能比较
| 项目 | Promtail | Fluent Bit | Filebeat |
|---|---|---|---|
| 内存占用 | ⭐⭐ | ⭐⭐⭐⭐(最低) | ⭐ |
| CPU 占用 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| 吞吐能力 | 中等 | ⭐⭐⭐⭐(非常高) | 较高 |
| 启动速度 | 快 | ⭐⭐⭐⭐ | 较慢 |
| 高并发日志 | 一般 | ⭐⭐⭐⭐ | 较好 |
promtail 和 fluentbit , filebeat 日志处理能力(解析/清洗)
| 能力 | Promtail | Fluent Bit | Filebeat |
|---|---|---|---|
| 正则解析 | ✔️ | ✔️ | ✔️ |
| JSON解析 | ✔️ | ✔️ | ✔️ |
| Pipeline处理 | ⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Lua/扩展脚本 | ❌ | ✔️ | ✔️(processor) |
| 复杂ETL能力 | 弱 | 强 | 很强 |
AlertManager 选择
Grafana 集成的 Alertmanager 还是 Prometheus 集成的 Alertmanager ?
👉 优先选择:Prometheus 原生 Alertmanager(强烈推荐)
👉 Grafana Alerting 适合作为补充,而不是主告警系统
两种架构对比
| 维度 | Prometheus + Alertmanager | Grafana Alerting |
|---|---|---|
| 架构职责 | 清晰(采集 / 存储 / 告警分离) | 混合(Grafana 做太多) |
| 解耦程度 | ⭐⭐⭐⭐ | ⭐⭐ |
| 稳定性 | ⭐⭐⭐⭐(生产级) | ⭐⭐⭐ |
| 可控性 | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| 学习成本 | ⭐⭐⭐ | ⭐⭐ |
| 多数据源支持 | ❌(只 Prometheus) | ⭐⭐⭐⭐ |
| UI 操作 | ❌(写 YAML) | ⭐⭐⭐⭐ |
| 运维规范性 | ⭐⭐⭐⭐ | ⭐⭐ |
Prometheus Alertmanager 的优势(重点)
✅ 1)真正的 运维级告警系统
- 告警逻辑在 Prometheus(靠近数据)
- 告警分发在 Alertmanager(专业做路由)
👉 职责清晰、可控性强
✅ 2)强大的告警路由能力
Alertmanager 支持:
- 分组(group_by)
- 抑制(inhibit_rules)
- 静默(silence)
- 去重(dedup)
- 升级策略(escalation)
👉 Grafana 很难做到同级别复杂度
✅ 3)抗压能力强(生产关键)
Prometheus + Alertmanager:
- 告警计算在 Prometheus
- Alertmanager 专职处理
👉 不会因为 Grafana 挂掉导致告警失效
✅ 4)支持大规模告警治理
例如:
- 10万+ time series
- 多环境(dev/staging/prod)
- 多团队告警路由
👉 Prometheus 体系更成熟
✅ 5)行业标准
几乎所有生产环境:
- Kubernetes
- 云原生平台
- 大厂监控体系
👉 都是 Prometheus + Alertmanager
✅ 5)版本/状态管理
- 容易 GitOps
👉 Grafana 配置在 DB,不好 GitOps,不易审计
- 容易 GitOps
Grafana Alerting 的优势
✅ 1)支持多数据源告警(最大优势)
Grafana 可以对:
- Prometheus
- Loki
- Elasticsearch
- MySQL
- CloudWatch
统一做告警
👉 Prometheus 做不到
✅ 2)UI 配置(非常友好)
- 不用写 YAML
- 点点点就能配
- 对新手友好
✅ 3)适合日志告警
比如:
- Loki 日志错误数
- Elasticsearch error log
- SQL 查询结果
👉 Prometheus 不擅长日志
✅ 4)适合小团队
- 不需要复杂告警治理
- 不需要多环境策略
docker daemon 进程监控
监控 Docker Engine,可以开启 Docker daemon metrics
{ |
重启 Docker
systemctl restart docker |
Prometheus 增加抓取 Docker Daemon Metrics:
- job_name: docker-daemon |
这样能看到:
- Docker Engine 内部指标
- 镜像拉取行为
- 守护进程状态
- API 请求等
cAdvisor 部署和采集
cAdvisor(Container Advisor)主要负责:
- 容器 CPU / 内存 / 网络 / 磁盘
- 容器生命周期
- Docker runtime 统计
- cgroup 级别资源
👉 不负责:
- 应用指标(要 exporter)
- 日志(要 Loki/ELK)
- 告警(要 Prometheus + Alertmanager)
cAdvisor 推荐作为一个独立的监控容器运行,最小可用 docker-compose.yml 参考
|
/var/lib/docker用来读取容器元数据(必须)/sys ,/proc获取 cgroup 和资源统计/var/run读取 Docker socket 信息privileged: true解决权限问题(生产建议保留)/dev/kmsg采集 kernel 相关指标(可选但推荐)
启动 cAdvisor 并通过 http://<host-ip>:8080 或 http://<host-ip>:8080/metrics 验证是否能看到:
- 容器列表
- CPU / Memory / Network 图表
在 Prometheus 中使用以下配置接入:
scrape_configs: |











