docker compose 一键部署 prometheus+grafana 监控栈,通过定义 prometheus、grafana、alertmanager 三个核心服务,共用自定义网络、精准挂载配置与数据卷、正确设置端口和启动依赖,实现自动化初始化与持久化运行。
用 docker compose 部署 prometheus + grafana 监控系统,核心是把各组件定义为独立服务,通过统一网络互通、卷挂载配置、端口映射和启动顺序协同工作。不需要手动拉镜像或逐个 run 容器,一份 yaml 就能完成初始化与持续运行。
服务划分与基础结构
典型监控栈至少包含三个必需服务:
- Prometheus:主采集与存储服务,监听 9090 端口,需挂载配置文件(prometheus.yml)和规则目录
- Grafana:前端可视化服务,监听 3000 端口,需挂载数据卷保存仪表盘和用户信息
- Alertmanager(可选但推荐):告警分发中枢,监听 9093 端口,需挂载 alertmanager.yml 配置
所有服务建议共用一个自定义 bridge 网络(如 monitor_net),避免使用默认 bridge,确保容器名可直接解析(例如 prometheus 能用 alertmanager:9093 访问告警服务)。
关键配置要点
每个服务的 docker-compose.yml 片段需注意以下细节:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
Prometheus 的 command 参数要显式指定配置路径和保留策略,例如:
--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.retention.time=30d -
Grafana 的密码设置必须通过环境变量
GF_SECURITY_ADMIN_PASSWORD初始化,默认 admin 用户密码不会生成随机值 -
Alertmanager 配置中 targets应写成
alertmanager:9093(容器名+端口),而不是 localhost 或 IP,否则 Prometheus 无法推送告警 -
volume 挂载路径要准确:Prometheus 挂载的是
./prometheus.yml到/etc/prometheus/prometheus.yml,不是整个目录;Grafana 推荐挂载grafana_data:/var/lib/grafana这类命名卷,便于持久化
配套 Exporter 可按需加入
光有 Prometheus 和 Grafana 只能看自身状态。要监控真实资源,得加 exporter 服务:
-
node-exporter:采集宿主机 CPU、内存、磁盘等指标,需特权模式和 host 网络或特定挂载(
/proc,/sys) -
mysqld-exporter:监控 MySQL,注意 MySQL 用户需授权
PROCESS, REPLICATION CLIENT, SELECT ON performance_schema.* -
redis-exporter:连接 Redis 实例,通过
command参数传入地址,如--redis.addr=redis://host.docker.internal:6379
这些 exporter 作为普通服务加入 compose 文件即可,Prometheus 的 scrape_configs 中添加对应 job_name 和 targets(如 node-exporter:9100)就能自动拉取。
启动与验证流程
部署后执行三步快速确认是否就绪:
- 运行
docker-compose up -d启动全部服务 - 访问
http://localhost:9090/targets查看所有 scrape target 是否显示 UP 状态 - 登录
http://localhost:3000(默认 admin/admin),添加 Prometheus 数据源(URL 填http://prometheus:9090),再导入 Node Exporter 等现成仪表盘 ID(如 1860)










