linux网卡流量负荷获取,如何从Linux系统中获取带宽、流量网络数据

引入

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

e7e68fd40891ec7cdf1b66da851b0983.png

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

每隔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:313568232649602558303341870000000227503770878768476857419543000000

lo:44090577055122430000004409057705512243000000

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

从标题可以看出,第一列是网卡名称,第二列是入方向字节数(流量),第三列是入方向数据包数量,第四列是入方向错误包数,第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"

执行结果:

timeRangeThuJun405:38:06UTC2015-ThuJun405:39:06UTC2015

NetworkInBytes:628578266Bytes

NetworkOutBytes:465529561Bytes

NetworkInBW:79Mbps

NetworkOutBW:59Mbps

扩展

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

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TestBandwitdth脚本用于测试带宽; //***************************************************************************************** 用法: 1.将“TestBandwidth.tar.gz”脚本copy到服务器上解压后,进入目录; 2.编辑“TestURL.sh”:灌流量; 上行:wget http://*** 下行:post http://*** 3.如果修改了步骤2,执行此步,否则跳过: 修改 TestBandwidth.tar.gz 脚本的倒数5-6行; kill -9 `ps -ef|grep wget|grep http|awk '{print $2}'` //修改kill关键字:grep wget rm zhuxian* //修改rm关键字:zhuxian* 4.修改“bandwidth.sh”:修改检测网卡: netcard=em1 5.使用后台运行命令执行:nohup ./bandwidth.sh (注:停止脚本 pkill -9 bandwidth.sh && pkill -9 wget) 6.查看结果:BandwitdthResult.txt //********************************************************* 测试流量:清空“TestURL.sh”文件时执行就是测试流量 //***************************************************************************************** 脚本说明: 1.调用TestURL.sh脚本启动灌流量操作; 2.等待10s(防止刚开始下载时的流量冲高); 3.取当前网卡已接收的上行、下行数据流量; 4.等待5s; 5.取当前网卡已接收的上行、下行数据流量; 6.计算两次取值间的差值,算平均值; 7.等待10s,开始下一次小循环(循环4次)(一次小循环70s); 8.清除下载进程,清除下载文件,清除下载日志; 9.等待3495s,开始下一次大循环(一次大循环1h);

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值