系统优化

飞牛NAS监控体系搭建:Prometheus + Grafana

飞牛NAS作为一款功能强大的国产NAS系统,其底层基于Debian Linux,为我们提供了极高的可玩性。当你的设备上运行着Docker容器、各类服务,并挂载着多块硬盘时,一个直观的监控面板能让你对系统健康状况了如指掌。本文将手把手带你从零开始,在飞牛NAS上搭建一套专业的Prometheus + Grafana监控体系,实时掌握CPU、内存、磁盘IO及网络流量等核心指标。

为什么选择Prometheus + Grafana

飞牛自带的资源监控虽能满足基本需求,但无法自定义图表、无法关联多主机数据、历史数据留存时间短。Prometheus负责采集和存储时序数据,Grafana则负责将数据以精美的仪表盘呈现。这套组合是业界标准,完全免费且社区生态丰富,尤其适合飞牛这种基于Linux的系统。

第一步:准备目录结构与基础镜像

首先,通过SSH登录你的飞牛NAS,或者直接在飞牛的“SSH终端”功能中操作。我们将在Docker存储目录下创建专用文件夹。

sudo mkdir -p /vol1/docker/monitoring/prometheus
sudo mkdir -p /vol1/docker/monitoring/grafana

这里假设你的Docker数据目录在 /vol1/docker,请根据实际安装路径调整。接着,我们需要拉取两个官方镜像,建议使用Docker Compose统一管理。

第二步:编写docker-compose.yml

在监控目录下创建编排文件:

sudo nano /vol1/docker/monitoring/docker-compose.yml

粘贴以下内容:

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    restart: unless-stopped
    volumes:
      - ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./prometheus/data:/prometheus
    ports:
      - "9090:9090"
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.retention.time=30d'
    networks:
      - monitor-net

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
      - GF_USERS_ALLOW_SIGN_UP=false
    volumes:
      - ./grafana/data:/var/lib/grafana
    ports:
      - "3000:3000"
    depends_on:
      - prometheus
    networks:
      - monitor-net

networks:
  monitor-net:
    driver: bridge

注意,我们将Grafana默认管理员密码设为 admin123,首次登录后请立即修改。数据持久化目录已挂载到本地,重启容器不会丢失配置。

第三步:配置Prometheus采集规则

Prometheus需要知道要监控什么。我们先创建其配置文件:

sudo nano /vol1/docker/monitoring/prometheus/prometheus.yml

写入以下基础配置:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

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

  - job_name: 'node'
    static_configs:
      - targets: ['192.168.1.100:9100']

这里 192.168.1.100 替换为你飞牛NAS的实际内网IP。为了采集系统指标,我们需要在宿主机上运行一个Node Exporter。在飞牛上,最方便的是直接下载二进制文件运行,或者通过另一个Docker容器暴露9100端口。推荐使用host网络模式运行Node Exporter容器,这样能直接看到宿主机真实指标。

在docker-compose.yml中追加一个服务:

  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    network_mode: host
    pid: host
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.sysfs=/host/sys'
      - '--path.rootfs=/rootfs'

然后回到Prometheus配置中,将node job的目标地址改为 192.168.1.100:9100(因为采用host网络,端口直接暴露在NAS的IP上)。

第四步:启动服务并验证

/vol1/docker/monitoring 目录下执行:

sudo docker-compose up -d

等待镜像拉取和启动。检查容器状态:

sudo docker ps | grep -E 'prometheus|grafana|node-exporter'

访问 http://你的NASIP:9090/targets,如果看到三个target都是UP状态,说明采集正常。Grafana则通过 http://你的NASIP:3000 访问,使用 admin 和密码 admin123 登录。

第五步:导入仪表盘

登录Grafana后,点击左侧“+”号,选择“Import”。在Import via panel json框中输入官方仪表盘ID 1860(这是Node Exporter Full模板,专为Linux主机设计)。点击Load,选择数据源为Prometheus,然后Import。

稍等片刻,你就能看到精美的系统监控面板,包含CPU使用率、负载、内存、磁盘空间、网络流量、IO等十几个图表。如果某些图表显示No Data,请检查node exporter的采集路径是否正确。

第六步:进阶优化与告警配置

监控体系搭建后,建议设置简单的告警规则。在Prometheus配置目录新建 alerts.yml,并修改主配置文件引用它。

创建规则文件:

sudo nano /vol1/docker/monitoring/prometheus/alerts.yml

内容示例:

groups:
  - name: node_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "CPU使用率超过85%"
          description: "实例 {{ $labels.instance }} 的CPU使用率持续高于85%"

然后修改prometheus.yml,在global下添加 rule_files: - 'alerts.yml',重启Prometheus容器。在Grafana中配置告警渠道(如邮件、钉钉),即可实现异常通知。

另外,如果你希望监控飞牛上的Docker容器状态,可以额外部署 cadvisor 容器,并添加到Prometheus的scrape_config中,这里不再赘述。

总结

通过以上步骤,你在飞牛NAS上成功搭建了一套可扩展的监控系统。Prometheus负责高效采集和存储指标,Grafana提供了直观的可视化界面,而Node Exporter打通了宿主机数据的最后一公里。这套方案完全自托管,数据不经过第三方云端,保障了隐私。后续你可以根据需求自由添加Exporter(如监控硬盘SMART状态、Docker容器等),并定制专属的告警规则,让飞牛NAS真正成为一台可观测、可预警的可靠家庭服务器。

💬 评论区
发表评论

暂无评论,来说两句吧