服务器探针与流量重置
之前薅了 azure 的羊毛,想想每个月 15g 流量,还是挂个探针吧。我之前一直在用 cppla/ServerStatus: 云探针、多服务器探针、云监控、多服务器云监控,演示: https://tz.cloudcpp.com/,因为它可以通过定时连接三网官网去探测服务器的延迟,好多画风更棒的探针都没这个功能(但准不准就不知道了,起码每天测出来的数据都是电信爆炸,这个我觉得是准的)。
ServerStatus 安装
需要一台安装了 docker ,拥有公网 ip 的探针面板机,我选择装在境内的 tx 云学生机上,等过期了可能就装到家里的 n1 上然后靠 frp 端口透穿(
面板机配置
下载配置文件,我习惯在 root 下单开文件夹:
1 | mkdir -p /root/docker-compose/serverstatus |
并修改。默认配置文件中有四个文件块,对应着四个服务器,如果你手上没那么多 vps,可以酌情增减。抽出其中一个文件块来看。
1 | { |
设置好后,运行(80 port 太多东西占了,先调到 100 去)
1 | docker run -d --restart=always --name=serverstatus -v /root/docker-compose/serverstatus/config.json:/ServerStatus/server/config.json -p 100:80 -p 35601:35601 cppla/serverstatus |
客户机配置
debian 默认带 python2,不用装了。直接下载(假设直接下到 /root
下)
1 | wget --no-check-certificate -qO client-linux.py 'https://raw.githubusercontent.com/cppla/ServerStatus/master/clients/client-linux.py' |
运行:
1 | python client-linux.py SERVER=[宿主服务器ip] USER=[宿主机配置中对应代码块的用户名] PASSWORD=[宿主机配置中对应代码块的密码] |
如果显示 ipv4 granted
之类的消息,那就证明连接正常。然后做后台运行和自启,请出老朋友 supervisor。
安装
1 | apt install supervisor -y |
新建文件 tanzhen.conf
1 | [program:tanzhen] |
放入 /etc/supervisor/conf.d
中。重载配置:
1 | supervisorctl reload |
访问 [面板机ip]:100
,正常的话就能看到客户端已连接。
这么配置,总流量是找 /proc/net/dev
要的,于是出现两个问题:
- 重启后流量显示重置
- 每月重置流量没法实现
项目 issue 服务器流量统计怎么清零 · Issue #54 · cppla/ServerStatus 里面,作者建议用 vnstat 来探测流量。
vnstat 探测流量与流量重置
安装与使用
安装 vnstat
1 | apt install vnstat |
安装后重启一遍服务,以网络获取接口情况;或者直接新建接口。
1 | service vnstat restart |
输入
1 | vnstat -q |
出现类似
就算成功。因为 5 分钟才刷新一次流量显示,所以 5 分钟后再次输入 vnstat -q
才会有正确的流量数据出现。类似于:
当然,如果等的不耐烦,也可以直接输入 vnstat -u
手动刷新流量显示值,然后输入 vnstat -q
查看。
整合进探针中
编辑探针客户端的 client.py
文件。
将
1 | def liuliang(): |
替换为
1 | def liuliang(): |
重载 supervisor 即可生效。
(21.3.31 更新) 在某些系统(比如 ubuntu 中),安装的 vnstat 版本不是 v1.x 而是新的 v2.x,剔除了 vnstat --dumpdb
这个命令导致上面这行代码无法工作。需要更换为:
1 | def liuliang(): |
配置定时重置和刷新时间
vnstat 的配置放在 /etc/vnstat.conf
中。默认情况下每月流量重置时间为 1 号。如果需要修改,可以修改 MonthRotate 参数。
1 | # on which day should months change |
流量总量显示 5 分钟刷新一次,有点久。可以修改
1 | # how often (in minutes) bandwidth detection is redone when |
不过再怎么修改也没有默认的实时更新快。。。这也是使用 vnstat 代替默认方法的缺点之一。
还有,每月重置时间这个,如果你手动修改后再修改时区到最近的 0 点想看看能不能生效,多半是看不到的。根据:[SOLVED] vnstat not changing the start of the month [day]
1 | Having been in contact by e-mail with vnstat's author, Teemu Toivola, it was revealed that [as I suspected/hoped for] the new setting to MonthRotate will not take effect on the same month that it was done; so I will definitely have to wait until June 10th to confirm this feature of vnstat. Until then, I will keep this thread open. |
也就是说一定要等到真实时间的下个月才会重置流量。(当然把时间调到下个月能不能成功我就不知道了,懒得试)
手动重置流量信息
我还不知道上面这个方法能不能生效。。。如果不行的话,那就只能手动重置流量。
删除流量数据
1 | rm -r /var/lib/vnstat/.* |
重启 vnstat
1 | service vnstat restart |
改一改写进 crontab 也能达成自动重置流量的目的。
如果删除后重启,查看 service vnstat status
发现遭遇文件权限问题:
1 | chown -R vnstat:vnstat /var/lib/vnstat |
另外,vnstat 的日志中还发现有一个叫 vnstat daemon,也就是叫 vnstatd 的东西。其实 vnstat 和 vnstatd 是同一个服务。操作(start/stop/restart/status)的时候只用操作其中一个就好。