Comment puis-je obtenir les statistiques actuelles de débit d'interface réseau sous Linux / UNIX? [fermé]
-
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.
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:
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)