Docker 中快速启动 Prometheus + Grafana操作指南(二)

之前已经用 docker-compose 启动了 Prometheus 和 Grafana,现在想新增 Node Exporter 来监控宿主机(即我的 k8s-master-node 服务器)的系统指标。下面是最简单、最安全的操作步骤。


✅ 步骤总览

  1. 修改 docker-compose.yml,加入 Node Exporter 服务
  2. 重启 stack(只重启新增服务)
  3. 更新 prometheus.yml 添加抓取任务
  4. 重载 Prometheus 配置
  5. 在 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 服务名

✅ 关键点:

因为 prometheusnode-exporter 在同一个 Docker Compose 网络中,可以直接用服务名 node-exporter 通信。


🔄 第四步:重载 Prometheus 配置(无需重启)

Prometheus 已启用 --web.enable-lifecycle,所以可以热重载:

bash 复制代码
curl -X POST http://localhost:9090/-/reload

如果返回空(无错误),说明成功。

验证:

访问 http://<你的IP>:9090/targets,你应该看到两个 target:

  • prometheus → UP
  • node → UP

📊 第五步:在 Grafana 中查看数据

  1. 打开 Grafana:http://<你的IP>:3000

  2. 登录(admin / admin)

  3. 确保已添加 Prometheus 数据源(URL: http://prometheus:9090

  4. 导入官方 Node Exporter 仪表盘:

    • 点击 + CreateImport

    • 输入 Dashboard ID : 1860

    • 选择你的 Prometheus 数据源

    • 点击 Import

✅ 你现在可以看到 CPU、内存、磁盘、网络等完整主机监控图表!


🛠️ 故障排查

❌ 问题:node target 显示 DOWN

  • 检查 docker-compose ps 确认 node-exporter 正在运行

  • prometheus 容器内测试连通性:

    bash 复制代码
    docker 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

目前已经拥有了一个完整的 主机监控系统

相关推荐
忆~遂愿几秒前
GE 引擎与算子版本控制:确保前向兼容性与图重写策略的稳定性
大数据·开发语言·docker
70asunflower4 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
春日见4 小时前
车辆动力学:前后轮车轴
java·开发语言·驱动开发·docker·计算机外设
xuhe25 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
星火s漫天5 小时前
第一篇: 使用Docker部署flask项目(Flask + DB 容器化)
数据库·docker·flask
MonkeyKing_sunyuhua7 小时前
docker compose up -d --build 完全使用新代码打包的方法
docker·容器·eureka
醇氧8 小时前
【docker】mysql 8 的健康检查(Health Check)
mysql·docker·容器
技术路上的探险家8 小时前
Ubuntu下Docker与NVIDIA Container Toolkit完整安装教程(含国内源适配)
linux·ubuntu·docker
70asunflower11 小时前
用Docker创建不同的容器类型
运维·docker·容器
小Pawn爷12 小时前
3.Dockerfile
docker