You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何可靠获取Ubuntu服务器的累计互联网使用流量并搭建流量通知系统?

如何可靠获取Ubuntu服务器的累计互联网使用流量并搭建流量通知系统?

兄弟,我太懂你这种痛点了——服务商不给流量提醒,自己用ifconfig查的还一重启就清零,完全没法准确掌握累计使用量。别慌,我给你一套靠谱的解决方案:

一、先解决累计流量统计的问题:用vnstat持久化记录

ifconfig或者ip命令的统计数据是存在内存里的,服务器重启就会重置,所以咱们得用专门的工具把流量数据持久化存储起来,vnstat就是个绝佳选择,它轻量、稳定,专门干这事:

  1. 安装vnstat
    在Ubuntu上直接用apt安装就行:

    sudo apt update && sudo apt install vnstat
    
  2. 初始化网卡监控
    安装完成后,给你要监控的网卡(比如你用的eth0)初始化数据库:

    sudo vnstat -u -i eth0
    

    这一步会创建一个专门的数据库文件,用来持久化存储eth0的流量数据,就算服务器重启,数据也不会丢。

  3. 查看累计流量
    现在你随时可以用下面的命令查看累计流量(包括从监控开始到现在的总收发量):

    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

配置定时执行

  1. 给脚本加执行权限:
    chmod +x traffic_alert.sh
    
  2. 用crontab设置每天检查一次(比如每天凌晨2点):
    crontab -e
    
    在打开的编辑器里加一行:
    0 2 * * * /path/to/your/traffic_alert.sh
    
    保存退出就行,这样每天凌晨2点脚本就会自动运行,检查流量并触发告警。

额外小提示

  • 如果你的服务器用的是其他网卡(比如ens33),把命令里的eth0换成对应的网卡名就行,可以用ip link show查看所有网卡。
  • 如果你不想用邮件通知,也可以把脚本里的邮件部分换成调用企业微信/钉钉机器人的API,直接发消息到你的工作群里,更及时。

备注:内容来源于stack exchange,提问作者HadiH2o

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 08:43:07