Comment puis-je obtenir les statistiques actuelles de débit d'interface réseau sous Linux / UNIX? [fermé]

StackOverflow https://stackoverflow.com/questions/596590

  •  09-09-2019
  •  | 
  •  

Question

Des outils tels que MRTG offrent un débit de réseau / graphiques bande passante pour l'utilisation actuelle du réseau sur des interfaces spécifiques, telles que eth0. Comment puis-je retourner ces informations à la ligne de commande sous Linux / UNIX?

De préférence, ce serait sans installer quoi que ce soit autre que ce qui est disponible sur le système standard.

Était-ce utile?

La solution

Vous pouvez analyser la sortie de ifconfig

Autres conseils

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

Je ne sais pas comment « standard » est iftop, mais j'ai pu l'installer avec yum install iftop sur Fedora.

Got sar? Probablement oui si vous êtes en utilisant RHEL / CentOS.

Pas besoin de PRIV, binaires dorky, scripts aki, libpcap, etc. 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

J'ai écrit ce script muet depuis longtemps, cela dépend de rien d'autre que Perl et 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 @_ = <>;
    @_;
}

Il se lit seulement de /sys/class/net/$dev/statistics chaque seconde, et imprime les numéros actuels et le taux moyen de variation:

$ ./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 ---------^

Vous pouvez analyser / proc / net / dev .

nload est un excellent outil pour la bande passante de surveillance en temps réel et facile à installer dans Ubuntu ou Debian avec 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 autre excellent outil est iftop , facilement apt-get'able:

             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

Ne pas oublier les utilitaires classiques sar et puissants et netstat sur plus * nix!

  • dstat - Combine vmstat, iostat, ifstat, informations netstat et plus
  • iftop - utilitaire de bande passante réseau incroyable d'analyser ce qui se passe réellement sur votre eth
  • netio - Mesure le débit net d'un réseau via TCP / IP
  • inq - utilitaire de dépannage CLI qui affiche des informations sur le stockage, généralement Symmetrix. Par défaut, INQ retourne le nom du périphérique, ID Symmetrix, LUN Symmetrix, et la capacité.
  • send_arp - Envoie une émission arp sur le périphérique réseau spécifié (par défaut) à eth0, signaler un ancien et le nouveau mappage d'adresses IP à une adresse MAC
  • .
  • EtherApe - est un moniteur de réseau graphique pour Unix calquée sur etherman. Mettant en vedette la couche de liaison, les modes IP et TCP, il affiche l'activité réseau sous forme graphique.
  • iptraf -. Un moniteur de trafic IP qui affiche des informations sur le trafic IP qui passe sur votre réseau

Plus de détails: http://felipeferreira.net/?p=1194

Je suis un autre script bash quick'n'dirty pour que:

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

Il est en considérant que sleep 1 va réellement durer exactement une seconde, ce qui est vrai, mais assez bon pour une évaluation de la bande passante brute.

Merci à @ephemient pour le /sys/class/net/<interface>! :)

En plus iftop et iptraf, vérifier aussi:

  • bwm-ng (Bandwidth Monitor Next Generation)

et / ou

  • cbm (couleur Bandwidth Meter)

ref: http: //www.powercram. com / 2010/01 / bande passante surveillance-outils--ubuntu.html

Si vous voulez juste pour obtenir la valeur, vous pouvez utiliser simple shell oneliner comme ceci:

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

Il vous montrera la moyenne « reçu octets par seconde » pour la période de 10 secondes (vous pouvez changer la période en changeant le paramètre de S=10, et vous pouvez mesurer transmis BPS au lieu de réception BPS à l'aide tx_bytes au lieu de rx_bytes). Ne pas oublier de changer eth0 au périphérique réseau que vous souhaitez surveiller.

Bien sûr, vous n'êtes pas limité à l'affichage du taux moyen (comme mentionné dans d'autres réponses, il existe d'autres outils qui vous montrera beaucoup plus agréable sortie), mais cette solution est facilement scriptable pour faire d'autres choses.

Par exemple, le script shell suivant (divisé en plusieurs lignes pour une meilleure lisibilité) exécutera offlineimap processus seulement lorsque 5 minutes vitesse de transmission moyenne descend en dessous de 10kbps (probablement, quand un autre processus consommant de la bande passante se termine):

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

Notez que /sys/class/... est spécifique à Linux (qui est ok comme Déposant a choisir tag linux), et a besoin de noyau non archaïque. Code Shell lui-même est / bin / sh compatible (donc non seulement bash, mais tableau de bord et d'autres / implémentations bin / sh travail) et / bin / sh est quelque chose qui est vraiment toujours installé.

J'aime iptraf mais vous avez probablement l'installer et il semble ne pas être maintenu activement plus.

Je trouve dstat être assez bon. A être installé bien. vous donne beaucoup plus d'informations que vous avez besoin. Netstat vous donnera des taux de paquets, mais pas aussi BANDWITH. netstat -s

Vous pouvez utiliser iperf à la performance du réseau de référence ( débit maximum possible ). Voir ci-dessous pour visionner les détails:

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

https://iperf.fr/

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

Je ne pouvais pas obtenir le script ifconfig parse travailler pour moi un AMI donc obtenu que cela fonctionne mesurer le trafic reçu en moyenne plus de 10 secondes

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"

Désolé, il est toujours si méchant et pas cher, mais cela a fonctionné!

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

Si vous voulez que la sortie (ifconfig -a) au format JSON vous pouvez utiliser cette (python)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top