直接监控Docker容器网络流量的关键是定位veth接口:可用docker stats查累计I/O;iftop或iptraf-ng盯实时速率;cAdvisor+Prometheus+Grafana做长期趋势与告警;Shell脚本读/sys/class/net/veth/statistics零依赖轮询。

直接监控 Docker 容器网络流量,关键不在于装一堆工具,而在于找准数据来源和监控粒度。宿主机上每个容器都通过一对 veth 设备连接到 bridge(如 docker0),真实流量就跑在这条虚拟链路上。只要定位到对应 veth 接口,就能用轻量、稳定、无需额外服务的方式拿到实时速率或累计值。
用 docker stats 快速看累计网络 I/O
这个命令开箱即用,适合日常巡检或临时排查:
- 运行
docker stats --no-stream --format "table {{.Name}}\t{{.NetIO}}",一次性列出所有容器的总收发字节数(例如12.4MB / 890KB) - 加
--stream参数可每秒刷新,但注意它只显示总量,不区分入/出方向,也不提供每秒速率 - 数据来自 cgroups 底层统计,延迟低,但无法反映瞬时波动,适合观察趋势而非抓突发
用 iftop 或 iptraf-ng 盯住具体 veth 接口的实时速率
这是最精准、响应最快的现场排障方式:
- 先查容器 IP:
docker inspect <容器名> | grep IPAddress - 再找对应 veth 名:
ip link show | grep -A1 '<容器MAC>',或ls /sys/class/net/veth* -l | grep <容器MAC> - 用 iftop 监控该接口进出流量:
sudo iftop -P -f "host <容器IP>" -i vethxxxx - 更推荐 iptraf-ng:
sudo iptraf-ng -i vethxxxx,界面友好,支持按端口、协议、远程 IP 实时排序,一眼看出谁在打满带宽
用 cAdvisor + Prometheus + Grafana 做长期趋势与告警
适合生产环境,尤其需要历史对比、多容器横向分析或自动触发告警的场景:
- 启动 cAdvisor:挂载
/var/run/docker.sock和/sys等路径,暴露:8080/metrics - Prometheus 抓取后,用 PromQL 计算速率,例如:
rate(container_network_receive_bytes_total{container!=""}[1m])rate(container_network_transmit_bytes_total{container!=""}[1m]) - Grafana 中新建面板,X 轴为时间,Y 轴为 Bps 或 KBps,可叠加多个容器曲线,设置突增 200% 就告警
*用 Shell 脚本读 `/sys/class/net/veth/statistics/` 做零依赖轮询**
不需要安装任何工具,适合嵌入已有运维脚本或资源受限环境:
- 找到目标 veth 接口(如
vethabcd12) - 每秒读取
rx_bytes和tx_bytes:cat /sys/class/net/vethabcd12/statistics/rx_bytescat /sys/class/net/vethabcd12/statistics/tx_bytes - 两次读数相减再除以时间差,就是实时收发速率(单位:字节/秒)
- 可配合
watch -n1或写成循环脚本持续输出,精度高、开销极小
不复杂但容易忽略


















