¿Cómo puedo obtener las estadísticas actuales de rendimiento de la interfaz de red en Linux / UNIX? [cerrado]

94

Herramientas como MRTG proporcionan gráficos de ancho de banda / rendimiento de la red para la utilización actual de la red en interfaces específicas, como eth0. ¿Cómo puedo devolver esa información en la línea de comandos en Linux / UNIX?

Preferiblemente, esto sería sin instalar nada más que lo que está disponible en el sistema como estándar.

Davidmytton
fuente
Considere cambiar su respuesta dados los detalles de iftop.
Gray
Lástima que esta pregunta se haya cerrado, porque quería agregar lo bmonque es útil. github.com/tgraf/bmon#screenshots
Daniel F

Respuestas:

18

Puede analizar la salida de ifconfig

Mehrdad Afshari
fuente
Esto supone que el acceso root está disponible
Lionel
20
(normalmente) No necesitas ser root para ejecutar esto ...
confiq
3
Una mala frase de una sola línea que hace exactamente esto (y me hace 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
añorar el
4
Analizar la salida de ifconfig es propenso a errores, por ejemplo, el de una línea anterior da como resultado -bash: export: desbordamientos: 0 ': no ​​es un identificador válido' para mí en RHEL6. El análisis /sys/class/net/$dev/statistics(ver el script de perl en @ephemient answer) funciona directamente mucho mejor.
Nickolay
1
no debería ser la respuesta aceptada, ya que es propensa a errores y no es práctica. hay utilidades que hacen el trabajo mucho mejor. Desplácese hacia abajo para averiguarlo.
Eric
156

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

No sé qué tan "estándar" es iftop, pero pude instalarlo yum install iftopen Fedora.

Philip Durbin
fuente
13
iftoppuede ser instalado en una instalación limpia de Ubuntu fácilmente, así: apt-get install iftop.
Tom Marthenal
1
y en Arch Linux conpacman -S iftop
Benjamin Kaiser
3
suspiro Bueno, supongo que esto significa que estoy posponiendo el aprendizaje de analizar la tcpdumpsalida nuevamente. Gracias iftopy wiresharkpor permitirme ser tan vago.
Disparo parto
1
Tenga en cuenta que la pregunta solicitó estadísticas por interfaz, pero iftopes más detallada y proporciona estadísticas por conexión.
Joachim Breitner
1
Para aquellos sin derechos de administrador, tenga en cuenta que iftoprequiere instalación (ni siquiera podrá construirlo sin libpcapinstalarlo) y su página de inicio dice que debe ejecutarse bajo root.
Nickolay
109

¿Tienes sar? Probablemente sí si está utilizando RHEL / CentOS.

No necesita priv, binarios tontos, 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
relleno
fuente
11
Para transmisión y recepción de kB / s: sar -n DEV 1 3 | grep $ IFACE | tail -n1 | awk '{print $ 5, $ 6}'
Lionel
2
@Lionel - liendre menor: te refieres a Recibir y Transmitir, en ese orden. :-)
lacinato
Sar es una herramienta antigua y encantadora. Sin embargo, es otro binario o cuatro cronjobs variados para recopilar :)
XTL
1
Ejecutando Centos7, sin sar.
Josh Usre
google.com/webhp?q=sar%20centos%207 ... una búsqueda rápida en Google arrojará mucha información.
Mike S
44

Escribí este guión tonto hace mucho tiempo, no depende de nada más que Perl y 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 @_ = <>;
    @_;
}

Simplemente lee /sys/class/net/$dev/statisticscada segundo e imprime los números actuales y la tasa de cambio promedio:

$ ./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 ---------^
efímero
fuente
5
¡Es un pequeño guión increíble, gracias tío!
Gui13
1
Tuve que reemplazar "8s" y "8.8s" con "16s" y "16.16s" para que los números encajaran.
Nickolay
Si entiendo bien, para que el resultado final sea preciso (por ejemplo, en las estadísticas en vivo), ¿tiene que ejecutarse cada segundo /proc/net/devo calcular los datos básicos por segundo de alguna otra manera?
Ilia Rostovtsev
31

nload es una gran herramienta para monitorear el ancho de banda en tiempo real y se instala fácilmente en Ubuntu o Debian con 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

Otra excelente herramienta es iftop , también fácilmente apto-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

¡No se olvide de las clásicas y potentes utilidades sar y netstat en las versiones anteriores de * nix!

error fatal
fuente
2
esta debería ser la respuesta aceptada
Eric
28

Puede analizar / proc / net / dev .

codelogic
fuente
3
/ proc no existe en todos los UNIX.
Mehrdad Afshari
31
Es cierto, simplemente asumido debido a la etiqueta de Linux, que OP solo estaba interesado en Linux.
codelogic
no existe tal archivo en el kernel 3.17
Tomas Tomecek
4
Parece ser equivalente a analizar /sys/class/net/$dev/statisticscomo en el script de ephemient.
Nickolay
25
  • dstat - Combina información de vmstat, iostat, ifstat, netstat y más
  • iftop - Increíble utilidad de ancho de banda de red para analizar lo que realmente está sucediendo en su eth
  • netio - Mide el rendimiento neto de una red a través de TCP / IP
  • inq- Utilidad de resolución de problemas de CLI que muestra información sobre el almacenamiento, normalmente Symmetrix. De forma predeterminada, INQ devuelve el nombre del dispositivo, el ID de Symmetrix, el LUN de Symmetrix y la capacidad.
  • send_arp - Envía una transmisión arp en el dispositivo de red especificado (predeterminado en eth0), informando una asignación de dirección IP nueva y antigua a una dirección MAC.
  • EtherApe- es un monitor gráfico de red para Unix modelado a partir de etherman. Con modos de capa de enlace, IP y TCP, muestra la actividad de la red gráficamente.
  • iptraf - Un monitor de tráfico IP que muestra información sobre el tráfico IP que pasa por su red.

Más detalles: http://felipeferreira.net/?p=1194

Xoroz
fuente
1
Gracias por la lista simple y que estas son en su mayoría utilidades predeterminadas. En particular, pude obtener un ancho de banda máximo muy bueno de iftop sin instalar nada.
Foliovisión
16

Tengo otro guión bash rápido y sucio para eso:

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

Está considerando que en sleep 1realidad durará exactamente un segundo, lo cual no es cierto, pero lo suficientemente bueno para una evaluación aproximada del ancho de banda.

Gracias a @ephemient por el /sys/class/net/<interface>! :)

Matthieu
fuente
3
Si desea formatear sus números como MB / s, cambie la línea "echo" por esto: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; imprimir "Received" rx "MB / s, Enviado" tx "MB / s"} '
Michael Böckling
1
@BuddyCasino Estoy seguro de que podrías hacerlo directamente en el let BWRX=($RX-$RXPREV)/1024(aunque no tengo nada para probarlo ahora)
Matthieu
Parece que tienes razón, no funcionó por alguna razón cuando intenté hacerlo de esa manera, así que me conformé con awk, pero supongo que fue solo un error tipográfico.
Michael Böckling
15

Además de iftop e iptraf, también verifique:

  • bwm-ng (Monitor de ancho de banda de próxima generación)

y / o

  • cbm (Medidor de ancho de banda de color)

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

miguel
fuente
2
bwm-ng rocks: no necesita ningún permiso especial para ejecutarse.
Rudy Matela
Lo uso desde hace años y en la mayoría de los casos de uso encuentro su interfaz mucho más clara que, por ejemplo, la de iftop.
Dr. Jan-Philip Gehrcke
6

Si solo desea obtener el valor, puede usar un delineador de shell simple como este:

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

Le mostrará el promedio de "bytes recibidos por segundo" durante un período de 10 segundos (puede cambiar el período cambiando el S=10parámetro, y puede medir BPS transmitido en lugar de BPS recibido usando en tx_byteslugar de rx_bytes). No olvide cambiar eth0al dispositivo de red que desea monitorear.

Por supuesto, no está limitado a mostrar la tasa promedio (como se menciona en otras respuestas, hay otras herramientas que le mostrarán un resultado mucho mejor), pero esta solución es fácilmente programable para hacer otras cosas.

Por ejemplo, el siguiente script de shell (dividido en varias líneas para facilitar la lectura) ejecutará el proceso de mapa fuera de línea solo cuando la velocidad de transmisión promedio de 5 minutos caiga por debajo de 10 kBPS (presumiblemente, cuando finalice algún otro proceso que consuma ancho de banda):

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

Tenga en cuenta que /sys/class/...es específico de Linux (lo cual está bien, ya que el remitente eligió la linuxetiqueta) y necesita un kernel no arcaico. El código de shell en sí es compatible con / bin / sh (por lo que no solo bash, sino también con dash y otras implementaciones de / bin / sh funcionarán) y / bin / sh es algo que realmente siempre está instalado.

Matija Nalis
fuente
5

Me gusta, iptrafpero probablemente tengas que instalarlo y parece que ya no se mantiene activamente.

Johannes Weiss
fuente
1
Hay un iptraf-ng, ¿alguna sugerencia sobre las diferencias entre ellos?
Felix Yan
1
iptraf-ng es una bifurcación del proyecto original. Debería tener todas las características originales con más.
Rudy Matela
2

Encuentro que dstat es bastante bueno. Aunque tiene que ser instalado. Le brinda mucha más información de la que necesita. Netstat le dará tarifas de paquetes pero no también ancho de banda. netstat -s


fuente
0

No pude hacer que el script parse ifconfig funcionara para mí en una AMI, así que hice que esto funcionara midiendo el tráfico recibido en promedio durante 10 segundos

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"

Lo siento, es tan barato y desagradable, ¡pero funcionó!

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

Si desea la salida de (ifconfig -a) en formato json, puede usar esto (python)

Yahya Yahyaoui
fuente
¿Ninguno de estos reporta estadísticas de rendimiento?
Dzamo Norton