工作中,經常會遇到需要查看服務器的實時網卡流量,下面記錄幾種查看實時流量的方法
命令sar -n DEV 1 2
sar命令包含在sysstat工具包中,可以基於網絡接口統計流量信息
- 統計流量的命令
sar -n DEV 1 2
- 命令說明
-n參數有6個不同的參數,DEV | EDEV | NFS | NFSD | SOCK | ALL- dev: 顯示網絡接口信息
- EDEV:顯示關於網絡錯誤的統計數據
- NFS:統計活動的NFS客戶端的信息
- NFSD:統計NFS服務器的信息
- SOCK:顯示套接字信息
- ALL:顯示所有5個開關
1 2 表示每一秒取一次值,總共取兩次值
- 運行結果
root@ubuntu:~/ambari/ambari-admin# sar -n DEV 1 2
Linux 5.4.0-58-generic (ubuntu) 12/30/2020 _x86_64_ (2 CPU)
12:33:02 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:33:03 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:33:03 AM ens33 2.00 3.00 0.12 0.50 0.00 0.00 0.00 0.00
12:33:03 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
12:33:04 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
12:33:04 AM ens33 9.00 18.00 0.53 3.95 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: ens33 5.50 10.50 0.32 2.23 0.00 0.00 0.00
結果參數說明
- IFACE:LAN接口
- rxpck/s:每秒鍾接收的數據包
- txpck/s:每秒鍾發送的數據包
- rxbyt/s:每秒鍾接收的字節數
- txbyt/s:每秒鍾發送的字節數
- rxcmp/s:每秒鍾接收的壓縮數據包
- txcmp/s:每秒鍾發送的壓縮數據包
- rxmcst/s:每秒鍾接收的多播數據包
- rxerr/s:每秒鍾接收的壞數據包
- txerr/s:每秒鍾發送的壞數據包
- coll/s:每秒沖突數
- rxdrop/s:因為緩沖充滿,每秒鍾丟棄的已接收數據包數
- txdrop/s:因為緩沖充滿,每秒鍾丟棄的已發送數據包數
- txcarr/s:發送數據包時,每秒載波錯誤數
- rxfram/s:每秒接收數據包的幀對齊錯誤數
- rxfifo/s:接收的數據包每秒FIFO過速的錯誤數
- txfifo/s:發送的數據包每秒FIFO過速的錯誤數
命令cat /proc/net/dev
Linux 內核提供了一種通過 /proc 文件系統,在運行時訪問內核內部數據結構、改變內核設置的機制。proc文件系統是一個偽文件系統,它只存在內存當中,而不占用外存空間。它以文件系統的方式為訪問系統內核數據的操作提供接口。用戶和應用程序可以通過proc得到系統的信息,並可以改變內核的某些參數。由於系統的信息,如進程,是動態改變的,所以用戶或應用程序讀取proc文件時,proc文件系統是動態從系統內核讀出所需信息並提交的。/proc文件系統中包含了很多目錄,其中/proc/net/dev 保存了網絡適配器及統計信息
- 運行結果
root@ubuntu:~/ambari/ambari-admin# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 216018 2037 0 0 0 0 0 0 216018 2037 0 0 0 0 0 0
ens33: 634272972 543746 0 0 0 0 0 0 36714114 359230 0 0 0 0 0 0
結果參數說明
- face:LAN接口
- bytes:收發的字節數
- packets:收發正確的包量
- errs :收發錯誤的包量
- drop:收發丟棄的包量
流量監控腳本
#!/bin/bash
ethn=$1
while true
do
RX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
TX_pre=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
sleep 1
RX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $2}')
TX_next=$(cat /proc/net/dev | grep $ethn | sed 's/:/ /g' | awk '{print $10}')
clear
echo -e "\t RX `date +%k:%M:%S` TX"
RX=$((${RX_next}-${RX_pre}))
TX=$((${TX_next}-${TX_pre}))
if [[ $RX -lt 1024 ]];then
RX="${RX}B/s"
elif [[ $RX -gt 1048576 ]];then
RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
else
RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];then
TX="${TX}B/s"
elif [[ $TX -gt 1048576 ]];then
TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
else
TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
echo -e "$ethn \t $RX $TX "
done
此腳本采用第二種流量監控的方式來實現,可以自定義接口,可以根據流量大小自動顯示單位,默認采用間隔1s
用法:
將腳本保存為可執行腳本文件,比如叫netMonitor.sh
chmod +x ./netMonitor.sh 將文件改成可執行腳本
sudo ./netMonitor.sh ens33即可開始監看接口ens33流量,按ctrl+c退出
使用watch命令
使用watch命令,配合ifconfig、more /proc/net/dev、cat /proc/net/dev來實時監控。比如執行 watch -n 1 "ifconfig ens33"
Every 10.0s: ifconfig ens33 ubuntu: Wed Dec 30 01:00:37 2020
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.174.129 netmask 255.255.255.0 broadcast 192.168.174.255
inet6 fe80::1dfc:fe80:fbb:2d8e prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:a0:1c:36 txqueuelen 1000 (Ethernet)
RX packets 778847 bytes 966556456 (966.5 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 467526 bytes 45050559 (45.0 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
