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

94

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

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

Davidmytton
la source
Pensez à changer de réponse compte tenu des détails iftop.
Gris
Dommage que cette question ait été fermée, car je voulais ajouter bmonce qui est utile. github.com/tgraf/bmon#screenshots
Daniel F

Réponses:

18

Vous pouvez analyser la sortie de ifconfig

Mehrdad Afshari
la source
Cela suppose que l'accès root est disponible
Lionel
20
(généralement) Vous n'avez pas besoin d'être root pour exécuter ceci ...
confiq
3
Un bad bash one-liner qui fait exactement cela (et me donne 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
envie de
4
L'analyse de la sortie d'ifconfig est sujette aux erreurs, par exemple, la ligne unique ci-dessus entraîne des -bash: export: dépassements: 0 ': pas un identifiant valide' pour moi sur RHEL6. L'analyse /sys/class/net/$dev/statistics(voir le script perl dans @ephemient answer) fonctionne directement beaucoup mieux.
Nickolay
1
ne devrait pas être la réponse acceptée car elle est sujette aux erreurs et n'est pas pratique. il existe des utilitaires qui font beaucoup mieux le travail, faites défiler vers le bas pour le découvrir.
Eric
156

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

Je ne sais pas à quel point iftop est "standard", mais j'ai pu l'installer avec yum install iftopsur Fedora.

Philip Durbin
la source
13
iftoppeut être installé sur une installation propre Ubuntu facilement ainsi: apt-get install iftop.
Tom Marthenal
1
et sur Arch Linux avecpacman -S iftop
Benjamin Kaiser
3
soupir Eh bien, je suppose que cela signifie que je repousse l'apprentissage de l'analyse de la tcpdumpsortie. Merci iftopet wireshark, pour me permettre d'être aussi paresseux.
Tir parthe du
1
Notez que la question demandait des statistiques par interface, mais iftopest plus détaillée et donne des statistiques par connexion.
Joachim Breitner
1
Pour ceux qui n'ont pas de droits d'administrateur, notez que cela iftopnécessite une installation (vous ne pourrez même pas le construire sans l' libpcapinstallation) et sa page d'accueil indique qu'il doit être exécuté sous root.
Nickolay
109

Vous avez sar? Probablement oui si vous utilisez RHEL / CentOS.

Pas besoin de priv, de binaires dorky, de scripts hacky, de 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
remplisseur
la source
11
Pour ko / s émission et réception: sar -n DEV 1 3 | grep $ IFACE | tail -n1 | awk '{print $ 5, $ 6}'
Lionel
2
@Lionel - minor nit: vous vouliez dire recevoir et transmettre, dans cet ordre. :-)
lacinato
Sar est un bel outil ancien. C'est un autre binaire ou quatre cronjobs assortis pour la collecte, cependant :)
XTL
1
Exécution de Centos7, pas de sar.
Josh Usre
google.com/webhp?q=sar%20centos%207 ... une recherche rapide sur Google permettra d'obtenir de nombreuses informations.
Mike S
44

J'ai écrit ce script stupide il y a longtemps, cela ne dépend que de 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 lit juste de /sys/class/net/$dev/statistics chaque seconde et imprime les chiffres actuels et le taux moyen de changement:

$ ./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 ---------^
éphémère
la source
5
C'est un petit script génial, merci mec!
Gui13
1
J'ai dû remplacer "8s" et "8.8s" par "16s" et "16.16s" pour que les nombres correspondent.
Nickolay
Si je comprends bien, pour que le résultat final soit précis (par exemple dans les statistiques en direct), il doit fonctionner toutes les secondes /proc/net/devou calculer les données par / seconde de base d'une manière ou d'une autre?
Ilia Rostovtsev
31

nload est un excellent outil pour surveiller la bande passante en temps réel et facilement installé 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 , également 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

N'oubliez pas les utilitaires classiques et puissants sar et netstat sur les anciens * nix!

erreur fatale
la source
2
cela devrait être la réponse acceptée
Eric
28

Vous pouvez analyser / proc / net / dev .

codelogic
la source
3
/ proc n'existe pas sur tous les UNIX.
Mehrdad Afshari
31
C'est vrai, juste supposé en raison de la balise Linux, que OP n'était intéressé que par Linux.
codelogic
il n'y a pas de tel fichier sur le noyau 3.17
Tomas Tomecek
4
Semble être équivalent à l'analyse /sys/class/net/$dev/statisticscomme dans le script d'éphémient.
Nickolay
25
  • dstat - Combine les informations vmstat, iostat, ifstat, netstat et plus
  • iftop - Utilitaire de bande passante réseau incroyable pour 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 renvoie le nom du périphérique, l'ID Symmetrix, le LUN Symmetrix et la capacité.
  • send_arp - Envoie une diffusion arp sur le périphérique réseau spécifié (par défaut eth0), rapportant un ancien et un nouveau mappage d'adresse IP à une adresse MAC.
  • EtherApe- est un moniteur de réseau graphique pour Unix modelé sur Etherman. Doté de la couche liaison, des modes IP et TCP, il affiche graphiquement l'activité du réseau.
  • iptraf - Un moniteur de trafic IP qui affiche des informations sur le trafic IP passant sur votre réseau.

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

Xoroz
la source
1
Merci pour la liste simple et que ce sont principalement des utilitaires par défaut. En particulier, j'ai pu obtenir une très belle bande passante de pointe d'iftop sans rien installer.
Foliovision
16

J'ai un autre script quick'n'dirty bash pour ça:

#!/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 considère que sleep 1 cela durera exactement une seconde, ce qui n'est pas vrai, mais assez bon pour une évaluation approximative de la bande passante.

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

Matthieu
la source
3
Si vous souhaitez formater vos nombres en Mo / s, remplacez la ligne "echo" par ceci: echo $ BWRX $ BWTX | awk '{rx = 1 $ / 1024/1024; tx = 2 $ / 1024/1024; print "Reçu" rx "Mo / s, Envoyé" tx "Mo / s"} '
Michael Böckling
1
@BuddyCasino Je suis sûr que vous pourriez le faire directement dans le let BWRX=($RX-$RXPREV)/1024(même si je n'ai rien pour le tester maintenant)
Matthieu
Il semble que vous ayez raison, cela n'a pas fonctionné pour une raison quelconque lorsque j'ai essayé de le faire de cette façon, alors je me suis contenté de awk, mais je suppose que c'était juste une faute de frappe.
Michael Böckling
15

Outre iftop et iptraf, vérifiez également:

  • bwm-ng (Moniteur de bande passante nouvelle génération)

et / ou

  • cbm (Mètre de bande passante couleur)

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

miguel
la source
2
bwm-ng rocks: il n'a besoin d'aucune autorisation spéciale pour être exécuté.
Rudy Matela
Je l'utilise depuis des années déjà et dans la plupart des cas d'utilisation, je trouve son interface beaucoup plus claire que celle d'iftop par exemple.
Dr.Jan-Philip Gehrcke
6

Si vous voulez juste obtenir la valeur, vous pouvez utiliser un 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 "octets reçus par seconde" pour une période de 10 secondes (vous pouvez changer la période en changeant le S=10paramètre, et vous pouvez mesurer le BPS transmis au lieu du BPS reçu en utilisant tx_bytesau lieu de rx_bytes). N'oubliez pas de passer eth0au 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 montreront une sortie beaucoup plus agréable), mais cette solution est facilement scriptable pour faire d'autres choses.

Par exemple, le script shell suivant (divisé en plusieurs lignes pour plus de lisibilité) exécutera le processus offlineimap uniquement lorsque la vitesse de transmission moyenne sur 5 minutes descend en dessous de 10 kBPS (vraisemblablement, à la fin d'un autre processus consommateur de bande passante):

#!/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/...c'est spécifique à Linux (ce qui est correct car l'expéditeur a choisi la linuxbalise), et nécessite un noyau non archaïque. Le code shell lui-même est compatible avec / bin / sh (donc non seulement bash, mais dash et autres implémentations / bin / sh fonctionneront) et / bin / sh est quelque chose qui est vraiment toujours installé.

Matija Nalis
la source
5

J'aime iptrafmais vous devez probablement l'installer et il semble ne plus être entretenu activement.

Johannes Weiss
la source
1
Il y a un iptraf-ng, des suggestions sur les différences entre eux?
Felix Yan
1
iptraf-ng est un fork du projet original. Il devrait avoir toutes les fonctionnalités d'origine avec plus.
Rudy Matela
2

Je trouve que dstat est assez bon. Doit être installé cependant. Vous donne bien plus d'informations que nécessaire. Netstat vous donnera des tarifs de paquets mais pas de bande passante également. netstat -s


la source
0

Je n'ai pas pu faire fonctionner le script d'analyse ifconfig pour moi sur une AMI, alors cela a fonctionné en mesurant le trafic reçu en moyenne sur 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é, c'est toujours si bon marché et méchant mais cela a fonctionné!

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

Si vous voulez la sortie de (ifconfig -a) au format json, vous pouvez utiliser ceci (python)

Yahya Yahyaoui
la source
Aucun de ces rapports de statistiques de débit?
Dzamo Norton