it-swarm.com.de

Wie kann ich die aktuellen Durchsatzstatistiken für Netzwerkschnittstellen unter Linux / UNIX abrufen?

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

Am besten wäre dies, ohne etwas anderes als das zu installieren, was standardmäßig auf dem System verfügbar ist.

88
DavidM

Sie können die Ausgabe von ifconfig analysieren.

19
Mehrdad Afshari

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 iftop Auf Fedora installieren.

155
Philip Durbin

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
101
filler

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 gerade aus /sys/class/net/$dev/statistics und druckt jede Sekunde 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 ---------^
43
ephemient

Sie können / proc/net/dev analysieren.

28
codelogic

nload ist ein großartiges Tool zur Überwachung der Bandbreite in Echtzeit und kann mit Sudo apt-get install nload einfach in Ubuntu oder Debian 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 exzellentes Tool ist iftop , das auch 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!

27
Jamieson Becker
  • dstat - Kombiniert vmstat-, iostat-, ifstat-, netstat-Informationen und mehr
  • iftop - Erstaunliches Dienstprogramm für die Netzwerkbandbreite, mit dem Sie analysieren können, was wirklich auf Ihrem eth geschieht
  • netio - Misst den Nettodurchsatz eines Netzwerks über TCP/IP
  • inq - CLI-Hilfsprogramm zur 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-Sendung auf dem angegebenen Netzwerkgerät (standardmäßig eth0) und meldet eine alte und neue IP-Adressenzuordnung zu einer MAC-Adresse.
  • EtherApe - ist ein grafischer Netzwerkmonitor für Unix, der nach dem Vorbild von etherman erstellt wurde. Mit den Modi Link Layer, IP und TCP) wird die Netzwerkaktivität grafisch angezeigt.
  • iptraf - Ein IP-Verkehrsmonitor, der Informationen zum IP-Verkehr anzeigt, der über Ihr Netzwerk übertragen wird.

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

25
Xoroz

Dafür habe ich ein weiteres Quick'n'Dirty-Bash-Skript:

#!/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 zieht in Betracht, dass sleep 1 dauert eigentlich genau eine Sekunde, was nicht stimmt, aber für eine grobe Bandbreitenbewertung gut genug ist.

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

16
Matthieu

Überprüfen Sie neben iftop und iptraf auch:

  • bwm-ng (Bandbreitenmonitor der nächsten Generation)

und/oder

  • cbm (Farbbandbreitenmesser)

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

15
miguel

Wenn Sie nur den Wert erhalten möchten, können Sie einen einfachen Shell-Oneliner wie diesen 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 den Parameter S=10 Ändern, und Sie können übertragene BPS anstelle empfangener BPS mit tx_bytes Messen. anstelle von rx_bytes). Vergessen Sie nicht, eth0 In das zu überwachende Netzwerkgerät zu ändern.

Natürlich können Sie nicht nur die Durchschnittsrate anzeigen (wie in anderen Antworten erwähnt, gibt es andere Tools, mit denen Sie eine viel schönere Ausgabe erhalten), aber diese Lösung lässt sich auch problemlos mit Skripts ausführen, um andere Aufgaben zu erledigen.

Das folgende Shell-Skript (aus Gründen der Lesbarkeit in mehrere Zeilen unterteilt) führt den Offline-Kartenprozess nur dann 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 /sys/class/... Linux-spezifisch ist (was in Ordnung ist, da der Absender das linux -Tag gewählt hat) und einen nicht-archaischen Kernel benötigt. Der Shell-Code selbst ist/bin/sh-kompatibel (daher funktionieren nicht nur Bash, sondern auch Dash und andere/bin/sh-Implementierungen), und/bin/sh ist wirklich immer installiert.

6
Matija Nalis

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

5
Johannes Weiss

Sie können iperf verwenden, um die Netzwerkleistung zu bewerten ( maximaler Durchsatz ). Siehe folgende Links für Details:

http://en.wikipedia.org/wiki/Iperf

https://iperf.fr/

https://code.google.com/p/iperf/

2
ssh

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

2
Sav

Ich konnte das Skript zum Parsen von ifconfig auf einem AMI nicht für mich zum Laufen bringen, also funktionierte dies beim Messen des empfangenen Datenverkehrs im Durchschnitt über 10 Sekunden

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"

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

0
rolandw
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 möchten, können Sie this (python) verwenden.

0
Yahya Yahyaoui