如何可靠获取Ubuntu服务器的累计互联网使用流量并搭建流量通知系统?
如何可靠获取Ubuntu服务器的累计互联网使用流量并搭建流量通知系统?
兄弟,我太懂你这种痛点了——服务商不给流量提醒,自己用ifconfig查的还一重启就清零,完全没法准确掌握累计使用量。别慌,我给你一套靠谱的解决方案:
一、先解决累计流量统计的问题:用vnstat持久化记录
ifconfig或者ip命令的统计数据是存在内存里的,服务器重启就会重置,所以咱们得用专门的工具把流量数据持久化存储起来,vnstat就是个绝佳选择,它轻量、稳定,专门干这事:
安装vnstat
在Ubuntu上直接用apt安装就行:sudo apt update && sudo apt install vnstat初始化网卡监控
安装完成后,给你要监控的网卡(比如你用的eth0)初始化数据库:sudo vnstat -u -i eth0这一步会创建一个专门的数据库文件,用来持久化存储eth0的流量数据,就算服务器重启,数据也不会丢。
查看累计流量
现在你随时可以用下面的命令查看累计流量(包括从监控开始到现在的总收发量):vnstat -i eth0 --total它会输出清晰的统计结果,比如总接收、总发送、总使用量,时间范围也标得明明白白。如果你想看每日/每月的细分统计,直接用
vnstat -i eth0就行,默认就是按天展示的。
二、搭建流量通知系统:定时检查+自动告警
解决了统计问题,接下来咱们搞自动通知。思路很简单:写个脚本定期检查剩余流量,当低于阈值时触发通知(比如发邮件、企业微信/钉钉机器人消息,选你方便的方式),然后用crontab定时执行这个脚本。
示例脚本(以邮件通知为例)
先写个简单的bash脚本,比如traffic_alert.sh:
#!/bin/bash # 配置参数 INTERFACE="eth0" # 你的总流量额度,比如100GB,转换成字节(1GB=1024*1024*1024字节) TOTAL_TRAFFIC=$((100 * 1024 * 1024 * 1024)) # 告警阈值,比如剩余10GB ALERT_THRESHOLD=$((10 * 1024 * 1024 * 1024)) # 获取累计已使用流量(vnstat输出的总使用量,单位字节) USED_TRAFFIC=$(vnstat -i $INTERFACE --json | grep -o '"total":.*"' | awk -F '"' '{print $4}') # 计算剩余流量 REMAIN_TRAFFIC=$((TOTAL_TRAFFIC - USED_TRAFFIC)) # 判断是否需要告警 if [ $REMAIN_TRAFFIC -lt $ALERT_THRESHOLD ]; then # 发送邮件,这里需要先配置好服务器的邮件服务(比如postfix) echo "服务器流量告警:剩余流量约为$(($REMAIN_TRAFFIC / 1024 / 1024 / 1024))GB,已低于阈值!" | mail -s "服务器流量告警" your_email@example.com fi
配置定时执行
- 给脚本加执行权限:
chmod +x traffic_alert.sh - 用crontab设置每天检查一次(比如每天凌晨2点):
在打开的编辑器里加一行:crontab -e
保存退出就行,这样每天凌晨2点脚本就会自动运行,检查流量并触发告警。0 2 * * * /path/to/your/traffic_alert.sh
额外小提示
- 如果你的服务器用的是其他网卡(比如ens33),把命令里的
eth0换成对应的网卡名就行,可以用ip link show查看所有网卡。 - 如果你不想用邮件通知,也可以把脚本里的邮件部分换成调用企业微信/钉钉机器人的API,直接发消息到你的工作群里,更及时。
备注:内容来源于stack exchange,提问作者HadiH2o
相关产品推荐
相关产品推荐

