Des outils tels que MRTG fournissent des graphiques de débit réseau/bande passante pour l'utilisation actuelle du réseau sur des interfaces spécifiques, telles que eth0. Comment puis-je renvoyer ces informations à la ligne de commande sous Linux/UNIX?
De préférence, cela se fera sans rien installer d'autre que ce qui est disponible en standard sur le système.
Vous pouvez analyser la sortie de ifconfig
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" iftop est, 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. 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 idiot 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
toutes les secondes et affiche 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 ---------^
Vous pouvez analyser / proc/net/dev .
nload est un excellent outil pour surveiller la bande passante en temps réel et s’installer facilement 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-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 sar et netstat classiques et puissants sur les anciens * nix!
dstat
- Combine les informations vmstat, iostat, ifstat, netstat et plusiftop
- Incroyable utilitaire de bande passante réseau pour analyser ce qui se passe réellement sur votre ethnetio
- Mesure le débit net d'un réseau via TCP/IPinq
- Utilitaire de dépannage de la CLI affichant des informations sur le stockage, généralement Symmetrix. Par défaut, INQ renvoie le nom du périphérique, l'identifiant Symmetrix, le numéro d'unité logique Symmetrix et la capacité.send_arp
- Envoie une diffusion arp sur le périphérique réseau spécifié (par défaut, eth0), en signalant le mappage d'une adresse IP ancienne et une nouvelle adresse MAC en une adresse MAC.EtherApe
- est un moniteur réseau graphique pour Unix modélisé d'après etherman. Comportant la couche de liaison, l’IP et les modes TCP), il affiche graphiquement l’activité du réseau.iptraf
- Moniteur de trafic IP qui affiche des informations sur le trafic IP transitant sur votre réseau.Plus de détails: http://felipeferreira.net/?p=1194
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
C'est en considérant que sleep 1
durera en réalité exactement une seconde, ce qui est inexact, mais suffisant pour une évaluation approximative de la bande passante.
Merci à @ephemient pour le /sys/class/net/<interface>
! :)
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)ref: http://www.powercram.com/2010/01/bandwidth-monitoring-tools-for-ubuntu.html
Si vous voulez juste obtenir la valeur, vous pouvez utiliser un simple shell Shell 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 de période en changeant S=10
paramètre, et vous pouvez mesurer le BPS transmis au lieu du BPS reçu en utilisant tx_bytes
au lieu de rx_bytes
). N'oubliez pas de changer eth0
vers le 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 la lisibilité) n'exécutera le processus offlineimap que lorsque la vitesse de transmission moyenne sur 5 minutes sera inférieure à 10kBPS (vraisemblablement, lorsqu'un autre processus consommateur de bande passante se terminera):
#!/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’émetteur a choisi la balise linux
) 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 d'autres implémentations de/bin/sh fonctionneront) et/bin/sh est quelque chose qui est vraiment toujours installé.
J'aime iptraf
mais vous devez probablement l’installer et il semble ne plus être maintenu activement.
Vous pouvez utiliser iperf pour évaluer les performances réseau ( débit maximal possible ). Voir les liens suivants pour plus de détails:
Je trouve que dstat est plutôt bon. Doit être installé si. Vous donne plus d'informations que vous avez besoin. Netstat vous donnera des débits de paquets mais pas de bande passante également. netstat -s
Je ne pouvais pas faire en sorte que le script parse ifconfig fonctionne pour moi sur une AMI.
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 cela a fonctionné!
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 this (python)