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

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

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容器,也可以使用这种方法来获取网络数据。返回搜狐,查看更多

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值