流量监控与可视化图表

监控的三个层次

软路由的监控分三层:链路层看带宽利用率与连接数,主机层看每台设备跑了多少流量,应用层看服务质量(延迟、丢包、DNS 解析)。大多数家庭只做第一层,其实第二、三层才是体验问题的关键——你永远不知道是哪个设备在后台偷偷上传,也不知道是哪个 DNS 配置拖慢了打开网页的速度。

完整的家用监控栈是 Prometheus 加 Grafana 这一对黄金搭档:前者采集与存储时序数据,后者绘图展示。采集端按对象分:软路由与各台虚拟机跑 node_exporter 采系统指标,路由器插件采网络流量指标,snmp-exporter 采交换机与 AP。数据落地后 Grafana 里把各路面板组织成一个总览大屏,家庭的网络运行状态一目了然。

指标类型 采集工具 关注点
系统指标 node_exporter CPU、内存、磁盘
流量指标 路由器插件或 ntopng 各主机带宽消耗
网络质量 自定义脚本 延迟、丢包
服务状态 Prometheus 黑盒探测 HTTP、端口可用性

Prometheus 部署

Prometheus 自己就是一个时序数据库加采集调度器,Docker 部署最简单。核心是配置文件:定义采集目标与抓取间隔。家用场景抓取间隔 60 秒即可,配合 15 秒的记录规则足够看趋势;高频采集只会加快存储膨胀。一份最小配置:

global:
  scrape_interval: 60s
  evaluation_interval: 15s
scrape_configs:
  - job_name: node
    static_configs:
      - targets:
          - 192.168.1.1:9100
          - 192.168.1.10:9100

被采集的机器上跑 node_exporter(Windows 用 wmi_exporter),端口开 9100。每台虚拟机都装上非常便宜,卯足了规模也不占几个资源。Prometheus 自带告警规则模块,磁盘写满、节点离线这类基础告警几行配置就能加。存储空间提前算:一般家庭一台机器写一年也就几个 GB,但不做保留策略的话 SSD 寿命会被无意义的旧数据吃掉——设置 retention 限制,比如 90 天。

Grafana 面板

Grafana 是展示层,装好后把 Prometheus 配成数据源,面板直接用社区现成的(导入 ID 即可),比如常见的主机概览面板、流量排行面板。第一天 import 两个面板就够用,别在面板美化上耗时间,先让数据跑起来,用着用着自然知道加哪些图。

面板组织的原则是分层:总览大屏放关键的几个大数(总带宽、在线设备数、告警数),钻取面板看细节(单台主机的流量曲线、连接排行)。告警规则触发后在 Grafana 里接通知渠道:邮件最通用,家里搭了推送服务的可以走 Webhook。告警阈值初期设宽松一点,跑两周看数据分布再收紧,否则天天误报被训练成习惯性忽略。

监控数据流

路由器端的流量统计

Prometheus 之外,软路由本身往往就有现成的流量统计。OpenWrt 的 nlbwmon 与可视化插件可以按主机维度记录流量上行下行,家宽月配额紧张时这个面板就是查内鬼的第一现场。合规使用的前提下,统计的颗粒度无需太细,按 IP 汇总到天足够;想细化到应用层就得上 ntopng 这类专业工具,但它的资源占用对软路由不算友好,更推荐跑在单独的 Docker 宿主上,把路由器的流量镜像口接过去。

排错场景里监控数据的效率极高:某天晚上视频会议卡顿,打开大屏看一眼就能定位——是上行带宽被某台设备的备份任务占满,还是 DNS 解析延迟突增。没有监控时这类问题只能玄学归因,有了监控就是看图说话。

长期运维

监控系统的寿命取决于维护成本。三件事压住成本:其一,把 Prometheus 与 Grafana 的配置目录纳入备份,重装时能一键拉起;其二,面板与告警定期清理,下线的设备要从采集目标里删掉,否则 dashboard 上天天飘红点其实是假告警;其三,保留策略及时落地,数据越积越多查询越慢,年底做一次大扫除。

服务的配置管理与远程操作都靠 SSH,见 SSH 远程登录与加固。监控指标的原理(什么算好、什么算坏)与网络协议的关系见 计算机网络入门。

面板设计的几条准则

画大屏的新手容易犯的三种病:指标堆砌(一个屏幕塞三十个图,没有重点)、配色花哨(红的绿的彩虹色齐飞)、不知道看什么图(线条与柱状乱用)。家庭面板的三条准则正好相反:一屏只回答一个问题(现在网络健康吗?哪个设备在跑流量?最近有告警吗?)、配色统一(正常绿色告警红色其他的灰)、时序数据用曲线、排行用表格、比例用堆叠图。

家庭与大屏展示场景略有不同:自己看要数据密度(数字越大越好读),给非技术的家人看的总览则用大字号加少量颜色。花一个晚上把大屏投影到客厅电视上,家人从此理解你鼓捣的这些东西到底在干啥,这个价值不可估量。

不要忽视注释与文档面板:在面板上写清楚每条曲线是什么设备、什么阈值算异常、出问题看哪里。两个月后的你和家人面对一张没有注释的大屏,与重新搭建一套监控的成本没差多少。

家用监控还有一个隐形投入:探针类采集的资源开销。每台虚拟机跑 node_exporter 只占几兆内存,但如果你遵守“监控一切”把所有端口都探测一遍,探测流量与存储增长也够吃一壶。采集对象保持单一职责、抓取间隔按数据特性分级(网络流量 60 秒、温度 5 分钟、可用性 15 秒)。

新手上线监控后常经历一段沉迷期:天天盯着面板看,感觉发现了新世界。真正的成熟是不再需要盯着——面板只出问题时才看,告警自动喊你。把监控调成这样安静的存在,才算真正部署完成。

再给一组家用的具体数据规划建议:全部采集指标一个月的存储约 1 到 2GB(间隔 60 秒、保留 90 天无压力);面板数量控制在 5 个以内(总览、网络、主机、存储、告警历史);告警规则不超过 20 条。规模上限一旦定下来,监控系统的运维成本就封了顶,不会像企业监控那样膨胀成怪物。

监控数据的间接收益是“网络素养”:家人看你指着面板解释为什么今晚网慢,比听你念叨一百句都有说服力。数据可视化把抽象的网络变成了看得见的家庭资产,这是技术养家的高级形态。

监控各组件资源占用

监控体系的延伸:网络流量审计

监控数据的长期价值会自然延伸到流量审计:每月看一下哪些主机在持续上传、流量排名前五的是哪些服务。家庭网络的意外发现往往来自这里——某个中国厂商的智能家居设备在持续上传遥测数据、某个客户端在后台跑云备份占掉半条上行。看到了才好决策:限速、隔离或换设备。监控不只是给 Geek 看的仪表盘,它是家庭数据主权的眼睛。

落到执行上:每月一号把上月流量排行截一张图存档,顺手在维护日志里写一行结论(“本月上传最多的设备是 X”)。这个动作两个月看不出价值,半年后你会发现它是最常翻阅的一页——孩子的新设备何时开始狂刷流量、固件更新后哪台 IoT 变成了上传大户,全都一目了然。监控沉淀下来的历史数据,本身就是家庭网络的编年史。

监控安装的另一个产物值得说一下:它是最容易“带朋友入坑”的家庭技术。一台旧机器加几行 compose,就能把家里的网络变成直观的大屏,这种可展示性让家庭成员与访客理解了“为什么这家需要一台机器一直开着”。与其他技术不同,监控把无形的基础设施变成了可见的资产,是技术解释自己的最好方式。

最后给一组家用监控的“够用标准”:关键设备可探测、流量排行能看到、告警能送达。达到这三条,监控就算完成任务了。面板美化、多维下钻、高基数采集这些能力是企业级的乐趣,家庭用户不必焦虑。多年后回头看,那些面板翻的最多的还是总览页——上面几个大数,红的就是稳。

监控与告警的完整论述见监控告警一章,那里把告警通道、阈值与演练全链路讲完。本篇只补一句方法论:先看三个月的数据,再调任何阈值。家用环境没有基线数据,任何“优化”都是对着空气挥拳。

关于工具选型再补两句:Grafana 的面板生态可以直接用社区做好的家庭网络仪表盘(按面板 ID 导入),省去自己画图的时间;如果嫌 Prometheus 全家桶太重,轻量替代方案同样够用——内网一个 uptime 服务加路由器自带的流量统计,已经覆盖了九成排错需求。工具是手段,看懂数据才是目的,别在选型上消耗完热情。

再强调一遍时序数据存储的长期性:监控目录一定会增长,提前把挂载与保留规划好(retention 与定时清理),不然某天它把系统盘吃满,监控反而成了第一个把系统搞挂的服务。讽刺的是这种事故的比例在家用环境里并不低——监控系统自己没监控自己的磁盘。

延伸阅读