Docker 命令搭建 Prometheus + Grafana
和 Zabbix 类似,这套系统也是三个核心组件:
📋 准备工作
确保 Docker 已安装,然后创建专用网络:
# 创建一个网络,让三个容器能互相通信
docker network create monitor-net第一步:启动 Node Exporter(采集服务器指标)
# docker run = 创建并启动容器
# -d = 后台运行
# --name node-exporter = 容器名字
# --network monitor-net = 加入监控网络
# --restart unless-stopped = 意外退出时自动重启
#
# -p 9100:9100 = 端口映射:宿主机 9100 映射到容器 9100
# 9100 是 Node Exporter 的默认端口,Prometheus 会从这里拉取数据
#
# prom/node-exporter:latest = 镜像名
# --path.rootfs=/host = 让 Node Exporter 读取宿主机的系统信息
# -v /:/host:ro = 挂载宿主机的根目录到容器内的 /host(只读)
# 这样 Node Exporter 就能采集 CPU、内存、磁盘等系统指标了
docker run -d \
--name node-exporter \
--network monitor-net \
--restart unless-stopped \
-p 9100:9100 \
-v /:/host:ro \
prom/node-exporter:latest \
--path.rootfs=/host
# 验证是否启动成功
docker ps | grep node-exporter
# 测试 Node Exporter 是否正常工作
# 浏览器访问 http://你的服务器IP:9100/metrics
# 如果看到一堆数据,说明正常第二步:启动 Prometheus(核心服务)
Prometheus 需要一份配置文件来告诉它"去哪里采集数据"。我们先创建配置文件。
2.1 创建 Prometheus 配置文件
# 创建存放配置文件的目录
mkdir -p ~/prometheus
# 用 cat 命令创建配置文件(EOF 表示多行文本)
cat > ~/prometheus/prometheus.yml << 'EOF'
# 全局配置
global:
scrape_interval: 15s # 每 15 秒采集一次数据
evaluation_interval: 15s # 每 15 秒评估一次告警规则
# 采集目标配置
scrape_configs:
# 第一个采集任务:监控 Prometheus 自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 第二个采集任务:监控 Node Exporter(服务器指标)
- job_name: 'node-exporter'
static_configs:
# 注意:这里用的是容器名 node-exporter,因为它们在同一个网络里
- targets: ['node-exporter:9100']
EOF
# 查看配置文件内容
cat ~/prometheus/prometheus.yml2.2 启动 Prometheus 容器
# --name prometheus = 容器名字
# --network monitor-net = 加入监控网络
# -p 9090:9090 = 映射 9090 端口(Prometheus 的 Web UI)
#
# -v ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
# 把宿主机上的配置文件挂载到容器内,这样修改配置不用重建容器
#
# -v prometheus-data:/prometheus
# 创建一个数据卷,用来持久化存储监控数据(容器删了数据还在)
#
# prom/prometheus:latest = 镜像名
# --config.file=/etc/prometheus/prometheus.yml = 指定配置文件位置
# --storage.tsdb.path=/prometheus = 指定数据存储位置
# --web.enable-lifecycle = 允许通过 HTTP API 热加载配置(不用重启)
docker run -d \
--name prometheus \
--network monitor-net \
--restart unless-stopped \
-p 9090:9090 \
-v ~/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v prometheus-data:/prometheus \
prom/prometheus:latest \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/prometheus \
--web.enable-lifecycle
# 验证启动
docker ps | grep prometheus
# 查看日志,确认没有报错
docker logs prometheus
# 测试 Prometheus
# 浏览器访问 http://你的服务器IP:9090
# 点击 Status -> Targets,如果看到 node-exporter 状态为 UP,说明采集成功第三步:启动 Grafana(可视化面板)
# --name grafana = 容器名字
# --network monitor-net = 加入监控网络
# -p 3000:3000 = 映射 3000 端口(Grafana 的 Web 界面)
#
# -v grafana-data:/var/lib/grafana
# 挂载数据卷,保存 Grafana 的配置、面板、数据源等
#
# grafana/grafana:latest = 镜像名
docker run -d \
--name grafana \
--network monitor-net \
--restart unless-stopped \
-p 3000:3000 \
-v grafana-data:/var/lib/grafana \
grafana/grafana:latest
# 验证启动
docker ps | grep grafana
# 查看日志
docker logs grafana第四步:配置 Grafana 连接 Prometheus
4.1 登录 Grafana
打开浏览器,访问:
http://你的服务器IP:3000首次登录:
用户名:
admin密码:
admin
修改密码(可选):系统会提示你修改密码,也可以跳过。
4.2 添加 Prometheus 数据源
登录后,点击左侧菜单的 齿轮图标 ⚙️(Configuration)→ Data Sources
点击 Add data source 按钮
选择 Prometheus(第一个就是)
配置数据源:
Name:
Prometheus(可以自己取名)URL:
http://prometheus:9090注意:这里用的是容器名
prometheus,因为 Grafana 和 Prometheus 在同一个monitor-net网络里其他选项保持默认
点击底部的 Save & Test 按钮
如果看到绿色提示 "Data source is working",说明配置成功!
4.3 导入一个现成的 Dashboard(仪表盘)需要科学上网
Grafana 官网有很多现成的模板可以直接用:
点击左侧菜单的 + → Import
在 Import via grafana.com 输入框里输入模板 ID:
Node Exporter 监控模板:输入
1860或者 Linux 系统监控模板:输入
8919
点击 Load
在 Prometheus 下拉框里选择你刚添加的数据源(
Prometheus)点击 Import
成功!你会看到服务器的 CPU、内存、磁盘、网络等监控图表 🎉
第五步(可选):监控 Docker 容器自身
如果想监控 Docker 容器的运行状态(CPU、内存使用率等),可以加一个 cAdvisor 容器:
# cAdvisor = Container Advisor,专门采集容器指标
docker run -d \
--name cadvisor \
--network monitor-net \
--restart unless-stopped \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro \
gcr.io/cadvisor/cadvisor:latest
# 然后修改 Prometheus 配置文件,添加 cAdvisor 的采集目标
# 在 ~/prometheus/prometheus.yml 的 scrape_configs 里添加:
# - job_name: 'cadvisor'
# static_configs:
# - targets: ['cadvisor:8080']
# 修改后,热加载配置(不用重启容器):
# curl -X POST http://localhost:9090/-/reload📊 最终架构图
浏览器
│
▼ (访问 3000 端口)
┌───────────────┐
│ Grafana │ ← 可视化展示
│ (端口 3000) │
└───────┬───────┘
│ 查询数据
▼ (访问 prometheus:9090)
┌───────────────┐
│ Prometheus │ ← 存储 + 查询
│ (端口 9090) │
└───────┬───────┘
│ 拉取指标 (Pull)
┌───────────┼───────────┐
▼ ▼ ▼
┌─────────────┐ ┌──────────┐ ┌──────────┐
│node-exporter│ │ cAdvisor │ │ 其他... │
│ (端口 9100) │ │(端口8080)│ │ │
└─────────────┘ └──────────┘ └──────────┘
采集系统指标 采集容器指标🧹 常用管理命令
# 查看所有监控容器
docker ps | grep -E "prometheus|grafana|node-exporter|cadvisor"
# 查看容器日志
docker logs prometheus
docker logs grafana
# 重启容器
docker restart prometheus
# 停止容器
docker stop prometheus grafana node-exporter
# 删除容器(谨慎操作)
docker rm -f prometheus grafana node-exporter cadvisor
# 查看 Prometheus 采集目标状态
# 浏览器访问 http://你的IP:9090/targets
# 在 Prometheus 里查询数据(测试用)
# 浏览器访问 http://你的IP:9090/graph
# 输入 node_cpu_seconds_total 然后点击 Execute✅ 检查清单
💡 与 Zabbix 对比
原创
Docker 命令搭建 Prometheus + Grafana
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法