¿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.


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


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.


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

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 ---------^

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!


2
esta debería ser la respuesta aceptada
Eric


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


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>! :)


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


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.


5

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


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



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ó!


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)


¿Ninguno de estos reporta estadísticas de rendimiento?
Dzamo Norton
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.