docker容器监控告警闭环采用cadvisor+prometheus+alertmanager方案,通过cadvisor采集指标、prometheus拉取存储并评估规则、alertmanager分发通知,支持grafana可视化和slack/email告警,全程无侵入。

Docker 容器集成监控工具并配置告警,核心是构建“采集 → 存储 → 判断 → 通知”闭环。主流且落地性强的方案是以 cAdvisor + Prometheus + Alertmanager 为基础栈,辅以 Grafana 可视化和 Slack/Email 等通知渠道。整个过程不依赖修改业务容器,属于无侵入式部署。
一、用 cAdvisor 自动采集容器指标
cAdvisor 是专为 Docker 设计的轻量级采集器,能实时暴露 CPU、内存、网络、磁盘等 20+ 项指标,直接提供 `/metrics` 接口供 Prometheus 拉取。- 启动命令示例(推荐以容器方式运行):
docker run -d \ --name=cadvisor \ --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 \ gcr.io/cadvisor/cadvisor:v0.49.1
- 验证:访问
http://localhost:8080/metrics应返回文本格式的指标数据(如container_cpu_usage_seconds_total{container="xxx"} 123.45)
注意:确保宿主机的 `/var/run/docker.sock` 可被 cAdvisor 访问(部分安全策略会限制),否则无法发现容器。
二、用 Prometheus 抓取并存储指标
Prometheus 主动从 cAdvisor 的 `/metrics` 端点拉取数据,按时间序列存入本地数据库,并支持 PromQL 查询与规则评估。- 在
prometheus.yml中添加抓取任务:scrape_configs: - job_name: 'cadvisor' static_configs: - targets: ['localhost:8080'] # cAdvisor 地址,跨主机时需填实际 IP 或服务名 metrics_path: '/metrics' scrape_interval: 5s - 启动 Prometheus:
docker run -d \ -p 9090:9090 \ -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \ --name prometheus \ prom/prometheus:latest
- 验证:打开
http://localhost:9090/targets,确认cadvisor状态为 UP;输入container_memory_usage_bytes可查到实时数据。
三、用 Alertmanager 配置告警规则与通知
告警逻辑由 Prometheus 定义,但分发、去重、静默等功能由 Alertmanager 承担。需两处配置:-
1. Prometheus 告警规则文件(如
alerts.yml):groups:
- name: docker_alerts
rules:
- alert: HighContainerMemoryUsage expr: (container_memory_usage_bytes / container_spec_memory_limit_bytes) * 100 > 80 for: 2m labels: severity: warning annotations: summary: "High memory usage in {{ $labels.container }}" description: "{{ $labels.container }} using {{ $value | printf \"%.2f\" }}% of its memory limit"
-
2. Prometheus 主配置中加载规则并指向 Alertmanager:
rule_files: - "alerts.yml"
alerting: alertmanagers:
-
static_configs:
OpenClaw Docker Setup下载在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- targets: ['localhost:9093']
-
Alertmanager 配置(
alertmanager.yml)示例(邮件通知):global: smtp_smarthost: 'smtp.gmail.com:587' smtp_from: 'your@gmail.com' smtp_auth_username: 'your@gmail.com' smtp_auth_password: 'app-password-here'
route: receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: 'admin@example.com'
- 启动 Alertmanager:
docker run -d \ -p 9093:9093 \ -v $(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml \ --name alertmanager \ prom/alertmanager:latest
四、可选增强:Grafana 可视化 + Slack 通知
- Grafana 连接 Prometheus 数据源,导入现成仪表盘(如 ID 17036 的 Docker & cAdvisor 监控面板),直观查看容器资源趋势。 - Slack 通知只需在 Alertmanager 的 `webhook_configs` 中填入 Slack Incoming Webhook URL,无需额外中间服务。整个链路启动后,当某个容器内存持续超限 2 分钟,Prometheus 就会触发告警,Alertmanager 去重后通过邮件或 Slack 发出通知——全程自动,无需人工轮询。










