要在 Docker 中快速启动 Prometheus + Grafana ,推荐使用 docker run 或 docker-compose。下面提供两种方式(推荐 docker-compose,更简单、可维护)。
✅ 推荐方案:使用 docker-compose.yml(一键启动)
步骤 1:创建项目目录
bash
mkdir prometheus-grafana
cd prometheus-grafana
步骤 2:创建 docker-compose.yml
yaml
# docker-compose.yml
version: '3.8'
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin # 默认用户名 admin,密码 admin
volumes:
- grafana_data:/var/lib/grafana
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
步骤 3:创建 prometheus.yml(监控目标配置)
yaml
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 可选:添加 node_exporter 监控主机(见下方扩展)
# - job_name: 'node'
# static_configs:
# - targets: ['host.docker.internal:9100'] # macOS/Windows
# # Linux 用: ['172.17.0.1:9100']
💡
localhost:9090表示 Prometheus 自监控(可删)。
步骤 4:启动服务
docker-compose up -d
步骤 5:访问服务
-
Prometheus : http://localhost:9090
(查看 Targets:http://localhost:9090/targets)
-
Grafana : http://localhost:3000
- 用户名:
admin - 密码:
admin(首次登录会提示改密码)
- 用户名:
🔌 在 Grafana 中添加 Prometheus 数据源
- 登录 Grafana → 左侧齿轮图标 Configuration → Data sources
- 点击 Add data source
- 选择 Prometheus
- 填写 URL:
http://prometheus:9090(注意:不是 localhost!因为 Grafana 和 Prometheus 在同一个 Docker 网络中) - 点击 Save & Test → 显示 "Data source is working" 即成功!
✅ 关键点:Docker Compose 会自动创建内部网络,服务名
prometheus可直接解析。
🧪 验证是否工作
-
在 Prometheus 的 Graph 页面输入:
up应返回
1(表示目标存活)。 -
在 Grafana 中创建 Dashboard → Add Panel → 输入相同查询,应显示图表。
🚀 扩展:监控本机(Node Exporter)
如果你想监控 宿主机(Ubuntu 服务器)的 CPU/内存/磁盘:
1. 启动 Node Exporter(在宿主机运行)
ini
docker run -d \
--name=node-exporter \
--restart=unless-stopped \
-p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.procfs=/host/proc \
--path.sysfs=/host/sys \
--collector.filesystem.ignored-mount-points="^/(sys|proc|dev|host|etc)($|/)"
2. 修改 prometheus.yml 添加 job
yaml
- job_name: 'node'
static_configs:
- targets: ['host.docker.internal:9100'] # macOS/Windows
# Linux 宿主机用: ['172.17.0.1:9100']
🐧 Linux 注意 :
Docker 默认网桥 IP 是
172.17.0.1,所以写:
vbnettargets: ['172.17.0.1:9100']
3. 重载 Prometheus 配置(无需重启)
bash
curl -X POST http://localhost:9090/-/reload
4. 在 Grafana 导入 Node Exporter Dashboard
- 打开 Grafana → Create → Import
- 输入 ID:1860(官方 Node Exporter 全能面板)
- 选择 Prometheus 数据源 → Import
🗑️ 停止和清理
bash
# 停止并删除容器
docker-compose down
# 彻底删除数据卷(谨慎!)
docker-compose down -v
❓常见问题
Q:Grafana 连不上 Prometheus?
- 检查数据源 URL 是否为
http://prometheus:9090(不是localhost) - 检查
docker-compose ps确认两个服务都在运行
Q:如何持久化数据?
- 上述配置已通过
volumes持久化 Prometheus 和 Grafana 数据 - 即使
docker-compose down,数据也不会丢失
Q:修改配置后如何生效?
- Prometheus:执行
curl -X POST http://localhost:9090/-/reload - Grafana:直接生效(或重启容器)
✅ 总结
| 组件 | 端口 | 访问地址 |
|---|---|---|
| Prometheus | 9090 | http://你的服务器IP:9090 |
| Grafana | 3000 | http://你的服务器IP:3000 |
只需 4 个文件(实际只需 2 个):
prometheus-grafana/
├── docker-compose.yml
└── prometheus.yml
现在你拥有了一个完整的监控栈!如果需要监控 Kubernetes、MySQL、Nginx 等,只需在 prometheus.yml 中添加对应 Exporter 即可。