Jak uzyskać aktualne statystyki przepustowości interfejsu sieciowego w systemie Linux / UNIX? [Zamknięte]

94

Narzędzia takie jak MRTG zapewniają wykresy przepustowości / przepustowości sieci dla bieżącego wykorzystania sieci na określonych interfejsach, takich jak eth0. Jak mogę zwrócić te informacje w wierszu poleceń w systemie Linux / UNIX?

Najlepiej byłoby, gdyby nie instalowanie czegokolwiek innego niż to, co jest dostępne w systemie w standardzie.

davidmytton
źródło
Rozważ zmianę odpowiedzi, biorąc pod uwagę szczegóły iftop.
Gray
Szkoda, że ​​to pytanie zostało zamknięte, ponieważ chciałem dodać, bmonco jest pomocne. github.com/tgraf/bmon#screenshots
Daniel F

Odpowiedzi:

17

Możesz przeanalizować dane wyjściowe ifconfig

Mehrdad Afshari
źródło
Zakłada się, że dostęp roota jest dostępny
Lionel
20
(zwykle) Nie musisz być rootem, aby to uruchomić ...
confiq
3
Zła jedna linijka bash, która robi dokładnie to (i sprawia, że 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
tęsknię za
4
Przetwarzanie danych wyjściowych ifconfig jest podatne na błędy, na przykład powyższa -bash: export: jednolinijka powoduje przekroczenia: 0 ': nie jest prawidłowym identyfikatorem' dla mnie na RHEL6. Parsowanie /sys/class/net/$dev/statistics(zobacz skrypt Perla w odpowiedzi @ephemient) bezpośrednio działa znacznie lepiej.
Nickolay
2
nie powinna być akceptowaną odpowiedzią, ponieważ jest podatna na błędy i niepraktyczna. istnieją narzędzia, które wykonują tę pracę znacznie lepiej. Przewiń w dół, aby się dowiedzieć.
Eric
156

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

Nie wiem, jak „standardowy” jest iftop, ale udało mi się go zainstalować yum install iftopw Fedorze.

Philip Durbin
źródło
13
iftopmoże być zainstalowany na czystej łatwo zainstalować Ubuntu również: apt-get install iftop.
Tom Marthenal
1
i na Arch Linux zpacman -S iftop
Benjaminem Kaiserem,
3
westchnij Cóż, myślę, że to oznacza, że ​​odkładam naukę tcpdumpponownego analizowania wyników. Dziękuję iftopi wiresharkza pozwolenie mi na lenistwo.
Parthian Shot
3
Zwróć uwagę, że pytanie zadane dla statystyk dla poszczególnych interfejsów, ale iftopjest bardziej szczegółowe i zawiera statystyki dla poszczególnych połączeń.
Joachim Breitner
1
Dla osób bez uprawnień administratora pamiętaj, że iftopwymaga instalacji (nie będziesz w stanie go nawet zbudować bez libpcapzainstalowanej instalacji), a jego strona główna mówi, że musi być uruchamiany pod root.
Nickolay,
109

Masz sar? Prawdopodobnie tak, jeśli używasz RHEL / CentOS.

Nie ma potrzeby korzystania z priv, głupich plików binarnych, hakerskich skryptów, libpcap itp. 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
podsadzkarz
źródło
11
Dla kB / s nadawanie i odbiór: sar -n DEV 1 3 | grep $ IFACE | ogon -n1 | awk '{print 5 $, $ 6}'
Lionel,
2
@Lionel - drobna nitka: miałeś na myśli Odbiór i Transmisja, w tej kolejności. :-)
lacinato
Sar to piękne, stare narzędzie. To kolejny plik binarny lub cztery i różne cronjoby do zbierania :)
XTL
1
Uruchamiam Centos7, nie sar.
Josh Usre
google.com/webhp?q=sar%20centos%207 ... szybkie wyszukiwanie w Google pozwoli uzyskać wiele informacji.
Mike S,
44

Napisałem ten głupi skrypt dawno temu, zależy on tylko od Perla i Linuksa ≥ 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 @_ = <>;
    @_;
}

Po prostu czyta /sys/class/net/$dev/statisticsco sekundę i wypisuje aktualne liczby oraz średnią szybkość zmian:

$ ./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 ---------^
ephemient
źródło
5
To wspaniały mały scenariusz, dzięki stary!
Gui13
1
Musiałem zamienić „8s” i „8,8s” na „16s” i „16,16s”, żeby cyfry pasowały.
Nickolay,
Jeśli dobrze rozumiem, aby ostateczny wynik był dokładny (na przykład w statystykach na żywo), musi biec co sekundę /proc/net/devlub jakoś obliczać dane na sekundę podstawowe?
Ilia Rostovtsev
31

nload to świetne narzędzie do monitorowania przepustowości w czasie rzeczywistym i łatwe do zainstalowania w Ubuntu lub Debian za pomocą sudo apt-get install nload.

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

Innym doskonałym narzędziem jest iftop , również łatwo dostępny:

             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

Nie zapomnij o klasycznych i potężnych narzędziach sar i netstat na starszych * nix!

błąd krytyczny
źródło
2
to powinna być akceptowana odpowiedź
Eric
28

Możesz przeanalizować / proc / net / dev .

codelogic
źródło
3
/ proc nie istnieje na każdym systemie UNIX.
Mehrdad Afshari
31
To prawda, po prostu założyłem ze względu na tag Linux, że OP był zainteresowany tylko Linuksem.
codelogic
nie ma takiego pliku na jądrze 3.17
Tomas Tomecek
4
Wydaje się, że jest to równoważne parsowaniu, /sys/class/net/$dev/statisticsjak w skrypcie Ephemient.
Nickolay
25
  • dstat - Łączy dane vmstat, iostat, ifstat, netstat i inne
  • iftop - Niesamowite narzędzie do analizy przepustowości sieci do analizy tego, co naprawdę dzieje się w Twoim eterze
  • netio - Mierzy przepustowość netto sieci za pośrednictwem protokołu TCP / IP
  • inq- Narzędzie do rozwiązywania problemów z interfejsem CLI, które wyświetla informacje o pamięci masowej, zwykle Symmetrix. Domyślnie INQ zwraca nazwę urządzenia, identyfikator Symmetrix, jednostkę LUN Symmetrix i pojemność.
  • send_arp - Wysyła rozgłoszenie ARP na określone urządzenie sieciowe (domyślnie eth0), zgłaszając stare i nowe mapowanie adresu IP na adres MAC.
  • EtherApe- jest graficznym monitorem sieciowym dla Uniksa wzorowanym na Ethermanie. Wyposażony w warstwę łącza, tryby IP i TCP, wyświetla graficznie aktywność sieci.
  • iptraf - Monitor ruchu IP, który pokazuje informacje o ruchu IP przechodzącym przez twoją sieć.

Więcej szczegółów: http://felipeferreira.net/?p=1194

Xoroz
źródło
1
Dzięki za prostą listę i że są to głównie domyślne narzędzia. W szczególności udało mi się uzyskać bardzo dobrą przepustowość szczytową z iftop bez instalowania czegokolwiek.
Foliovision
16

Mam do tego kolejny szybki i brudny skrypt 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

Rozważa to sleep 1 faktycznie potrwa to dokładnie jedną sekundę, co nie jest prawdą, ale wystarczająco dobre do zgrubnej oceny przepustowości.

Dzięki @ephemient za /sys/class/net/<interface>! :)

Matthieu
źródło
3
Jeśli chcesz sformatować swoje liczby jako MB / s, zamień wiersz „echo” na następującą: echo $ BWRX $ BWTX | awk '{rx = 1 $ / 1024/1024; tx = 2 USD / 1024/1024; print "Odebrano" rx "MB / s, wysłano" tx "MB / s"} '
Michael Böckling
1
@BuddyCasino Jestem pewien, że mógłbyś to zrobić bezpośrednio w let BWRX=($RX-$RXPREV)/1024(chociaż nie mam teraz nic do przetestowania)
Matthieu
Wygląda na to, że masz rację, z jakiegoś powodu nie zadziałało, kiedy próbowałem to zrobić w ten sposób, więc zdecydowałem się na awk, ale myślę, że to była tylko literówka.
Michael Böckling
15

Oprócz iftop i iptraf sprawdź także:

  • bwm-ng (Monitor przepustowości nowej generacji)

i / lub

  • cbm (Miernik przepustowości kolorów)

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

miguel
źródło
2
bwm-ng rocks: do uruchomienia nie jest wymagane żadne specjalne pozwolenie.
Rudy Matela
Używam go już od lat iw większości przypadków uważam, że jego interfejs jest znacznie bardziej przejrzysty niż na przykład iftop.
Dr Jan-Philip Gehrcke
6

Jeśli chcesz tylko uzyskać wartość, możesz użyć prostego onelinera powłoki w następujący sposób:

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

Pokaże ci średnią "odebranych bajtów na sekundę" przez okres 10 sekund (możesz zmienić okres, zmieniając S=10parametr, i możesz zmierzyć przesłane BPS zamiast odebranych używając tx_byteszamiast rx_bytes). Nie zapomnij się zmienićeth0 urządzenia sieciowego, które chcesz monitorować.

Oczywiście nie jesteś ograniczony do wyświetlania średniej stawki (jak wspomniano w innych odpowiedziach, istnieją inne narzędzia, które pokażą Ci znacznie ładniejsze wyniki), ale to rozwiązanie jest łatwe do skryptu, aby robić inne rzeczy.

Na przykład następujący skrypt powłoki (podzielony na wiele wierszy w celu zwiększenia czytelności) wykona proces offlineimap tylko wtedy, gdy średnia 5-minutowa prędkość transmisji spadnie poniżej 10 kB / s (przypuszczalnie, gdy zakończy się inny proces pochłaniający przepustowość):

#!/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

Zauważ, że /sys/class/...jest to specyficzne dla Linuksa (co jest w porządku, ponieważ przesyłający wybrał linuxtag) i wymaga niearchaicznego jądra. Sam kod powłoki jest kompatybilny z / bin / sh (więc nie tylko bash, ale także dash i inne implementacje / bin / sh będą działać), a / bin / sh to coś, co jest naprawdę zawsze instalowane.

Matija Nalis
źródło
5

Podoba mi się, iptrafale prawdopodobnie musisz go zainstalować i wydaje się, że nie jest już aktywnie obsługiwany.

Johannes Weiss
źródło
1
Jest iptraf-ng, jakieś sugestie dotyczące różnic między nimi?
Felix Yan
1
iptraf-ng to rozwidlenie oryginalnego projektu. Powinien mieć wszystkie oryginalne funkcje i więcej.
Rudy Matela
2

Uważam, że dstat jest całkiem dobry. Musi być jednak zainstalowany. Zapewnia o wiele więcej informacji niż potrzebujesz. Netstat poda stawki za pakiety, ale nie poda również przepustowości. netstat -s


źródło
0

Nie mogłem zmusić skryptu parsowania ifconfig do pracy dla mnie na AMI, więc uruchomiłem to mierząc otrzymany ruch uśredniony w ciągu 10 sekund

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"

Przepraszam, to zawsze takie tanie i paskudne, ale zadziałało!

rolandw
źródło
0
ifconfig -a
ip -d link
ls -l /sys/class/net/ (physical and virtual devices)
route -n

Jeśli chcesz uzyskać wynik (ifconfig -a) w formacie json, możesz użyć tego (python)

Yahya Yahyaoui
źródło
Żadne z tych raportów nie generuje statystyk przepustowości?
Dzamo Norton