服务器带宽监控:安装vnstat监控流量,设置日用量超80%自动告警
服务器带宽监控要做到日流量超阈值自动告警,靠谱的组合是 vnstat 负责长期累计统计、脚本或云监控负责触发通知;只装一个实时工具,往往第二天才发现跑超了。
三类工具先分清:谁负责看当下,谁负责看历史
实时速率型工具(iftop、nload、sar -n DEV 1)解决的是"此刻哪条连接在吃带宽",退出终端后数据就没了,适合排查突发流量和找出拉高带宽的进程。
累计统计型的 vnstat 把采样结果落到本地数据库,按小时、日、月保留,重启不丢历史,数据库默认在 /var/lib/vnstat,这也是它能做"日用量"判断的前提。
云平台自带监控(阿里云云监控、腾讯云可观测平台等)从宿主机侧采集,优势是能直接绑定报警规则、走短信电话通知,省掉自建脚本;短板是粒度偏粗,通常一到五分钟一个采样点,而且只统计计费口径的流量,看不到内网和本地回环。
三者的关系是互补,不是替代:看历史趋势、做自定义阈值判断,vnstat 顺手;要计费口径和现成通知渠道,云监控更省事。
vnstat 与云监控对比:告警这件事交给谁
- 数据来源:vnstat 读的是网卡计数器,包含内网流量;云监控一般只看公网出口。
- 保留时长:vnstat 本地保留时间取决于配置,常见能存几个月;云监控控制台默认周期更短,具体以控制台页面为准。
- 通知能力:云监控自带短信、电话、Webhook、企业微信/钉钉;vnstat 需要自己接命令。
- 部署成本:vnstat 一条安装命令即可;云监控要装 Agent 并在控制台建报警规则。
- 可靠性:系统重装会清掉 vnstat 的本地数据;云监控数据在云端,重装不受影响。
落地上大致这样分工:日常自查、看趋势、判断是哪台机器跑超,看 vnstat;和费用挂钩的告警挂云监控,两边都做才算稳。
安装与初始化:apt 和 dnf 的差别
Debian、Ubuntu 系:
apt update && apt install -y vnstat
systemctl enable --now vnstat
RHEL、CentOS、Rocky 系:
dnf install -y epel-release
dnf install -y vnstat
systemctl enable --now vnstat
装完先确认网卡名,云服务器上常见 eth0,也常见 ens5 这类可预测命名:
vnstat --iflist
vnstat -i eth0 -d
如果 -d 查不到数据,多半是数据库还没建立,执行 vnstat --create -i eth0,或者重启服务等下一个采样周期落库。采样间隔、日切时区这些参数都在 /etc/vnstat.conf 里,键名和默认值随版本有变化,改之前先 vnstat --version 对一下,以本机手册为准。
容器或 OpenVZ 这类虚拟化环境可能读不到完整的网卡计数,vnstat 会报错或只显示部分接口,这种情况只能退回云监控看带宽。
阈值告警的两条实现路线
路线 A 是用 vnstat 自身的阈值能力。较新的版本支持在配置文件里设置流量阈值和触发脚本,达到条件时执行指定命令,命令里再调 curl 推到钉钉或企业微信机器人。适合只有一两台机器、不想引入额外组件的人。
路线 B 是 cron 定时读 JSON 自己判断。vnstat 支持 --json 输出,取数很方便:
vnstat --json d | jq '.interfaces[0].traffic.day[0] | .rx + .tx'
注意这里默认单位是 KiB,要除 1048576 才是 GB 量级。写个脚本算当天累计、和阈值比大小,超了就发 Webhook,再放进 crontab 每 10 分钟跑一次:*/10 * * * * /usr/local/bin/bw-alert.sh。如果更愿意走云监控,把这行命令包成自定义监控上报,阈值和通知都在控制台配,以后改数不用登服务器。
两条路线没有绝对优劣:A 少一个定时任务,B 更容易改阈值、也更方便批量纳入多台机器。
阈值定多少,按计费方式反推
固定带宽包年包月的情况,流量多跑并不会多扣钱,告警的意义是发现被刷或被程序写飞,阈值可以放宽一些,重点看瞬时峰值。
按使用流量计费、或者买了月流量包的情况,把月额度除以当月天数,再乘 0.8 左右当软阈值,留几天余量。比如月包按 TB 量级买、当月 30 天,日线就在几十 GB 这个量级,到八成的样子先提醒一次,真超了也不会当天就被限速或产生额外费用。
还要注意一点:vnstat 统计的是网卡总流量,内网传输、备份同步都算进去,而计费通常只看公网。服务器上有内网同步任务时,最好指定公网网卡单独统计,或者干脆以云监控的公网出带宽为准来定阈值,避免天天被误报。