技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> 如何从Linux系统中获取带宽、流量网络数据

如何从Linux系统中获取带宽、流量网络数据

浏览:2097次  出处信息

引入

国外的云主机厂商,例如AWS提供的网络数据是以流量为单位的,例如下面的图片:

从上图来看,其取值方式为

每隔5分钟取值1次,(每次)每个点显示为1分钟内的流量字节数(Bytes)

带宽与流量

我们从上图随便取个点来计算下:

  • 带宽= 单位时间内流量*8 /时间段 /1024/1024  (Mbps)

  • AWS network in 619581409 对应得带宽为 78.8 Mbps

  • AWS network out 421092676 对应得带宽为 53.5Mbps

想图个省事,可以直接删掉AWS流量的后面7位数字,就可以得到带宽(Mbps)(误差稍有点大)

Linux中的网络数据提取

在Linux系统中我们可以从/proc 目录里来获取相应的数据并进行处理。

让我们来看下网络相关的/proc/net/dev

  • cat /proc/net/dev

  • Inter-|   Receive                                                |  Transmit

  • face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed

  •  eth0: 313568232649602 558303341870    0    0    0     0          0         0 227503770878768 476857419543    0    0    0     0       0          0

  • lo: 440905770 5512243    0    0    0     0          0         0 440905770 5512243    0    0    0     0       0          0

这个文件是本机所有网卡的数据记录。

从标题可以看出,第一列是网卡名称,第二列是入方向字节数(流量),第三列是入方向数据包数量,第四列是入方向错误包数,第10列是出方向字节数(流量)

脚本计算带宽和流量

有了数据,我们就可以写个shell脚本来获取带宽和流量数据了

脚本getnettraffic.sh

  • #!/bin/bash


  • DATE1=`date --utc`

  • RX1=`cat /proc/net/dev | grep eth0 |awk '{print $2}'`

  • TX1=`cat /proc/net/dev | grep eth0 |awk '{print $10}'`


  • sleep60


  • DATE2=`date --utc`

  • RX2=`cat /proc/net/dev | grep eth0 |awk '{print $2}'`

  • TX2=`cat /proc/net/dev | grep eth0 |awk '{print $10}'`



  • RX=$(( $RX2-$RX1 ))

  • TX=$(( $TX2-$TX1 ))


  • RXBAND=$(($RX*8/60/1024/1024))  

  • TXBAND=$(($TX*8/60/1024/1024))


  • echo "time Range $DATE1 - $DATE2"

  • echo "Network In Bytes: $RX Bytes"

  • echo "Network Out Bytes: $TX Bytes"

  • echo "Network In BW: $RXBAND Mbps"

  • echo "Network Out BW: $TXBAND Mbps"

执行结果:

  • time Range Thu Jun  4 05:38:06 UTC 2015 - Thu Jun  4 05:39:06 UTC 2015

  • Network In Bytes: 628578266 Bytes

  • Network Out Bytes: 465529561 Bytes

  • Network In BW: 79 Mbps

  • Network Out BW: 59 Mbps

扩展

我们已经知道 /proc/net/dev 这个文件存储了主机上的网络数据。但如果我想看某个进程的网络数据怎么办?

同样的Linux也提供了 /proc/$PID/net/dev 这个文件来记录进程的网络数据。

如果主机上运行了虚拟机或者docker容器,也可以使用这种方法来获取网络数据。


QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1