Skip to content

数据监控面板

通过 Prometheus + Grafana 组合,搭建功能强大的 NAS 系统监控面板,实时查看系统状态、资源使用情况和历史趋势。

📋 功能特性

  • 实时监控:CPU、内存、磁盘、网络使用率
  • 历史数据:长期存储和趋势分析
  • 可视化图表:丰富的图表类型和自定义仪表板
  • 告警通知:阈值告警,多渠道通知
  • 移动端适配:随时随地查看系统状态
  • 插件扩展:支持 Docker、应用监控等

🚀 快速部署

1. 创建目录结构

bash
mkdir -p /volume1/docker/monitoring/{prometheus,grafana}

2. Docker Compose 部署

创建 docker-compose.yml

yaml
version: '3'
services:
  # Prometheus - 数据采集和存储
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus/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=30d'
      - '--web.enable-lifecycle'
    ports:
      - "9090:9090"
    networks:
      - monitoring
  
  # Node Exporter - 系统指标采集
  node_exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    restart: unless-stopped
    command:
      - '--path.rootfs=/host'
    pid: host
    volumes:
      - '/:/host:ro,rslave'
    ports:
      - "9100:9100"
    networks:
      - monitoring
  
  # Grafana - 可视化展示
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=your_password
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
    volumes:
      - ./grafana/data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
      - ./grafana/dashboards:/var/lib/grafana/dashboards
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

3. Prometheus 配置

创建 prometheus/prometheus.yml

yaml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  - job_name: 'node_exporter'
    static_configs:
      - targets: ['node_exporter:9100']
  
  # Docker 容器监控
  - job_name: 'docker'
    static_configs:
      - targets: ['cadvisor:8080']

4. 启动服务

bash
docker-compose up -d

📊 Grafana 配置

1. 首次登录

访问 http://your-nas-ip:3000

  • 默认账号:admin
  • 默认密码:你在 docker-compose 中设置的密码

2. 添加数据源

  1. 点击 ConfigurationData Sources
  2. 点击 Add data source
  3. 选择 Prometheus
  4. 配置:
    • Name: Prometheus
    • URL: http://prometheus:9090
  5. 点击 Save & Test

3. 导入仪表板

推荐导入的仪表板 ID:

  • Node Exporter Full: 1860
  • Docker and System Monitoring: 2686
  • Host Dashboard: 10180

导入步骤:

  1. 点击 CreateDashboard
  2. 点击 Import
  3. 输入仪表板 ID
  4. 选择 Prometheus 数据源
  5. 点击 Import

📈 常用监控指标

CPU 监控

promql
# CPU 使用率
100 - (avg by(instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

# CPU 温度
node_hwmon_temp_celsius

内存监控

promql
# 内存使用率
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100

# 交换空间使用率
(1 - (node_memory_SwapFree_bytes / node_memory_SwapTotal_bytes)) * 100

磁盘监控

promql
# 磁盘使用率
(1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100

# 磁盘 I/O
rate(node_disk_read_bytes_total[5m])
rate(node_disk_written_bytes_total[5m])

网络监控

promql
# 网络流量
rate(node_network_receive_bytes_total[5m])
rate(node_network_transmit_bytes_total[5m])

# 网络连接数
node_netstat_Tcp_CurrEstab

🔔 告警配置

1. 创建告警规则

在 Grafana 中:

  1. 点击 AlertingNotification policies
  2. 添加通知渠道(邮件、钉钉、企业微信等)

2. 常见告警阈值

yaml
# CPU 使用率超过 80%
CPU 使用率 > 80% 持续 5 分钟

# 内存使用率超过 85%
内存使用率 > 85% 持续 5 分钟

# 磁盘使用率超过 90%
磁盘使用率 > 90%

# 系统负载过高
系统负载 > CPU 核心数 * 2

# 温度过高
CPU 温度 > 80°C

🎯 进阶用法

Docker 容器监控

添加 cAdvisor:

yaml
cadvisor:
  image: gcr.io/cadvisor/cadvisor:latest
  container_name: cadvisor
  restart: unless-stopped
  volumes:
    - /:/rootfs:ro
    - /var/run:/var/run:ro
    - /sys:/sys:ro
    - /var/lib/docker/:/var/lib/docker:ro
  ports:
    - "8080:8080"
  networks:
    - monitoring

应用监控

  • MySQL: 使用 mysqld_exporter
  • PostgreSQL: 使用 postgres_exporter
  • Nginx: 使用 nginx-prometheus-exporter
  • Redis: 使用 redis_exporter

日志监控

集成 Loki:

yaml
loki:
  image: grafana/loki:latest
  container_name: loki
  restart: unless-stopped
  ports:
    - "3100:3100"
  volumes:
    - ./loki:/etc/loki
  networks:
    - monitoring

🔧 常见问题

Q1: Grafana 无法连接 Prometheus?

A:

  1. 检查容器网络是否互通
  2. 确认 Prometheus 服务正常运行
  3. 检查数据源 URL 是否正确

Q2: 数据采集不完整?

A:

  1. 检查 Node Exporter 权限
  2. 确认防火墙设置
  3. 查看 Prometheus 日志

Q3: 历史数据丢失?

A:

  1. 检查数据目录挂载
  2. 确认 retention 配置
  3. 查看磁盘空间

Q4: 仪表板加载缓慢?

A:

  1. 减少查询时间范围
  2. 优化 PromQL 查询
  3. 增加 Prometheus 内存

🔒 安全建议

  1. 修改默认密码:立即更改 admin 密码
  2. 限制访问:配置防火墙规则
  3. 使用 HTTPS:配置反向代理和 SSL 证书
  4. 定期备份:备份 Grafana 配置和数据
  5. 权限控制:创建不同权限的用户

📱 移动端查看

Grafana 官方 App

  • iOS: 搜索 "Grafana"
  • Android: 搜索 "Grafana"

配置服务器地址后即可随时随地查看监控数据。


💡 提示:建议定期备份 Prometheus 数据和 Grafana 配置,避免数据丢失。

更新时间: 2026-03-18