Comment puis-je obtenir les statistiques de débit d'interface réseau actuelles sur Linux/UNIX? [fermé]
Des outils tels que MRTG fournissent des graphiques de débit / bande passante réseau pour l'utilisation actuelle du réseau sur des interfaces spécifiques, telles que eth0. Comment puis-je retourner 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.
15 réponses
iftop does for network usage what top(1) does for CPU usage
-- http://www.ex-parrot.com/~pdw/iftop/
Je ne sais pas comment iftop est "standard", mais j'ai pu l'installer avec yum install iftop
sur Fedora.
Vous avez sar? Probablement oui si vous utilisez RHEL / CentOS.
Pas besoin de priv, binaires dorky, scripts hacky, libpcap, etc. Gagner.
$ 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 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 à partir de /sys/class/net/$dev/statistics
chaque seconde, et imprime les chiffres actuels et le taux de variation moyen:
$ ./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 ---------^
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 , aussi facilement apt-geta'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 sar et netstat classiques et puissants sur les anciens * nix!
-
dstat
- combine les informations vmstat, iostat, ifstat, netstat et plus -
iftop
- incroyable utilitaire de bande passante réseau pour analyser ce qui se passe vraiment 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é (eth0 par défaut), signalant un mappage d'adresse IP ancienne et nouvelle à une adresse MAC. -
EtherApe
- est un moniteur réseau graphique pour Unix inspiré d'etherman. Avec couche de liaison, IP et TCP modes, il affiche l'activité du réseau graphiquement. -
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
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 De Couleur)
Réf: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html
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
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>
! :)
J'aime iptraf
mais vous avez probablement l'installer et qu'il semble ne pas être maintenu activement plus.
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 des "octets reçus par seconde" pour une période de 10 secondes (vous pouvez changer de période en changeant le paramètre S=10
, et vous pouvez mesurer les BPS transmis au lieu des bps reçus en utilisant tx_bytes
au lieu de rx_bytes
). N'oubliez pas de changer eth0
en périphérique réseau que vous souhaitez surveiller.
Bien sûr, vous n'êtes pas limité à afficher le 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 de 5 minutes tombe en dessous de 10kBPS (probablement lorsque d'autres processus consommant de la bande passante se terminent):
#!/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 (ce qui est correct car l'expéditeur a choisi la balise linux
), et a besoin non archaïque du noyau. Le code Shell lui-même est compatible/bin /sh (donc non seulement bash, mais dash et d'autres implémentations/bin /sh fonctionneront) et/bin / sh est quelque chose qui est vraiment toujours installé.
Vous pouvez utiliser iperf pour évaluer les performances du réseau (Débit maximal possible ). Voir les liens suivants pour plus de détails:
Je n'ai pas pu faire fonctionner le script parse ifconfig pour moi sur un AMI, donc 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 aussi bon marché et méchant mais ça a marché!
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 ce (python)