prometheus + grafana + cadvisor 是主流轻量 docker 监控方案:cadvisor 采集容器指标并暴露 prometheus 兼容数据,prometheus 拉取存储并定义告警规则,alertmanager 负责通知,grafana 可视化;另有 docker stats 轮询、telegraf+influxdb 等轻量替代方案。

用 Prometheus + Grafana 搭配 cAdvisor 是目前最主流、轻量且可落地的 Docker 容器监控告警方案。
采集容器指标:cAdvisor 是核心数据源
cAdvisor 是 Google 开源的容器资源监控工具,原生支持 Docker,能自动发现所有运行中的容器,实时采集 CPU、内存、网络、磁盘 I/O 等指标,并通过 HTTP 接口(默认 :8080/metrics)暴露 Prometheus 兼容的文本格式数据。
- 启动方式简单:直接运行官方镜像即可,例如:
docker run -d --name=cadvisor -p 8080:8080 --privileged -v /:/rootfs:ro -v /var/run:/var/run:rw -v /sys:/sys:ro -v /var/lib/docker/:/var/lib/docker:ro gcr.io/cadvisor/cadvisor:v0.49.1 - 确保宿主机时间同步、内核版本 ≥ 3.10,否则部分指标(如网络统计)可能缺失或不准
- 若使用 Docker Compose 或 Kubernetes,建议将 cAdvisor 作为 DaemonSet 或全局服务部署,保证每台节点都有一个实例
存储与查询:Prometheus 负责拉取和存算
Prometheus 主动从 cAdvisor 的 /metrics 端点定期抓取数据(默认 15s 一次),本地存储时序数据,并提供强大的 PromQL 查询能力,是告警规则定义的基础。
- 在
prometheus.yml中配置 job 抓取 cAdvisor:scrape_configs:<br> - job_name: 'cadvisor'<br> static_configs:<br> - targets: ['host.docker.internal:8080'] # macOS/Windows;Linux 用宿主机 IP 或 127.0.0.1
- 推荐开启远程写入(如 Thanos 或 VictoriaMetrics)用于长期存储,避免本地磁盘爆满
- 注意 scrape timeout 和 relabel 配置,避免因容器频繁启停导致 target 失联或标签混乱
可视化与告警:Grafana 展示 + Alertmanager 通知
Grafana 用于图表展示与告警面板,但真正触发通知的是 Alertmanager——它接收 Prometheus 发来的告警事件,负责去重、分组、静默、路由并对接邮件、钉钉、企业微信、Webhook 等渠道。
- 在 Prometheus 中定义告警规则,例如检测容器内存使用率超 90%:
groups:<br> - name: container_alerts<br> rules:<br> - alert: HighContainerMemoryUsage<br> expr: (container_memory_usage_bytes{container!="",name=~".+"} / container_spec_memory_limit_bytes{container!="",name=~".+"}) > 0.9<br> for: 2m<br> labels:<br> severity: warning<br> annotations:<br> summary: "High memory usage in container {{ $labels.name }}" - Alertmanager 配置需明确 receiver(如 webhook URL)、route(按 label 分流)、inhibit_rules(防告警风暴)
- Grafana 可直接接入 Prometheus 数据源,导入现成 Dashboard(如 ID 179)快速查看容器健康状态,但告警逻辑仍应由 Prometheus + Alertmanager 承担,而非 Grafana 内置告警(稳定性与可靠性较弱)
轻量替代方案:适用于测试或小规模环境
如果暂不引入整套栈,可用更简方案快速起步:
-
docker stats + 脚本轮询:结合
docker stats --no-stream --format输出 JSON,用 Python/Shell 解析并判断阈值,触发 curl 发送钉钉消息。适合单机验证,但无历史记录、无去重、难维护 -
Telegraf + InfluxDB + Chronograf:InfluxData 生态对容器指标友好,Telegraf 的
docker插件开箱即用,Chronograf 提供基础告警界面,适合已有 InfluxDB 基础的团队 - 云厂商托管服务(如阿里云 ARMS、腾讯云 CODING 监控)也支持 Docker 指标接入,省运维但灵活性低、成本随容器数上升











