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

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

相关推荐
醇氧2 小时前
Mac 安装 Docker Desktop
macos·docker·容器
哈里谢顿2 小时前
Docker 中快速启动 Prometheus + Grafana操作指南
docker
人工智能训练4 小时前
Windows中如何将Docker安装在E盘并将Docker的镜像和容器存储在E盘的安装目录下
linux·运维·前端·人工智能·windows·docker·容器
k***82514 小时前
springboot整合libreoffice(两种方式,使用本地和远程的libreoffice);docker中同时部署应用和libreoffice
spring boot·后端·docker
无名小卒Rain5 小时前
docker pull tomcat 报错missing signature key解决办法
运维·docker·容器
java_logo5 小时前
LOBE-CHAT Docker 容器化部署指南
运维·docker·语言模型·容器·llama
U***e637 小时前
Docker增强现实开发
docker·容器·ar
qq_5470261798 小时前
Docker 搭建单节点MySQL服务
mysql·adb·docker
java_logo9 小时前
GPUSTACK Docker 容器化部署指南
运维·mongodb·docker·云原生·容器·eureka·express