
Prometheus + Grafana + Scaphandre 全栈硬件监控方案分享
在家用 NAS 上的**硬件监控系统,实时监控 CPU、核显、UPS、电源消耗、容器功耗等数据。整个方案完全基于 Docker Compose,方便部署和维护。下面给大家分享我的配置和一些说明。
⚙️ 技术栈
- Prometheus:数据采集与存储
- Grafana:数据可视化面板
- Node Exporter:系统基础指标采集(CPU、内存、磁盘、网络等)
- Intel GPU Exporter:Intel 核显信息采集
- Scaphandre:CPU 功耗及 Docker 容器功耗采集
- NUT Exporter:UPS 状态采集
📝 配置示例
services:
#-------------------------------------------------------------------
# Prometheus - 数据采集与存储
# 负责抓取各类 exporter 的 metrics 并存储,可被 Grafana 可视化
# 端口 9090
prometheus:
image: prom/prometheus:latest
container_name: prometheus
restart: always
user: "0"
network_mode: host
ports:
- "9090:9090" # Prometheus Web 界面
volumes:
- ./prometheus/config/prometheus.yml:/etc/prometheus/prometheus.yml:ro # 配置文件
- ./prometheus/data:/prometheus # 数据存储路径
- ./prometheus/config/rules:/etc/prometheus/rules:ro # 告警规则
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus" # TSDB 存储路径
- "--storage.tsdb.retention.time=365d" # 保留数据 1 年
- "--storage.tsdb.retention.size=200GB" # 最大存储 200GB
- "--storage.tsdb.wal-compression" # 启用 WAL 压缩,节省空间
#-------------------------------------------------------------------
# Grafana - 数据可视化
# 负责将 Prometheus 数据展示成各种图表
# 端口 3000
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: always
user: "0"
network_mode: host
ports:
- "3000:3000"
volumes:
- ./grafana/data:/var/lib/grafana # 持久化数据
environment:
- GF_SECURITY_ADMIN_USER=admin # 默认管理员账号
- GF_SECURITY_ADMIN_PASSWORD=admin # 默认管理员密码
- GF_USERS_ALLOW_SIGN_UP=false # 禁止注册新用户
#-------------------------------------------------------------------
# Node Exporter - 系统基础信息采集
# 包含 CPU、内存、磁盘、网络等指标
# 端口 9100
node-exporter:
image: prom/node-exporter:latest
container_name: node-exporter
restart: always
pid: host
volumes:
- /:/host:ro,rslave # 挂载根文件系统,readonly
command:
- "--path.rootfs=/host"
network_mode: host
ports:
- "9100:9100"
#-------------------------------------------------------------------
# Intel GPU Exporter - Intel 核显信息采集
# 端口 8055
intel-gpu-exporter:
image: ghcr.io/onedr0p/intel-gpu-exporter:rolling
container_name: intel-gpu-exporter
restart: unless-stopped
privileged: true # 需要权限访问 /dev/dri
pid: host
ports:
- "8055:8080"
volumes:
- /dev/dri/:/dev/dri/ # 挂载 GPU 设备
#-------------------------------------------------------------------
# Scaphandre - CPU 功耗 + Docker 容器功耗采集
# 端口 8056
scaphandre:
image: hubblo/scaphandre:latest
container_name: scaphandre
restart: unless-stopped
privileged: true # 访问功耗接口
pid: host
security_opt:
- apparmor:unconfined
ports:
- "8056:8080"
volumes:
- /proc:/proc
- /sys/class/powercap:/sys/class/powercap:ro # 访问功耗信息
- /var/run/docker.sock:/var/run/docker.sock:ro # 获取容器功耗
command:
- prometheus # 输出 Prometheus 格式
- --address
- 0.0.0.0
- --port
- "8080"
- --containers # 包含容器功耗
#-------------------------------------------------------------------
# NUT Exporter - UPS 数据采集
# 端口 3493
nut-exporter:
image: ghcr.io/druggeri/nut_exporter:latest
container_name: nut-exporter
restart: unless-stopped
network_mode: host
environment:
- NUT_SERVER=127.0.0.1 # UPS 服务地址
- NUT_PORT=3493 # UPS 端口
- NUT_UPS_NAME=ups0 # UPS 名称
🔧 使用说明
- 将配置保存为
docker-compose.yml
- 确保
/prometheus/config/prometheus.yml 存在并配置好采集目标
docker-compose up -d 启动所有服务
- 浏览器访问:
- Prometheus:
http://<NAS_IP>:9090
- Grafana:
http://<NAS_IP>:3000 (默认 admin/admin)
- Intel GPU Exporter:
http://<NAS_IP>:8055/metrics
- Scaphandre:
http://<NAS_IP>:8056/metrics
✅ 特点