之前已经用 docker-compose 启动了 Prometheus 和 Grafana,现在想新增 Node Exporter 来监控宿主机(即我的 k8s-master-node 服务器)的系统指标。下面是最简单、最安全的操作步骤。
✅ 步骤总览
- 修改
docker-compose.yml,加入 Node Exporter 服务 - 重启 stack(只重启新增服务)
- 更新
prometheus.yml添加抓取任务 - 重载 Prometheus 配置
- 在 Grafana 中导入仪表盘
🔧 第一步:编辑 docker-compose.yml
进入你的目录:
bash
cd ~/prometheus-grafana
编辑 docker-compose.yml,添加 node-exporter 服务:
bash
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
volumes:
- grafana_data:/var/lib/grafana
restart: unless-stopped
# 👇 新增 node-exporter 服务
node-exporter:
image: quay.io/prometheus/node-exporter:latest
container_name: node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro,rslave
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: unless-stopped
volumes:
prometheus_data:
grafana_data:
⚠️ 注意:
- 挂载
/proc、/sys、/是为了让 Node Exporter 能读取宿主机信息。- 在 YAML 中,
$$是为了转义$(因为docker-compose会解析${},所以单个$可能报错)。
🔄 第二步:应用变更(只启动新服务)
运行以下命令,Docker Compose 会自动识别新增服务并启动它,不影响已有容器:
docker-compose up -d
验证是否成功:
perl
docker ps | grep node-exporter
你应该看到类似输出:
bash
... quay.io/prometheus/node-exporter:latest ... 0.0.0.0:9100->9100/tcp node-exporter
访问测试:
浏览器打开 http://<你的服务器IP>:9100/metrics,应看到大量以 node_ 开头的指标(如 node_cpu_seconds_total)。
📝 第三步:修改 prometheus.yml 添加抓取任务
编辑 prometheus.yml:
javascript
nano ~/prometheus-grafana/prometheus.yml
添加一个 job:
yaml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 👇 新增:抓取 node-exporter
- job_name: 'node'
static_configs:
- targets: ['node-exporter:9100'] # 使用 Docker Compose 服务名
✅ 关键点:
因为
prometheus和node-exporter在同一个 Docker Compose 网络中,可以直接用服务名node-exporter通信。
🔄 第四步:重载 Prometheus 配置(无需重启)
Prometheus 已启用 --web.enable-lifecycle,所以可以热重载:
bash
curl -X POST http://localhost:9090/-/reload
如果返回空(无错误),说明成功。
验证:
访问 http://<你的IP>:9090/targets,你应该看到两个 target:
prometheus→ UPnode→ UP
📊 第五步:在 Grafana 中查看数据
-
打开 Grafana:
http://<你的IP>:3000 -
登录(admin / admin)
-
确保已添加 Prometheus 数据源(URL:
http://prometheus:9090) -
导入官方 Node Exporter 仪表盘:
-
点击 + Create → Import
-
输入 Dashboard ID :
1860- 这是 Node Exporter Full 官方面板
-
选择你的 Prometheus 数据源
-
点击 Import
-
✅ 你现在可以看到 CPU、内存、磁盘、网络等完整主机监控图表!
🛠️ 故障排查
❌ 问题:node target 显示 DOWN
-
检查
docker-compose ps确认node-exporter正在运行 -
在
prometheus容器内测试连通性:bashdocker exec -it prometheus ping node-exporter docker exec -it prometheus curl -s http://node-exporter:9100/metrics | head
❌ 问题:Node Exporter 没有指标
- 访问
http://服务器IP:9100/metrics看是否返回内容 - 检查挂载是否正确(特别是
/proc)
❌ 问题:Grafana 找不到数据
- 确认数据源 URL 是
http://prometheus:9090(不是 localhost!) - 在 Explore 中输入
node_load1测试查询
✅ 最终效果
| 组件 | 地址 |
|---|---|
| Prometheus Web UI | http://你的IP:9090 |
| Node Exporter Metrics | http://你的IP:9100/metrics |
| Grafana | http://你的IP:3000 |
目前已经拥有了一个完整的 主机监控系统!