服务器流量监控脚本,每日流量报表推送:服务器流量监控脚本

服务器每天跑了多少流量,如果不主动记录,月底被扣费或带宽跑满时才发现就晚了。
本文用一个轻量脚本把这件事自动化:在 Linux 服务器上安装流量统计工具,编写 Shell 脚本生成每日流量报表,再通过 crontab 定时推送到邮箱或钉钉,零基础也能跟着做完。

准备工作:安装流量统计工具

系统自带的 ifconfigip 命令只能看累计值,不方便按天统计。
推荐用 vnstat,它会持续记录网卡流量,并提供按天、按月查询的能力。

以 Debian/Ubuntu 为例:

sudo apt update
sudo apt install vnstat -y

CentOS/Rocky Linux 使用:

sudo yum install epel-release -y
sudo yum install vnstat -y

安装后启动并设置开机自启:

sudo systemctl enable --now vnstat

确认服务状态和网卡识别情况:

vnstat --version
vnstat -i eth0

eth0 换成你实际的网卡名,可以用 ip addr 查看。
如果输出中能看到当天的收发数据,说明统计已经生效。

编写每日流量报表脚本

脚本要做三件事:取昨天的流量数据、拼成可读文本、调用推送通道发出去。
下面以推送到钉钉机器人为例,邮箱方式在末尾说明。

创建脚本文件:

sudo vim /opt/traffic_report.sh

写入以下内容:

#!/bin/bash
# 服务器每日流量报表推送
IFACE="eth0"
WEBHOOK="https://oapi.dingtalk.com/robot/send?access_token=你的token"

# 获取昨日流量(vnstat 输出格式:日期 接收 发送 合计)
DATA=$(vnstat -i "$IFACE" --json | \
  jq -r '.interfaces[0].traffic.day[-2] | "\(.date.year)-\(.date.month)-\(.date.day) 接收:\(.rx/1024/1024|floor)MB 发送:\(.tx/1024/1024|floor)MB"')

# 拼装消息
MSG="服务器流量日报\n网卡: $IFACE\n$DATA"

# 推送到钉钉
curl -s -H "Content-Type: application/json" \
  -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MSG\"}}" \
  "$WEBHOOK"

保存后赋予执行权限:

sudo chmod +x /opt/traffic_report.sh

这里用到了 jq 解析 JSON,如果系统没有,先安装:

sudo apt install jq -y   # Debian/Ubuntu
sudo yum install jq -y   # CentOS/Rocky

先手动跑一次,确认能收到消息:

sudo /opt/traffic_report.sh

如果钉钉群里出现流量数据,说明脚本本身没问题。

配置定时任务自动推送

脚本手动能跑通后,用 crontab 让它每天早上自动执行。

sudo crontab -e

添加一行,表示每天早上 8 点执行:

0 8 * * * /opt/traffic_report.sh >/dev/null 2>&1

保存退出后,确认任务已写入:

sudo crontab -l

几个容易踩坑的地方:

  • crontab 环境变量和登录 shell 不同,脚本里尽量用绝对路径,比如 /usr/bin/curl,避免找不到命令。
  • 网卡名写错会导致取不到数据,先用 ip addr 确认。
  • 钉钉机器人有安全设置,如果选了“加签”,需要在脚本里额外计算签名;选“自定义关键词”则消息里必须包含该关键词。
  • vnstat 刚安装时当天数据可能不全,建议第二天再观察报表是否正常。

改成邮件推送或添加多网卡

如果不想用钉钉,可以改用 mail 命令。
先确保系统能发邮件,然后把脚本中的 curl 部分替换为:

echo -e "$MSG" | mail -s "服务器流量日报" your@email.com

服务器有多张网卡时,把 IFACE 改成数组循环处理:

for IFACE in eth0 eth1; do
  # 复用上面的取值逻辑
done

这样每张网卡的流量都会单独列在报表里。

验证与日常检查

推送配置完成后,按下面几点确认效果:

  • 手动执行脚本,检查钉钉或邮箱是否收到消息;
  • 等待一个定时周期,确认 crontab 按时触发;
  • vnstat -d 对比脚本里的数值,确保统计口径一致;
  • 如果某天没收到报表,先看 /var/log/syslogjournalctl -u cron 里的执行记录。

只要 vnstat 在跑、脚本能手动执行、crontab 时间正确,每日流量报表推送就能稳定工作。
后续可以按需增加月流量汇总、超阈值告警等逻辑。

常见疑问

脚本报错 jq: command not found 怎么办?
说明系统没装 jq,按前面命令安装即可,或者改用 awk 解析 vnstat 的文本输出。

钉钉收不到消息,curl 也没报错?
检查机器人安全设置是否要求加签或关键词,并确认 webhook 地址完整复制。

vnstat 显示的数据和实际流量对不上?
vnstat 统计的是网卡层面的流量,不含被防火墙丢弃的包,和运营商账单口径可能有差异,属于正常现象。

分享到:
上一篇
网站并发1000访问,服务器最低配置估算
下一篇
服务器带宽占满定位,爬虫还是真实访客:服务器带宽占满定位
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意