统计服务器每天的流量消耗,这事儿在运维和开发里太常见了。答案肯定有,而且工具多得是,但选哪个取决于你的使用场景、操作系统以及对精度的要求。
别整那些虚的,直接分场景给你列几个最靠谱的方案,从轻量级到企业级都有。
1. 最简单粗暴:Linux 命令行(适合临时排查)
如果你只是偶尔想看一眼昨天用了多少流量,或者做个脚本监控,Linux 自带的 sar 或者 /proc/net/dev 是最直接的。
-
方案 A:使用
sar(sysstat)
这是系统自带性能监控工具,通常安装sysstat包就有。它能记录历史数据。# 查看昨天的网络接口流量(假设网卡是 eth0) sar -n DEV -f /var/log/sa/saXX # XX是日期号优点:无需额外安装软件,系统原生支持。
缺点:需要配置好 cron 任务定期收集数据,否则重启后历史数据可能丢失或需要重新配置采集频率。 -
方案 B:读取
/proc/net/dev并写脚本
Linux 内核通过/proc/net/dev实时暴露网络统计信息。你可以写一个简单的 Shell 或 Python 脚本,每天零点读取一次当前值,减去前一天的值,就是当天的流量。import time import os def get_traffic(interface): with open('/proc/net/dev') as f: for line in f.readlines(): if interface in line: parts = line.split(':')[1].split() # rx_bytes, tx_bytes return int(parts[0]), int(parts[8]) # 逻辑:每天存一个文件,第二天读取对比优点:精度极高,毫秒级实时数据累积。
缺点:自己维护脚本,要注意进程重启导致计数器清零的问题(实际上/proc/net/dev是从开机累加的,重启会归零,所以这个方案更适合长期运行的服务器,不适合频繁重启的容器环境)。
2. 云厂商自带监控(最省心,推荐)
既然你问的是“云服务器”,大概率用的是阿里云、腾讯云、华为云等国内主流厂商。别自己造轮子,直接用云平台提供的监控服务。
-
阿里云 CloudMonitor / 腾讯云 CloudBase Monitoring
- 操作:登录控制台 -> 云服务器 ECS/CVM -> 监控图表。
- 指标:直接看
IntranetOutTraffic(内网出)、InternetOutTraffic(公网出)、InternetInTraffic(公网入)。 - 优势:
- 无需安装 Agent(部分基础监控免费且自动开启)。
- 粒度细:可以按分钟、小时、天查看。
- 准确:基于网关侧统计,比服务器内部统计更准(因为服务器内部可能没算满带宽的情况,或者 NAT 转换导致的差异)。
- 告警:可以直接设置流量阈值告警,避免超额扣费。
注意:基础监控通常保留 31 天数据。如果需要长期归档做审计,建议开启“云监控日志”或导出到 OSS/COS 存储。
3. 专业监控平台(适合多服务器、集群管理)
如果你有几十上百台服务器,或者需要统一看板、报警、报表,那必须上专业监控系统。
-
Prometheus + Node Exporter + Grafana
- 原理:每台服务器装
node_exporter,暴露/metrics接口,Prometheus 抓取,Grafana 展示。 - 关键指标:
node_network_receive_bytes_total和node_network_transmit_bytes_total。 - 计算每日流量:用 PromQL 查询:
increase(node_network_receive_bytes_total{instance="your_server_ip"}[1d]) - 优点:生态强大,可视化无敌,支持复杂告警规则。
- 缺点:部署和维护成本较高,需要学习曲线。
- 原理:每台服务器装
-
Zabbix
- 老牌监控神器,内置了很多模板,直接添加主机即可看到网络流量趋势图。适合传统 IDC 或混合云环境。
4. 应用层/X_X层统计(最精准的业务视角)
有时候你关心的不是“服务器网卡走了多少流量”,而是“我的 Web 服务到底给客户端发了多少数据”。这时候看网卡流量会被 CDN、负载均衡、缓存等干扰。
-
Nginx/Apache Access Log
- 解析访问日志中的
$body_bytes_sent字段,用awk或 ELK 栈汇总。 - 命令示例:
awk '{sum += $10} END {print sum}' access.log - 优点:精确到每个请求,能区分业务类型。
- 缺点:不包含 TCP 握手开销、重传等非 HTTP 流量;日志量大时处理成本高。
- 解析访问日志中的
-
Cloudflare / CDN 控制台
- 如果用了 CDN,直接看 CDN 控制台的流量报表。这是最终用户实际消耗的流量,也是计费的主要依据之一。
✅ 我的建议(怎么选?)
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 个人小站/单台云服务器 | 云厂商控制台 | 零配置,开箱即用,足够看清每天花了多少钱的流量费。 |
| 临时查账/故障排查 | sar 或 /proc/net/dev 脚本 |
快速定位是哪天、哪个时间段流量突增。 |
| 多台服务器/微服务架构 | Prometheus + Grafana | 统一视图,可定制仪表盘,方便团队共享。 |
| 关注业务收入/成本分摊 | Nginx Log 分析 / CDN 控制台 | 网卡流量包含协议开销,业务日志更能反映真实“有效流量”。 |
⚠️ 重要提醒
- 区分方向:一定要分清 Inbound(流入) 和 Outbound(流出)。对于大多数 Web 服务,Outbound 流量才是大头,也是计费重点。
- 区分内网络:云服务器通常内网流量免费,公网流量收费。确保你统计的是
Public IP对应的网卡流量,而不是Private IP。 - 单位换算:云厂商通常按 GB 计费,但监控显示可能是 Bytes。记得除以
1024^3。 - NAT 网关影响:如果你用了 NAT 网关,服务器内部的流量统计可能无法完全代表经过 NAT 网关后的总流量,以 NAT 网关的监控为准更准确。
总结:先去看云控制台,90% 的场景都能满足。不够再考虑 Prometheus 或自研脚本。
CLOUD云枢