Linux / UNIX에서 현재 네트워크 인터페이스 처리량 통계를 얻으려면 어떻게해야합니까? [닫은]


94

MRTG와 같은 도구는 eth0과 같은 특정 인터페이스에서 현재 네트워크 사용률에 대한 네트워크 처리량 / 대역폭 그래프를 제공합니다. Linux / UNIX의 명령 줄에서 해당 정보를 반환하려면 어떻게해야합니까?

가급적이면 시스템에서 표준으로 사용할 수있는 것 이외의 다른 것을 설치하지 않는 것이 좋습니다.


iftop 세부 정보가 주어지면 대답을 전환하는 것을 고려하십시오.
Gray

이 질문이 닫혀서 너무 아쉽습니다 bmon. 도움이되는 내용 을 추가 하고 싶었 기 때문 입니다. github.com/tgraf/bmon#screenshots
Daniel F

답변:


18

출력을 구문 분석 할 수 있습니다. ifconfig


이것은 루트 액세스가 가능하다고 가정합니다.
Lionel 2011

20
(보통) 이것을 실행하기 위해 루트가 될 필요는 없습니다 ...
confiq

3
정확히 수행 (긴 BSD의에서 netstat (1) 행동 나를 수) 나쁜 bash는 한 줄 :while true; do export `ifconfig p1p1 | grep packets | awk '{print $5, $3}' | xargs echo | sed -E -e "s/([0-9]+) ([0-9]+) ([0-9]+) ([0-9]+)/rx=\1 rxp=\2 tx=\3 txp=\4/"` ; echo $rx $rxp $tx $txp `cat /tmp/netstat` | awk '{print $1-$5, $2-$6, $3-$7, $4-$8}';echo $rx $rxp $tx $txp > /tmp/netstat; sleep 5 ;done
Jashank 제레미

4
ifconfig 출력을 구문 분석하면 오류가 발생하기 쉽습니다. 예를 들어 위의 한 줄로 인해 -bash: export: RHEL6 에서 overruns : 0 ': not a valid identifier`가 발생합니다. 구문 분석 /sys/class/net/$dev/statistics(@ephemient 답변의 perl 스크립트 참조)은 직접 훨씬 더 잘 작동합니다.
Nickolay

1
오류가 발생하기 쉽고 실용적이지 않기 때문에 허용되는 답변이되어서는 안됩니다. 작업을 훨씬 더 잘 수행하는 유틸리티가 있습니다. 아래로 스크롤하여 찾으십시오.
에릭

156

iftop does for network usage what top(1) does for CPU usage-http: //www.ex-parrot.com/~pdw/iftop/

iftop이 "표준"인지 모르겠지만 yum install iftopFedora에 설치할 수있었습니다 .


13
iftop깨끗한 Ubuntu 설치에도 쉽게 설치할 수 있습니다 apt-get install iftop..
Tom Marthenal 2012

1
및 Arch Linux에서pacman -S iftop
Benjamin Kaiser

3
한숨 음, 이것은 tcpdump출력을 다시 파싱하는 법을 배우는 것을 미루고 있음을 의미한다고 생각 합니다. 당신을 감사 iftop하고 wireshark내가 게으른 될 수 있도록하기위한,.
Parthian Shot

1
질문은 인터페이스 별 통계를 요청했지만 iftop더 자세하고 연결 별 통계를 제공합니다.
Joachim Breitner 2015

1
관리자 권한 iftop이없는 사용자의 경우 설치 가 필요하며 (설치하지 않고 빌드 할 수도 없음 libpcap) 홈페이지에 root.
Nickolay

109

Sar있어? RHEL / CentOS를 사용하는 경우 가능합니다.

priv, dorky 바이너리, hacky 스크립트, libpcap 등이 필요 없습니다. Win.

$ sar -n DEV 1 3
Linux 2.6.18-194.el5 (localhost.localdomain)    10/27/2010

02:40:56 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:57 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:57 PM      eth0  10700.00   1705.05 15860765.66 124250.51      0.00      0.00      0.00
02:40:57 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:57 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:58 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:58 PM      eth0   8051.00   1438.00 11849206.00 105356.00      0.00      0.00      0.00
02:40:58 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

02:40:58 PM     IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
02:40:59 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
02:40:59 PM      eth0   6093.00   1135.00 8970988.00  82942.00      0.00      0.00      0.00
02:40:59 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s   rxbyt/s   txbyt/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0   8273.24   1425.08 12214833.44 104115.72      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

11
kB / s의 경우 전송 및 수신 : sar -n DEV 1 3 | grep $ IFACE | 꼬리 -n1 | awk '{print $ 5, $ 6}'
Lionel 2011

2
@Lionel-minor nit : 그 순서대로 수신 및 전송을 의미했습니다. :-)
lacinato

Sar는 사랑스러운 오래된 도구입니다. 그것은 수집을위한 또 다른 바이너리 또는 4 개의 cronjobs입니다. :)
XTL

1
sar가 아닌 Centos7을 실행합니다.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... 빠른 Google 검색을 통해 많은 정보가 표시됩니다.
Mike S

44

나는 오래 전에이 바보 같은 스크립트를 썼는데 Perl과 Linux≥2.6에 의존한다.

#!/usr/bin/perl

use strict;
use warnings;

use POSIX qw(strftime);
use Time::HiRes qw(gettimeofday usleep);

my $dev = @ARGV ? shift : 'eth0';
my $dir = "/sys/class/net/$dev/statistics";
my %stats = do {
    opendir +(my $dh), $dir;
    local @_ = readdir $dh;
    closedir $dh;
    map +($_, []), grep !/^\.\.?$/, @_;
};

if (-t STDOUT) {
    while (1) {
        print "\033[H\033[J", run();
        my ($time, $us) = gettimeofday();
        my ($sec, $min, $hour) = localtime $time;
        {
            local $| = 1;
            printf '%-31.31s: %02d:%02d:%02d.%06d%8s%8s%8s%8s',
            $dev, $hour, $min, $sec, $us, qw(1s 5s 15s 60s)
        }
        usleep($us ? 1000000 - $us : 1000000);
    }
}
else {print run()}

sub run {
    map {
        chomp (my ($stat) = slurp("$dir/$_"));
        my $line = sprintf '%-31.31s:%16.16s', $_, $stat;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[0]) / 1)
            if @{$stats{$_}} > 0;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[4]) / 5)
            if @{$stats{$_}} > 4;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[14]) / 15)
            if @{$stats{$_}} > 14;
        $line .= sprintf '%8.8s', int (($stat - $stats{$_}->[59]) / 60)
            if @{$stats{$_}} > 59;
        unshift @{$stats{$_}}, $stat;
        pop @{$stats{$_}} if @{$stats{$_}} > 60;
        "$line\n";
    } sort keys %stats;
}

sub slurp {
    local @ARGV = @_;
    local @_ = <>;
    @_;
}

/sys/class/net/$dev/statistics매초마다 읽고 현재 숫자와 평균 변화율을 인쇄합니다.

$ ./net_stats.pl eth0
rx_bytes                       :  74457040115259 4369093 4797875 4206554 364088
rx_packets                     :     91215713193   23120   23502   23234  17616
...
tx_bytes                       :  90798990376725 8117924 7047762 7472650 319330
tx_packets                     :     93139479736   23401   22953   23216  23171
...
eth0                           : 15:22:09.002216      1s      5s     15s     60s

                                ^ current reading  ^-------- averages ---------^

5
정말 멋진 대본입니다. 감사합니다!
Gui13

1
숫자를 맞추려면 "8s"와 "8.8s"를 "16s"와 "16.16s"로 바꿔야했습니다.
Nickolay

내가 옳다고 이해한다면, 최종 결과를 정확하게 만들기 위해 (예 : 라이브 통계에서), 매초마다 실행해야 /proc/net/dev하거나 아니면 초당 기본으로 데이터를 계산해야합니까?
Ilia Rostovtsev

31

nload 는 실시간으로 대역폭을 모니터링하고 sudo apt-get install nload를 사용하여 Ubuntu 또는 Debian에 쉽게 설치할 수있는 훌륭한 도구입니다.

Device eth0 [10.10.10.5] (1/2):
=====================================================================================
Incoming:


                               .         ...|    
                               #         ####|   
                           .. |#|  ...   #####.         ..          Curr: 2.07 MBit/s
                          ###.###  #### #######|.     . ##      |   Avg: 1.41 MBit/s
                         ########|#########################.   ###  Min: 1.12 kBit/s
             ........    ###################################  .###  Max: 4.49 MBit/s
           .##########. |###################################|#####  Ttl: 1.94 GByte
Outgoing:
            ##########  ###########    ###########################
            ##########  ###########    ###########################
            ##########. ###########   .###########################
            ########### ###########  #############################
            ########### ###########..#############################
           ############ ##########################################
           ############ ##########################################
           ############ ##########################################  Curr: 63.88 MBit/s
           ############ ##########################################  Avg: 32.04 MBit/s
           ############ ##########################################  Min: 0.00 Bit/s
           ############ ##########################################  Max: 93.23 MBit/s
         ############## ##########################################  Ttl: 2.49 GByte

또 다른 훌륭한 도구는 iftop 이며 쉽게 적용 할 수 있습니다.

             191Mb      381Mb                 572Mb       763Mb             954Mb     
└────────────┴──────────┴─────────────────────┴───────────┴──────────────────────
box4.local            => box-2.local                      91.0Mb  27.0Mb  15.1Mb
                      <=                                  1.59Mb   761kb   452kb
box4.local            => box.local                         560b   26.8kb  27.7kb
                      <=                                   880b   31.3kb  32.1kb
box4.local            => userify.com                         0b   11.4kb  8.01kb
                      <=                                  1.17kb  2.39kb  1.75kb
box4.local            => b.resolvers.Level3.net              0b     58b    168b
                      <=                                     0b     83b    288b
box4.local            => stackoverflow.com                   0b     42b     21b
                      <=                                     0b     42b     21b
box4.local            => 224.0.0.251                         0b      0b    179b
                      <=                                     0b      0b      0b
224.0.0.251           => box-2.local                         0b      0b      0b
                      <=                                     0b      0b     36b
224.0.0.251           => box.local                           0b      0b      0b
                      <=                                     0b      0b     35b


─────────────────────────────────────────────────────────────────────────────────
TX:           cum:   37.9MB   peak:   91.0Mb     rates:   91.0Mb  27.1Mb  15.2Mb
RX:                  1.19MB           1.89Mb              1.59Mb   795kb   486kb
TOTAL:               39.1MB           92.6Mb              92.6Mb  27.9Mb  15.6Mb

이전 * nix의 클래식하고 강력한 sar 및 netstat 유틸리티를 잊지 마십시오!


2
이 허용 대답해야한다
에릭


25
  • dstat -vmstat, iostat, ifstat, netstat 정보 등을 결합합니다.
  • iftop -eth에서 실제로 일어나는 일을 분석하는 놀라운 네트워크 대역폭 유틸리티
  • netio -TCP / IP를 통해 네트워크의 순 처리량 측정
  • inq-스토리지 (일반적으로 Symmetrix)에 대한 정보를 표시하는 CLI 문제 해결 유틸리티입니다. 기본적으로 INQ는 디바이스 이름, Symmetrix ID, Symmetrix LUN 및 용량을 반환합니다.
  • send_arp -지정된 네트워크 장치 (기본값은 eth0)에서 arp 브로드 캐스트를 전송하여 이전 및 새 IP 주소 매핑을 MAC 주소에보고합니다.
  • EtherApe-etherman을 모델로 한 Unix 용 그래픽 네트워크 모니터입니다. 링크 계층, IP 및 TCP 모드를 특징으로하며 네트워크 활동을 그래픽으로 표시합니다.
  • iptraf -네트워크를 통과하는 IP 트래픽에 대한 정보를 표시하는 IP 트래픽 모니터.

자세한 내용 : http://felipeferreira.net/?p=1194


1
간단한 목록에 감사 드리며 이들은 대부분 기본 유틸리티입니다. 특히, 나는 아무것도 설치하지 않고도 iftop에서 매우 멋진 피크 대역폭을 얻을 수있었습니다.
Foliovision

16

그것에 대한 또 다른 빠르고 더러운 bash 스크립트가 있습니다.

#!/bin/bash
IF=$1
if [ -z "$IF" ]; then
        IF=`ls -1 /sys/class/net/ | head -1`
fi
RXPREV=-1
TXPREV=-1
echo "Listening $IF..."
while [ 1 == 1 ] ; do
        RX=`cat /sys/class/net/${IF}/statistics/rx_bytes`
        TX=`cat /sys/class/net/${IF}/statistics/tx_bytes`
        if [ $RXPREV -ne -1 ] ; then
                let BWRX=$RX-$RXPREV
                let BWTX=$TX-$TXPREV
                echo "Received: $BWRX B/s    Sent: $BWTX B/s"
        fi
        RXPREV=$RX
        TXPREV=$TX
        sleep 1
done

이 점을 고려있어 sleep 1실제로 거친 대역폭 평가를위한 마지막 단 하나의 사실이 아니다 둘째,하지만 충분한을합니다.

@ephemient에게 감사드립니다 /sys/class/net/<interface>! :)


3
숫자를 MB / s 형식으로 지정하려면 "echo"줄을 다음과 같이 바꿉니다. echo $ BWRX $ BWTX | awk '{rx = $ 1 / 1024 / 1024; tx = $ 2 / 1024 / 1024; print "Received"rx "MB / s, Sent"tx "MB / s"} '
Michael Böckling

1
나는 확신 @BuddyCasino 당신은 직접 그것을 할 수 let BWRX=($RX-$RXPREV)/1024(나는 지금 그것을 테스트하기 위해 아무것도하지 않는 불구하고)
마티유

당신이 옳은 것 같고, 그렇게하려고했을 때 왠지 작동하지 않아서 awk에 정착했지만 오타 일뿐입니다.
Michael Böckling 2014 년

15

iftop 및 iptraf 외에도 다음을 확인하십시오.

  • bwm-ng (대역폭 모니터 차세대)

및 / 또는

  • cbm (색상 대역폭 측정기)

참조 : http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html


2
bwm-ng rocks : 실행하는 데 특별한 권한이 필요하지 않습니다.
Rudy Matela 2013

나는 이미 수년 동안 그것을 사용하고 대부분의 사용 사례에서 인터페이스가 iftop보다 훨씬 더 명확하다는 것을 알게되었습니다.
Dr. Jan-Philip Gehrcke

6

값을 얻으려면 다음과 같이 간단한 쉘 oneliner를 사용할 수 있습니다.

S=10; F=/sys/class/net/eth0/statistics/rx_bytes; X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))"; echo $BPS

그것은 10 초 동안 (이 변경주기를 변경하면 평균 "초당 수신 된 바이트 수"를 표시한다 S=10파라미터, 및는 이용 BPS 송신 대신 BPS를 수신 측정 할 수있는 tx_bytes대신에 rx_bytes). eth0모니터링하려는 네트워크 장치 로 변경 하는 것을 잊지 마십시오 .

물론 평균 속도를 표시하는 데 국한되지는 않지만 (다른 답변에서 언급했듯이 훨씬 더 좋은 결과를 보여주는 다른 도구가 있습니다)이 솔루션은 다른 작업을 수행하기 위해 쉽게 스크립팅 할 수 있습니다.

예를 들어, 다음 셸 스크립트 (가독성을 위해 여러 줄로 분할)는 5 분 평균 전송 속도가 10kBPS 아래로 떨어질 때 (아마 다른 대역폭을 소비하는 프로세스가 완료 될 때)에만 offlineimap 프로세스를 실행합니다.

#!/bin/sh
S=300; F=/sys/class/net/eth0/statistics/tx_bytes
BPS=999999
while [ $BPS -gt 10000 ]
do
  X=`cat $F`; sleep $S; Y=`cat $F`; BPS="$(((Y-X)/S))";
  echo BPS is currently $BPS
done
offlineimap

/sys/class/...(제출자가 선택했던 것처럼 괜찮 리눅스 특정 linux태그), 비 오래된 커널을 필요로한다. 쉘 코드 자체는 / bin / sh와 호환됩니다 (따라서 bash뿐만 아니라 dash 및 기타 / bin / sh 구현도 작동합니다). / bin / sh는 실제로 항상 설치되는 것입니다.


5

나는 좋아 iptraf하지만 아마도 그것을 설치해야 할 것이고 더 이상 적극적으로 유지되지 않는 것 같습니다.


1
iptraf-ng가 있으며 차이점에 대한 제안이 있습니까?
Felix Yan

1
iptraf-ng는 원래 프로젝트의 포크입니다. 더 많은 원래 기능이 있어야합니다.
Rudy Matela 2013

2

나는 dstat가 꽤 좋다고 생각합니다. 그래도 설치해야합니다. 필요한 것보다 더 많은 정보를 제공합니다. Netstat는 패킷 속도를 제공하지만 대역폭도 제공하지 않습니다. netstat -s



0

AMI에서 나를 위해 작동하도록 ifconfig 스크립트를 구문 분석 할 수 없으므로 10 초 동안 수신 된 평균 트래픽을 측정하는 작업을 수행했습니다.

date && rxstart=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && sleep 10 && rxend=`ifconfig eth0 | grep bytes | awk '{print $2}' | cut -d : -f 2` && difference=`expr $rxend - $rxstart` && echo "Received `expr $difference / 10` bytes per sec"

죄송합니다. 너무 싸고 불쾌하지만 효과가있었습니다!


0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

json 형식의 (ifconfig -a) 출력을 원한다면 이것을 사용할 수 있습니다 (python)


이러한 보고서 처리량 통계가 없습니까?
Dzamo Norton
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.