By烟花易冷

家里WiFi不稳定?使用 Prometheus/Grafana 打造网络监控面板
2022-01-30

最近春节,回到了老家。在这里我的网络布局基本如下:

终端设备先会通过 WiFi 连接到一个用于实现网络中继的二级路由器,二级路由器再通过 WiFi 连接到一个主路由器,主路由器通过拨号实现上网。在实际使用的过程中,发现了忽快忽慢的现象,比如我妈在刷今日头条时,就尝尝抱怨刷不出新的内容,还会影响看剧的体验。这时候,身为一名程序员的我(咳咳)自当挺身而出。

首先我检查了下,路由器当前的性能看起来还是够用的,CPU、内存占用率都低于 50%:

对于家用路由器而言,可以获取的有效信息并不多,因此我决定从网络延迟入手,先监控一下网络情况以确定问题出在哪儿。提及监控,自然就联想到了 Prometheus + Grafana 这个组合拳,不过我家的路由器未刷第三方ROM,不能通过 SSH 直接访问,那么就只能从连接路由器的终端入手了。

原本我打算用 Go 语言写个程序发送 ICMP 报文,以获取目标 IP 的网络状态。不过纠结于快到晚饭时间了,我妈定会催我吃饭,因此转而使用 PHP 清洗一下系统自带的 ping 命令的执行结果,先凑合着使用。大致思路如下:

  1. 由 php 程序调用系统的 ping 命令获取结果,并提取有用的结果值,并按照一定的规律转换为 Prometheus 监控格式。在这里我 ping 的目标为二级路由(即我当前电脑直连的路由)、出口路由(即连接互联网的主路由)和万维网(就是ping 一下百度),提取的指标有5次发包后的丢包率、最小时延、最大时延、平均时延。
  2. 配置 Prometheus 定时采集 php 接口返回的结果。为了保证 ping 的各个目标之间不相互影响,我特地拆成了多个 php 接口,大致配置如下:

3. 配置 Grafana。在这里需要先添加 Prometheus 数据源,之后拖拽出面板即可。配置完成效果如图:

另外,还可以对相关指标进行监控,例如当延迟超过一定阈值时,颜色发送变动,或者是发送告警信息至收集,这里简单展示:

最后,本文只是春节假期无聊之下的一篇水文,介绍了下 Prometheus 的趣味应用,对于家用路由器而言可采集的指标还是相当少的。

最后的最后,发现这二级路由器真的是差劲,ping 值不稳,并且丢包率稍高。

最后的最后的最后,二级路由器是当年很经典的斐讯K2P,你懂得。