Come posso ottenere le statistiche di throughput dell'interfaccia di rete corrente su Linux / UNIX? [chiuso]


94

Strumenti come MRTG forniscono grafici di throughput / larghezza di banda della rete per l'utilizzo corrente della rete su interfacce specifiche, come eth0. Come posso restituire queste informazioni alla riga di comando su Linux / UNIX?

Preferibilmente questo sarebbe senza installare nient'altro che ciò che è disponibile sul sistema come standard.


Considera l'idea di cambiare la tua risposta dati i dettagli iftop.
Grey

Peccato che questa domanda sia stata chiusa, perché volevo aggiungere bmonche è utile. github.com/tgraf/bmon#screenshots
Daniel F,

Risposte:


18

Puoi analizzare l'output di ifconfig


Ciò presuppone che l'accesso root sia disponibile
Lionel

20
(di solito) Non è necessario essere root per eseguire questo ...
confiq

3
Un brutto colpo di battuta che fa esattamente questo (e mi fa desiderare il comportamento di BSD netstat (1)):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 Jeremy

4
L'analisi dell'output di ifconfig è soggetta a errori, ad esempio il risultato di -bash: export: una riga precedente in overrun: 0 ': identificatore non valido` per me su RHEL6. L'analisi /sys/class/net/$dev/statistics(vedere lo script perl in @ephemient answer) funziona direttamente molto meglio.
Nickolay

1
non dovrebbe essere la risposta accettata in quanto è soggetta a errori e non pratica. ci sono utilità che fanno il lavoro molto meglio, scorri verso il basso per scoprirlo.
Eric

156

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

Non so quanto sia "standard" iftop, ma sono stato in grado di installarlo yum install iftopsu Fedora.


13
iftoppuò essere installato su un'Ubuntu installazione pulita facilmente così: apt-get install iftop.
Tom Marthenal

1
e su Arch Linux conpacman -S iftop
Benjamin Kaiser

3
sigh Bene, immagino che questo significhi che sto rimandando di tcpdumpnuovo ad analizzare l' output. Grazie iftope wireshark, per avermi permesso di essere così pigro.
Parthian Shot il

1
Si noti che la domanda richiedeva statistiche per interfaccia, ma iftopè più dettagliata e fornisce statistiche per connessione.
Joachim Breitner

1
Per quelli senza diritti di amministratore, nota che iftoprichiede l'installazione (non sarai nemmeno in grado di crearlo senza libpcapinstallato) e la sua homepage dice che deve essere eseguito sotto root.
Nickolay

109

Got sar? Probabilmente sì, se utilizzi RHEL / CentOS.

Non c'è bisogno di priv, binari stupidi, script hacky, libpcap, ecc. 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
Per kB / s trasmissione e ricezione: sar -n DEV 1 3 | grep $ IFACE | tail -n1 | awk "{print $ 5, $ 6}"
Lionel

2
@ Lionel - pignolo minore: intendevi ricevere e trasmettere, in quest'ordine. :-)
lacinato

Sar è un adorabile vecchio strumento. È un altro binario o quattro cronjobs assortiti per la raccolta, però :)
XTL

1
Esecuzione di Centos7, nessun sar.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... una rapida ricerca su Google mostrerà molte informazioni.
Mike S,

44

Ho scritto questo stupido script molto tempo fa, non dipende da nient'altro che Perl e 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 @_ = <>;
    @_;
}

Legge solo /sys/class/net/$dev/statisticsogni secondo e stampa i numeri correnti e la velocità media di variazione:

$ ./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
È un copione fantastico, grazie amico!
Gui13

1
Ho dovuto sostituire "8s" e "8.8s" con "16s" e "16.16s" affinché i numeri si adattassero.
Nickolay

Se ho capito bene, per rendere il risultato finale accurato (ad esempio nelle statistiche in tempo reale), deve essere eseguito ogni secondo /proc/net/devo calcolare i dati in base al secondo in qualche altro modo?
Ilia Rostovtsev

31

nload è un ottimo strumento per monitorare la larghezza di banda in tempo reale e si installa facilmente in Ubuntu o Debian con 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

Un altro ottimo strumento è iftop , anch'esso facilmente ottenibile tramite apt:

             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

Non dimenticare le classiche e potenti utilità sar e netstat sui vecchi * nix!


2
questa dovrebbe essere la risposta accettata
Eric


25
  • dstat - Combina informazioni su vmstat, iostat, ifstat, netstat e altro ancora
  • iftop - Straordinaria utility per la larghezza di banda della rete per analizzare cosa sta realmente accadendo sul tuo eth
  • netio - Misura il throughput netto di una rete tramite TCP / IP
  • inq- Utilità per la risoluzione dei problemi della CLI che visualizza le informazioni sull'archiviazione, tipicamente Symmetrix. Per impostazione predefinita, INQ restituisce il nome del dispositivo, l'ID Symmetrix, il LUN Symmetrix e la capacità.
  • send_arp - Invia una trasmissione arp sul dispositivo di rete specificato (il valore predefinito è eth0), riportando una mappatura di indirizzi IP vecchia e nuova a un indirizzo MAC.
  • EtherApe- è un monitor di rete grafico per Unix modellato su etherman. Dotato di modalità link layer, IP e TCP, mostra graficamente l'attività di rete.
  • iptraf - Un monitor del traffico IP che mostra le informazioni sul traffico IP che passa sulla rete.

Maggiori dettagli: http://felipeferreira.net/?p=1194


1
Grazie per il semplice elenco e che si tratta per lo più di utilità predefinite. In particolare sono stato in grado di ottenere una larghezza di banda di picco molto buona da iftop senza installare nulla.
Foliovision

16

Ho un altro script bash veloce e sporco per questo:

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

Lo sta considerando sleep 1 in realtà durerà esattamente un secondo, il che non è vero, ma abbastanza buono per una valutazione approssimativa della larghezza di banda.

Grazie a @ephemient per il /sys/class/net/<interface>! :)


3
Se vuoi formattare i tuoi numeri come MB / s, sostituisci la riga "echo" con questo: echo $ BWRX $ BWTX | awk "{rx = $ 1/1024/1024; tx = $ 2/1024/1024; print "Ricevuto" rx "MB / s, Invia" tx "MB / s"} '
Michael Böckling

1
@ BuddyCasino Sono sicuro che potresti farlo direttamente nel let BWRX=($RX-$RXPREV)/1024(anche se non ho nulla per provarlo ora)
Matthieu

Sembra che tu abbia ragione, non ha funzionato per qualche motivo quando ho provato a farlo in quel modo, quindi mi sono accontentato di awk, ma immagino che fosse solo un errore di battitura.
Michael Böckling

15

Oltre a iftop e iptraf, controlla anche:

  • bwm-ng (Monitoraggio della larghezza di banda di nuova generazione)

e / o

  • cbm (Misuratore della larghezza di banda del colore)

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


2
bwm-ng rocks: non necessita di alcun permesso speciale per essere eseguito.
Rudy Matela

Lo uso già da anni e nella maggior parte dei casi trovo la sua interfaccia molto più chiara di quella di iftop, ad esempio.
Dr. Jan-Philip Gehrcke

6

Se vuoi solo ottenere il valore, puoi usare un semplice shell oneliner come questo:

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

Ti mostrerà la media dei "byte ricevuti al secondo" per un periodo di 10 secondi (puoi cambiare il periodo cambiando il S=10parametro, e puoi misurare i BPS trasmessi invece dei BPS ricevuti usando tx_bytesinvece di rx_bytes). Non dimenticare di passare eth0al dispositivo di rete che desideri monitorare.

Ovviamente, non sei limitato a visualizzare il tasso medio (come menzionato in altre risposte, ci sono altri strumenti che ti mostreranno un output molto più bello), ma questa soluzione è facilmente scriptabile per fare altre cose.

Ad esempio, il seguente script di shell (suddiviso in più righe per la leggibilità) eseguirà il processo offlineimap solo quando la velocità di trasmissione media di 5 minuti scende al di sotto di 10 kBPS (presumibilmente, quando termina qualche altro processo che consuma larghezza di banda):

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

Nota che /sys/class/...è specifico per Linux (il che è ok dato che il mittente ha scelto il linuxtag) e necessita di un kernel non arcaico. Il codice della shell stesso è / bin / sh compatibile (quindi non solo bash, ma dash e altre implementazioni / bin / sh funzioneranno) e / bin / sh è qualcosa che è davvero sempre installato.


5

Mi piace iptrafma probabilmente devi installarlo e sembra che non sia più mantenuto attivamente.


1
C'è un iptraf-ng, qualche suggerimento sulle differenze tra loro?
Felix Yan

1
iptraf-ng è un fork del progetto originale. Dovrebbe avere tutte le caratteristiche originali con più.
Rudy Matela

2

Trovo che dstat sia abbastanza buono. Deve essere installato però. Ti fornisce molte più informazioni di quelle di cui hai bisogno. Netstat ti darà i tassi di pacchetto ma non anche la larghezza di banda. netstat -s



0

Non sono riuscito a far funzionare lo script di analisi ifconfig per me su un'AMI, quindi l'ho fatto funzionare misurando il traffico ricevuto in media su 10 secondi

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"

Mi dispiace, è sempre così economico e cattivo ma ha funzionato!


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

Se vuoi l'output di (ifconfig -a) in formato json puoi usare questo (python)


Nessuna di queste statistiche sul rendimento del report?
Dzamo Norton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.