Wie kann ich die aktuellen Durchsatzstatistiken der Netzwerkschnittstelle unter Linux / UNIX abrufen? [geschlossen]


93

Tools wie MRTG bieten Diagramme zum Netzwerkdurchsatz / zur Bandbreite für die aktuelle Netzwerkauslastung auf bestimmten Schnittstellen wie eth0. Wie kann ich diese Informationen unter Linux / UNIX über die Befehlszeile zurückgeben?

Dies wäre vorzugsweise ohne Installation von etwas anderem als dem, was standardmäßig auf dem System verfügbar ist.


Erwägen Sie, Ihre Antwort angesichts der iftop-Details zu ändern.
Grau

Schade, dass diese Frage geschlossen wurde, weil ich hinzufügen wollte, bmonwas hilfreich ist. github.com/tgraf/bmon#screenshots
Daniel F

Antworten:


18

Sie können die Ausgabe von analysieren ifconfig


Dies setzt voraus, dass Root-Zugriff verfügbar ist
Lionel

20
(normalerweise) Sie müssen nicht root sein, um dies auszuführen ...
confiq

3
Ein schlechter Bash-Einzeiler, der genau das tut (und mich nach BSD netstat (1) -Verhalten 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
sehnen lässt

4
Das Parsen der ifconfig-Ausgabe ist fehleranfällig, zum Beispiel führt der obige -bash: export: Einzeiler zu Überläufen: 0 ': keine gültige Kennung` für mich auf RHEL6. Das Parsen /sys/class/net/$dev/statistics(siehe das Perl-Skript in der Antwort von @ephemient) funktioniert direkt viel besser.
Nickolay

1
sollte nicht die akzeptierte Antwort sein, da sie fehleranfällig und nicht praktisch ist. Es gibt Dienstprogramme, die die Arbeit viel besser erledigen. Scrollen Sie nach unten, um dies herauszufinden.
Eric

156

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

Ich weiß nicht, wie "Standard" iftop ist, aber ich konnte es mit yum install iftopauf Fedora installieren .


13
iftopkann auch auf einer sauberen Ubuntu-Installation einfach installiert werden : apt-get install iftop.
Tom Marthenal

1
und auf Arch Linux mitpacman -S iftop
Benjamin Kaiser

3
seufz Nun, ich denke, das bedeutet, dass ich das Lernen, die tcpdumpAusgabe erneut zu analysieren, aufschiebe . Danke diriftop und wireshark, dass ich so faul sein darf.
Parthian Shot

1
Beachten Sie, dass die Frage nach Statistiken pro Schnittstelle gestellt wurde, aber iftop detaillierter ist und Statistiken pro Verbindung enthält.
Joachim Breitner

1
Beachten iftopSie für Benutzer ohne Administratorrechte, dass eine Installation erforderlich ist (Sie können sie nicht einmal ohne libpcapInstallation erstellen ), und auf der Homepage steht, dass sie ausgeführt werden muss root.
Nickolay

109

Hast du Sar? Wahrscheinlich ja, wenn Sie RHEL / CentOS verwenden.

Keine Notwendigkeit für priv, dorky Binärdateien, hacky Skripte, libpcap usw. 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
Für kB / s Senden und Empfangen: sar -n DEV 1 3 | grep $ IFACE | Schwanz -n1 | awk '{print $ 5, $ 6}'
Lionel

2
@ Lionel - minor nit: Sie meinten Empfangen und Senden in dieser Reihenfolge. :-)
Lacinato

Sar ist ein schönes altes Werkzeug. Es ist eine weitere Binärdatei oder vier und verschiedene Cronjobs zum Sammeln :)
XTL

1
Laufen Centos7, kein Sar.
Josh Usre

google.com/webhp?q=sar%20centos%207 ... eine schnelle Google-Suche liefert viele Informationen.
Mike S

44

Ich habe dieses dumme Skript vor langer Zeit geschrieben, es hängt nur von Perl und Linux ≥ 2,6 ab:

#!/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 @_ = <>;
    @_;
}

Es liest nur aus /sys/class/net/$dev/statisticsjeder Sekunde und druckt die aktuellen Zahlen und die durchschnittliche Änderungsrate aus:

$ ./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
Das ist ein tolles kleines Drehbuch, danke Mann!
Gui13

1
Ich musste "8s" und "8.8s" durch "16s" und "16.16s" ersetzen, damit die Zahlen passen.
Nickolay

Wenn ich richtig verstehe, um das Endergebnis genau zu machen (zum Beispiel in Live-Statistiken), muss es jede Sekunde ausgeführt werden /proc/net/devoder Daten auf Basis pro Sekunde irgendwie anders berechnen?
Ilia Rostovtsev

31

nload ist ein großartiges Tool zur Überwachung der Bandbreite in Echtzeit und kann problemlos in Ubuntu oder Debian mit sudo apt-get install nload installiert werden.

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

Ein weiteres hervorragendes Werkzeug ist iftop , das ebenfalls leicht zu bekommen ist:

             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

Vergessen Sie nicht die klassischen und leistungsstarken Dienstprogramme sar und netstat auf älteren * nix!


2
Dies sollte die akzeptierte Antwort sein
Eric


25
  • dstat - Kombiniert vmstat-, iostat-, ifstat-, netstat-Informationen und mehr
  • iftop - Erstaunliches Dienstprogramm zur Netzwerkbandbreite, um zu analysieren, was wirklich auf Ihrem eth passiert
  • netio - Misst den Nettodurchsatz eines Netzwerks über TCP / IP
  • inq- Dienstprogramm zur CLI-Fehlerbehebung, das Informationen zum Speicher anzeigt, normalerweise Symmetrix. Standardmäßig gibt INQ den Gerätenamen, die Symmetrix-ID, die Symmetrix-LUN und die Kapazität zurück.
  • send_arp - Sendet eine Arp-Übertragung auf dem angegebenen Netzwerkgerät (standardmäßig eth0) und meldet eine alte und eine neue IP-Adresszuordnung an eine MAC-Adresse.
  • EtherApe- ist ein grafischer Netzwerkmonitor für Unix nach dem Vorbild von Etherman. Mit den Verbindungsschicht-, IP- und TCP-Modi wird die Netzwerkaktivität grafisch angezeigt.
  • iptraf - Ein IP-Verkehrsmonitor, der Informationen zum IP-Verkehr über Ihr Netzwerk anzeigt.

Weitere Details: http://felipeferreira.net/?p=1194


1
Vielen Dank für die einfache Liste und dass dies meistens Standarddienstprogramme sind. Insbesondere konnte ich aus iftop eine sehr schöne Spitzenbandbreite herausholen, ohne etwas zu installieren.
Foliovision

16

Dafür habe ich noch ein schnelles Bash-Skript bekommen:

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

Es wird darüber nachgedacht sleep 1 tatsächlich genau eine Sekunde dauern wird, was nicht stimmt, aber gut genug für eine grobe Bandbreitenbewertung ist.

Danke an @ephemient für das /sys/class/net/<interface>! :) :)


3
Wenn Sie Ihre Zahlen als MB / s formatieren möchten, tauschen Sie die Zeile "echo" folgendermaßen aus: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; print "Received" rx "MB / s, Gesendet" tx "MB / s"} '
Michael Böckling

1
@BuddyCasino Ich bin sicher, Sie könnten es direkt in der let BWRX=($RX-$RXPREV)/1024(obwohl ich jetzt nichts zu testen habe)
Matthieu

Es scheint, Sie haben Recht, es hat aus irgendeinem Grund nicht funktioniert, als ich es so versuchte, also habe ich mich für awk entschieden, aber ich denke, es war nur ein Tippfehler.
Michael Böckling


6

Wenn Sie nur den Wert erhalten möchten, können Sie einen einfachen Shell-Oneliner wie folgt verwenden:

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

Es zeigt Ihnen den Durchschnitt der "empfangenen Bytes pro Sekunde" für einen Zeitraum von 10 Sekunden (Sie können den Zeitraum ändern, indem Sie die S=10Parameter ändern , und Sie können den übertragenen BPS anstelle des empfangenen BPS messen, indem Sie tx_bytesanstelle von verwenden rx_bytes). Vergessen Sie nicht, zu eth0dem Netzwerkgerät zu wechseln , das Sie überwachen möchten.

Natürlich sind Sie nicht darauf beschränkt, die Durchschnittsrate anzuzeigen (wie in anderen Antworten erwähnt, gibt es andere Tools, die Ihnen eine viel schönere Ausgabe zeigen), aber diese Lösung ist leicht skriptfähig, um andere Dinge zu tun.

Beispielsweise führt das folgende Shell-Skript (aus Gründen der Lesbarkeit in mehrere Zeilen aufgeteilt) den Offlineimap-Prozess nur aus, wenn die durchschnittliche Übertragungsgeschwindigkeit von 5 Minuten unter 10 kBPS fällt (vermutlich, wenn ein anderer bandbreitenintensiver Prozess abgeschlossen ist):

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

Beachten Sie, dass dies /sys/class/...Linux-spezifisch ist (was in Ordnung ist, da der Übermittler das linuxTag ausgewählt hat) und einen nicht archaischen Kernel benötigt. Der Shell-Code selbst ist / bin / sh-kompatibel (damit nicht nur Bash, sondern auch Dash- und andere / bin / sh-Implementierungen funktionieren) und / bin / sh ist wirklich immer installiert.


5

Ich mag, iptrafaber Sie müssen es wahrscheinlich installieren und es scheint nicht mehr aktiv gewartet zu werden.


1
Es gibt ein iptraf-ng, irgendwelche Vorschläge zu Unterschieden zwischen ihnen?
Felix Yan

1
iptraf-ng ist eine Abzweigung des ursprünglichen Projekts. Es sollte alle ursprünglichen Funktionen mit mehr haben.
Rudy Matela

2

Ich finde dstat ziemlich gut. Muss allerdings installiert werden. Gibt Ihnen viel mehr Informationen als Sie brauchen. Netstat gibt Ihnen Paketraten, aber auch keine Bandbreite. netstat -s



0

Ich konnte das Parse-ifconfig-Skript nicht für mich auf einem AMI verwenden, sodass es funktioniert, um den empfangenen Datenverkehr im Durchschnitt über 10 Sekunden zu messen

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"

Sorry, es ist immer so billig und böse, aber es hat funktioniert!


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

Wenn Sie die Ausgabe von (ifconfig -a) im JSON-Format wünschen, können Sie diese (Python) verwenden.


Keine dieser Berichtsdurchsatzstatistiken?
Dzamo Norton
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.