Prometheus + Grafana + Node Exporter 监控部署指南

📘 文档目的与功能

  本文档介绍如何在 Ubuntu 24.04 上通过 Docker 容器化方式 快速部署 Prometheus + Grafana 监控系统,并实现对 Linux 和 Windows 主机的指标采集与可视化。

  内容包括:Docker 环境准备、Prometheus 与 Grafana 的 Compose 部署、node_exporter 客户端安装、Grafana 数据源配置与中文面板导入,以及常见问题排查与扩展监控(容器、温度等)。

  通过此方案,可实现环境隔离、一键启停、低维护成本的监控体系,适用于单机到多主机的运维场景。

实测环境

  • 服务端:192.168.20.172(Ubuntu 24.04 + Docker)
  • 被监控节点:192.168.20.167(Ubuntu 24.04 + node_exporter)
一、方案概述
1.1 监控架构图
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  被监控主机      │     │  监控服务端      │     │  可视化展示     │
│  node_exporter  │ ──> │  Prometheus     │ ──> │  Grafana        │
│  (端口:9100)    │     │  (端口:9090)    │     │  (端口:3000)    │
└─────────────────┘     └─────────────────┘     └─────────────────┘
1.2 核心组件说明
组件 版本 用途 访问地址
Prometheus latest 指标采集与存储 http://服务端IP:9090
Grafana latest 数据可视化 http://服务端IP:3000
node_exporter 1.7.0+ 主机指标采集 http://节点IP:9100/metrics
1.3 方案优势
  • ✅ 极简部署:Docker Compose一键启动
  • ✅ 中文友好:Grafana预设中文界面
  • ✅ 低维护成本:apt安装node_exporter,systemd管理
  • ✅ 可扩展性强:支持Linux/Windows/容器等各类环境
二、服务端部署(Docker一键安装)
2.1 准备工作:安装 Docker

在监控服务端(本例为 192.168.20.172)执行:

# 更新系统包
sudo apt update && sudo apt upgrade -y

# 安装Docker
sudo apt install -y docker.io docker-compose

# 设置开机自启并启动Docker
sudo systemctl enable --now docker
2.2 创建监控目录和配置文件
mkdir -p /opt/monitoring
cd /opt/monitoring

# 创建docker-compose.yml文件
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
    ports:
      - "9090:9090"
    networks:
      - monitoring

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin123
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
    volumes:
      - grafana_data:/var/lib/grafana
    networks:
      - monitoring
    depends_on:
      - prometheus

volumes:
  prometheus_data:
  grafana_data:

networks:
  monitoring:
    driver: bridge
EOF
2.3 配置Prometheus采集规则
# 创建Prometheus配置文件
cat > prometheus.yml << 'EOF'
global:
  scrape_interval: 15s      # 采集间隔
  evaluation_interval: 15s  # 规则评估间隔

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets:
        - '192.168.20.167:9100'  # 替换为你的被监控主机IP
        # 如需监控多台,按以下格式添加:
        # - '192.168.20.168:9100'
        # - '192.168.20.169:9100'
EOF
2.4 一键启动监控栈
# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 查看运行日志
docker-compose logs -f

#修改完配置重启服务
docker restart prometheus
2.5 验证部署结果
服务 访问地址 预期结果
Prometheus http://192.168.20.172:9090/targets 所有target状态为UP
Grafana http://192.168.20.172:3000 登录页面正常显示
三、客户端部署(被监控主机)
3.1 安装 node_exporter

在被监控主机(本例为 192.168.20.167)执行:

sudo apt update
sudo apt install -y prometheus-node-exporter
systemctl enable --now prometheus-node-exporter
3.2 验证客户端

# 检查服务状态
systemctl status prometheus-node-exporter

# 测试指标接口
http://192.168.20.167:9100/metrics
四、Grafana可视化配置
4.1 首次登录
  1. 访问:http://192.168.20.172:3000
  2. 登录凭证:
    • 用户名:admin
    • 密码:admin123(已在docker-compose中预设)
4.2 添加Prometheus数据源
操作步骤:
1. 点击左侧齿轮图标 Connections → Data sources → Add data source
2. 选择 Prometheus
3. 在 URL 字段填写:http://prometheus:9090
4. 点击 "Save & Test" 验证连接
成功标志:显示绿色提示 “Successfully queried the Prometheus API.”,然后按提示”Open in Metrics Drilldown“
4.3 导入中文监控面板

🎯 推荐的中文模板

模板名称 ID 特点
Node Exporter 中文版 8919、20389 界面简洁,指标全面,新手首选
Linux主机详情中文版 16098 包含CPU/内存/磁盘/网络的详细监控
Linux主机排序基础监控 20390 轻量级,适合快速巡检
Windows主机监控 16523
📥 导入步骤
1. 点击右上角 "+" 号 → Import dashboard
2. 输入模板ID:1860
3. 点击 "Load"
4. 在 "Prometheus" 下拉框选择刚才创建的数据源
5. 点击 "Import" 完成
五、日常运维指南
5.1 服务启停命令
# 监控服务端操作
cd ~/monitoring

# 启动所有服务
docker compose up -d

# 停止所有服务
docker compose down

# 重启特定服务
docker-compose restart prometheus
docker-compose restart grafana
docker restart prometheus

# 查看实时日志
docker compose logs -f prometheus
5.2 配置修改

修改Prometheus配置后需重启

# 1. 编辑配置文件
vim prometheus.yml

# 2. 重启Prometheus使配置生效
docker restart prometheus

# 3. 验证配置
# 访问 http://192.168.20.172:9090/targets 确认所有targets为UP
六、常见问题排查
❓ Q1: Grafana页面显示”No data”

排查步骤

# 1. 检查Prometheus targets状态
curl http://192.168.20.172:9090/api/v1/targets | grep -A 5 '"state":"up"'

# 2. 确认node_exporter是否正常运行
curl http://192.168.20.167:9100/metrics | grep node_cpu_seconds

# 3. 检查防火墙
sudo ufw status
❓ Q2: Prometheus targets显示”Connection refused”

解决方法

# 在被监控主机检查node_exporter
systemctl status prometheus-node-exporter
netstat -tlnp | grep 9100

# 临时关闭防火墙测试
sudo ufw disable
# 如确认为防火墙问题,重新开放端口
sudo ufw allow 9100/tcp
sudo ufw enable
❓ Q3: 容器无法启动
# 查看详细错误
docker compose logs

# 常见原因及解决:
# - 端口被占用
sudo lsof -i:9090
sudo lsof -i:3000

# - 配置文件格式错误
docker run --rm -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus --config.file=/etc/prometheus/prometheus.yml
❓ Q4: 忘记Grafana密码
# 方法一:重置密码
docker exec -it grafana grafana-cli admin reset-admin-password newpassword

# 方法二:删除Grafana数据卷重新创建
docker compose down -v
docker compose up -d
# 注意:这会清除所有配置和面板
七、进阶扩展
7.1 监控多台主机

修改 prometheus.yml,添加多个target:

scrape_configs:
  - job_name: 'node_exporter'
    static_configs:
      - targets:
        - '192.168.20.167:9100'  # 服务器A
        - '192.168.20.168:9100'  # 服务器B
        - '192.168.20.169:9100'  # 服务器C
7.2 Windows主机监控
  1. 在Windows主机下载 windows_exporter
  2. 以管理员身份安装:msi安装包默认配置即可
  3. 在Prometheus配置中添加:
- targets: ['Windows_IP:9182']
确认windows_exporter服务已启动:
# 以管理员身份打开PowerShell,执行:
Get-Service -Name windows_exporter

# 如果服务未运行,启动它:
Start-Service -Name windows_exporter

# 设置为开机自启:
Set-Service -Name windows_exporter -StartupType Automatic

# 打开浏览器访问:
http://localhost:9182/metrics

# 添加防火墙规则:第1条,开放端口;第2条,添加IP白名单
New-NetFirewallRule -DisplayName "windows_exporter" -Direction Inbound -Protocol TCP -LocalPort 9182 -Action Allow
Set-NetFirewallRule -DisplayName "windows_exporter" -RemoteAddress 192.168.20.172
# 验证规则是否添加成功
Get-NetFirewallRule -DisplayName "windows_exporter" | Format-Table -AutoSize

# 在Ubuntu服务器执行
docker restart prometheus

#重启服务
Restart-Service windows_exporter
7.3 Docker容器监控

部署cAdvisor采集容器指标:

docker run -d \
  --name=cadvisor \
  --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
Prometheus配置添加(注意格式 空格):
- job_name: 'cadvisor'
  static_configs:
    - targets: ['192.168.20.172:8080']
7.4 温度监控(适用于物理机)
# 安装传感器工具
sudo apt install -y lm-sensors
sudo sensors-detect --auto
sudo systemctl enable --now prometheus-node-exporter

# node_exporter会自动采集温度指标
# 在Grafana中可查看 node_hwmon_temp_celsius

wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
tar xvf node_exporter-1.10.2.linux-amd64.tar.gz
cp node_exporter-1.10.2.linux-amd64/node_exporter /usr/local/bin/
    
7.5 极简安装 Node Exporter(TencentOS / CentOS 7)
# ============================================
# 在 TencentOS 或 CentOS 7 上执行整段命令
# ============================================

# 1. 下载并安装 node_exporter
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz
tar xvf node_exporter-1.10.2.linux-amd64.tar.gz
cp node_exporter-1.10.2.linux-amd64/node_exporter /usr/local/bin/

# 2. 创建服务(直接运行 node_exporter,不加任何额外参数)
cat > /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# 3. 启动服务
systemctl daemon-reload
systemctl enable node_exporter
systemctl start node_exporter

# 4. 验证
systemctl status node_exporter --no-pager
echo ""
echo "测试指标:"
curl -s localhost:9100/metrics | head -5
最终预览

附件列表