ifconfig의 입력/출력 바이트를 분리하는 방법은 무엇입니까?
패킷과 바이트를 확인했습니다 ifconfig
.
ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 153.126.***.** netmask 255.255.254.0 broadcast 153.126.179.255
ether 9c:a3:ba:01:df:c3 txqueuelen 1000 (Ethernet)
RX packets 60777328 bytes 18377900528 (18.3 GB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 33420428 bytes 11013732175 (11.0 GB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
나는 매일 이 스크립트를 실행하고 바이트를 얻습니다.
그러나 이런 방식으로 입출력 패킷이 혼합됩니다.
입출력 패킷을 분리하는 방법이 있나요?
아니면 구성이 불가능한 경우(다른 도구를 사용해야 하나요???)
내가 원하는 것은 매일 입력/출력 바이트/패킷을 얻는 것뿐입니다.
PATH="/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin"
NIC="ens3"
LOG="/var/log/transmit_bytes.log"
AT=`date '+%Y-%m-%d %H:%M:%S'`
TX=`cat /proc/net/dev | grep $NIC | sed -e 's/:/ /' | awk '{print$10}'`
echo "${AT} ${TX}" >> $LOG
exit 0
답변1
netstat -ni
패킷을 쉽게 구문 분석 가능한 테이블에 넣는 데 사용할 수 있습니다 .
예를 들어,netstat -ni
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 1534430 0 0 0 605131 0 0 0 BMRU
lo 65536 20701 0 0 0 20701 0 0 0 LRU
tun0 1500 131763 0 0 0 177857 0 0 0 MOPRU
wlan0 1500 0 0 0 0 0 0 0 0 BMU
수신 및 전송된 패킷 수를 확인하려면 다음과 같이 하면 충분합니다.
netstat -ni | awk -v interface="eth0" '$1 == interface { print $3, $7 }'
결과
1534430 605131
ip
가 있지만 가 없는 최신 시스템의 경우 netstat
해당 ip -s -j link show dev eth0
JSON 형식이 제공됩니다.
[{"ifindex":2,"ifname":"eth0","flags":["BROADCAST","MULTICAST","UP","LOWER_UP"],"mtu":1500,"qdisc":"pfifo_fast","operstate":"UP","linkmode":"DEFAULT","group":"default","txqlen":1000,"link_type":"ether","address":"b8:27:eb:31:53:64","broadcast":"ff:ff:ff:ff:ff:ff","stats64":{"rx":{"bytes":182767514,"packets":1538635,"errors":0,"dropped":0,"over_errors":0,"multicast":0},"tx":{"bytes":268406197,"packets":606995,"errors":0,"dropped":0,"carrier_errors":0,"collisions":0}}}]
이것은 다음과 같이 구문 분석될 수 있습니다.jq
ip -s -j link show dev eth0 | jq '.[].stats64 | ( .rx.packets, .tx.packets )' | xargs
산출
1538635 606995