天天看點

[Bytes,Network,eth0,網絡資料,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 2021 - Thu Jun 4 05:39:06 UTC 2021

  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容器,也可以使用這種方法來擷取網絡資料。