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.


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


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.


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

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 ---------^

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!


2
to powinna być akceptowana odpowiedź
Eric


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


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>! :)


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


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.


5

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


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



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!


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)


Żadne z tych raportów nie generuje statystyk przepustowości?
Dzamo Norton
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.