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 服务名

✅ 关键点:

因为 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 → UP
  • node → UP

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

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

  2. 登录(admin / admin)

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

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

    • 点击 + Create → Import

    • 输入 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

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

相关推荐
溜达的大象7 小时前
极空间部署Traggo时间追踪工具:Docker安装、标签管理与cpolar远程访问
运维·docker·容器
脏脏a7 小时前
极空间部署 Dashlet:Docker 搭建私人导航仪表盘,再配置固定公网访问
运维·docker·容器
User_芊芊君子8 小时前
Prometheus接入Pushgateway实战:二进制与Docker部署、指标推送及远程上报
docker·容器·prometheus
databook8 小时前
手把手带你走一遍:机器学习模型如何用FastAPI和Docker部署
python·docker·fastapi
江湖有缘9 小时前
3款开源日记工具整理合集,可Docker一键部署!
docker·容器·开源
EatFans21 小时前
Docker 实战部署:从本地镜像到云服务器,一篇走通 FastAPI + Celery + MySQL + Redis + Nginx
docker·fastapi
judezh21 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
暗不需求21 小时前
Docker 入门:从「光盘与 DVD」到全栈项目容器化实战
docker·容器·面试
探索云原生21 小时前
一个 Deployment 就能跑 vLLM,为什么还需要 KServe?
docker·ai·云原生·kubernetes·go
分布式存储与RustFS6 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储