OpenWrt | 使用 luci-app-statistics 统计流量使用情况并持久化保存数据

一、背景介绍

我们在使用 OpenWrt 的时候,可以使用 ifconfig 命令清晰的获得从开机开始到此刻各接口的流量使用情况,例如:

pppoe-wan Link encap:Point-to-Point Protocol  
          inet addr:xxxx  P-t-P:xxxx  Mask:255.255.255.255
          inet6 addr: xxxx/128 Scope:Link
          inet6 addr: xxxx/64 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:5377021 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26112086 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:2979930001 (2.7 GiB)  TX bytes:22341805551 (20.8 GiB)

从这段输出可以清晰的知道,pppoe-wan 接口上传了 20.8GB,下载了 2.7 GB 的流量。

并且,在 luci概览 中也提供了明显的可视化的流量查看方式,例如:

在这里插入图片描述

但是,以上方式也只是基于本次开机的数据结果,只要设备一断电重启,这些数据就会消失,重新统计,无法累计所有的流量。在我们实际使用中,路由器可能会一些特殊原因断电,从而导致部分流量数据缺失,并且此方式无法清晰地看到是否有流量高峰。

因此,本文将详细介绍使用 luci-app-statistics 进行统计流量数据的方式,并详细介绍如何持久化统计到的数据。

二、安装 luci-app-statistics

luci-app-statistics 底层依赖于 collectd 服务进行收集数据,并由 rrdtool 提供数据存储与可视化,可以详细的收集并展示设备的 CPU内存流量 等各项数据。

首先,我们要使用 luci-app-statistics 收集数据,则先要安装 luci-app-statistics,可用如下命令安装所有有关的插件和依赖:

// 使用 opkg 
opkg update
opkg install collectd collectd-mod-cpu collectd-mod-interface collectd-mod-iwinfo collectd-mod-load collectd-mod-memory collectd-mod-network collectd-mod-rrdtool rrdtool1

// 使用 apk
apk update
apk add collectd collectd-mod-cpu collectd-mod-interface collectd-mod-iwinfo collectd-mod-load collectd-mod-memory collectd-mod-network collectd-mod-rrdtool rrdtool1

如果我们是在编译的时候,则只需要勾选 LuCI > 3. Applications > luci-app-statistics 即可。
在这里插入图片描述

等安装完成之后,此时在 luci 中就会出现新的选项卡:统计,点进去之后即可看到可视化的数据项。
在这里插入图片描述

三、持久化配置

当首次安装完成之后,默认将收集到的数据是存放在 /tmp 目录下的,当设备重启之后,数据就会丢失,因此我们需要设置一个可持久化存放数据的目录,例如 外置挂载设备 的目录。

我们在 luci 中点击 统计 > 设置,进入 luci-app-statistics 的设置管理界面。

在这里插入图片描述
首先,我们在 collected 设置中设置 基目录,使用可持久化存放数据的目录作为 基目录

随后,切到 输出插件 选项,点击 RRDTool配置 按钮,在 存储目录 中设置为可持久化存放数据的目录。

在这里插入图片描述
在这里插入图片描述

!!! 请注意,由于 RRDTool 的限制,不允许在目录中带 . 否则会抛以下错误:

[2025年11月16日 GMT+8 23:46:37] daemon.err: collectd[2533]: rrdtool plugin: Cowardly refusing to create a directory that begins with a `.' (dot): `/mnt/usb/.openwrt/rrd/OpenWrt/load/load.rrd'
[2025年11月16日 GMT+8 23:46:37] daemon.err: collectd[2533]: rrdtool plugin: cu_rrd_create_file (/mnt/usb/.openwrt/rrd/OpenWrt/load/load.rrd) failed.

另外,需要给所有父文件夹授予可读权限,给 collected 目录 和 rrd 目录设置为 nobody nogroup,并授予0777 的权限:

chmod -R 0777 rrd collected
chown -R nobody:nogroup rrd collected

在这里插入图片描述

这样配置好之后,数据就会被持久化保存,设备断电之后也不会丢失。

四、详细配置

首先,我们的需求只是统计流量使用情况,由于 collected 也是使用 ifconfig 收集数据的,因此它不需要实时获取具体时刻的数据就可以统计出流量使用情况,那么我们的时间间隔可以不用设置的很快,避免性能占用太大,此处我设置的是1分钟获取一次数据:

在这里插入图片描述

随后,剩下的通用插件和网络插件按需配置即可,只捕捉自己感兴趣的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值