Como posso obter as estatísticas atuais de taxa de transferência da interface de rede no Linux / UNIX? [fechadas]

94

Ferramentas como o MRTG fornecem gráficos de taxa de transferência / largura de banda da rede para a utilização atual da rede em interfaces específicas, como eth0. Como posso retornar essas informações na linha de comando no Linux / UNIX?

De preferência, isso seria feito sem instalar nada além do que está disponível no sistema como padrão.

davidmytton
fonte
Considere mudar sua resposta de acordo com os detalhes do iftop.
Cinza
É uma pena que esta questão tenha sido encerrada, porque gostaria de acrescentar bmonque é útil. github.com/tgraf/bmon#screenshots
Daniel F

Respostas:

18

Você pode analisar a saída de ifconfig

Mehrdad Afshari
fonte
Isso pressupõe que o acesso root está disponível
Lionel
20
(normalmente) Você não precisa ser root para executar isto ...
confiq
3
Um bash one-liner ruim que faz exatamente isso (e me faz 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
ansiar pelo
4
A análise da saída do ifconfig está sujeita a erros, por exemplo, o one-liner acima resulta em -bash: export: overruns: 0 ': não é um identificador válido` para mim no RHEL6. A análise /sys/class/net/$dev/statistics(veja o script perl na resposta @ephemient) funciona muito melhor diretamente.
Nickolay
1
não deve ser a resposta aceita, pois é propensa a erros e não é prática. existem utilitários que fazem o trabalho muito melhor. Role para baixo para descobrir.
Eric
156

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

Não sei o quão "padrão" o iftop é, mas consegui instalá-lo yum install iftopno Fedora.

Philip Durbin
fonte
13
iftoppode ser instalado em um Ubuntu instalação limpa facilmente, bem como: apt-get install iftop.
Tom Marthenal,
1
e no Arch Linux compacman -S iftop
Benjamin Kaiser
3
suspiro Bem, acho que isso significa que estou adiando o aprendizado de analisar a tcpdumpsaída novamente. Obrigado iftope wireshark, por me permitir ser tão preguiçoso.
Parthian Shot
1
Observe que a pergunta feita para estatísticas por interface, mas iftopé mais detalhada e fornece estatísticas por conexão.
Joachim Breitner
1
Para aqueles sem direitos de administrador, observe que iftoprequer instalação (você não será capaz de construí-lo sem libpcapinstalado) e sua página inicial diz que ele deve ser executado sob root.
Nickolay
109

Sar obtido? Provavelmente sim se você estiver usando RHEL / CentOS.

Não há necessidade de binários priv, 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
enchimento
fonte
11
Para kB / s transmitir e receber: sar -n DEV 1 3 | grep $ IFACE | tail -n1 | awk '{print $ 5, $ 6}'
Lionel
2
@Lionel - menor nit: você quis dizer Receber e Transmitir, nessa ordem. :-)
lacinato
Sar é uma ferramenta adorável e antiga. É outro binário ou quatro cronjobs variados para coletar, embora :)
XTL
1
Executando Centos7, sem sar.
Josh Usre
google.com/webhp?q=sar%20centos%207 ... uma rápida pesquisa no Google irá revelar muitas informações.
Mike S
44

Escrevi este script idiota há muito tempo, ele não depende de nada além de Perl e 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 @_ = <>;
    @_;
}

Ele apenas lê a /sys/class/net/$dev/statisticscada segundo e imprime os números atuais e a taxa média de mudança:

$ ./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
fonte
5
Esse é um pequeno roteiro incrível, obrigado cara!
Gui13,
1
Tive de substituir "8s" e "8,8s" por "16s" e "16,16s" para que os números se ajustassem.
Nickolay
Se bem entendi, para tornar o resultado final preciso (por exemplo, em estatísticas ao vivo), ele tem que ser executado a cada segundo /proc/net/devou calcular dados por / segundo básicos de alguma outra forma?
Ilia Rostovtsev
31

nload é uma ótima ferramenta para monitorar largura de banda em tempo real e facilmente instalado no Ubuntu ou Debian com 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

Outra ferramenta excelente é o iftop , também facilmente adaptável:

             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ão se esqueça dos utilitários sar e netstat clássicos e poderosos nos * nix mais antigos!

erro fatal
fonte
2
esta deve ser a resposta aceita
Eric
28

Você pode analisar / proc / net / dev .

codelógica
fonte
3
/ proc não existe em todos os UNIX.
Mehrdad Afshari
31
Verdade, apenas presumido devido à tag do Linux, que OP estava interessado apenas no Linux.
codelogic
esse arquivo não existe no kernel 3.17
Tomas Tomecek
4
Parece ser equivalente a analisar /sys/class/net/$dev/statisticscomo no script do epemiente.
Nickolay
25
  • dstat - Combina informações de vmstat, iostat, ifstat, netstat e muito mais
  • iftop - Incrível utilitário de largura de banda de rede para analisar o que realmente está acontecendo no seu computador
  • netio - Mede a taxa de transferência de rede de uma rede via TCP / IP
  • inq- Utilitário de solução de problemas CLI que exibe informações sobre armazenamento, normalmente Symmetrix. Por padrão, INQ retorna o nome do dispositivo, Symmetrix ID, Symmetrix LUN e capacidade.
  • send_arp - Envia uma transmissão ARP no dispositivo de rede especificado (o padrão é eth0), relatando um mapeamento de endereço IP antigo e novo para um endereço MAC.
  • EtherApe- é um monitor gráfico de rede para Unix modelado após etherman. Apresentando camada de link, modos IP e TCP, ele exibe a atividade de rede graficamente.
  • iptraf - Um monitor de tráfego IP que mostra informações sobre o tráfego IP que passa pela rede.

Mais detalhes: http://felipeferreira.net/?p=1194

Xoroz
fonte
1
Obrigado pela lista simples e que estes são utilitários principalmente padrão. Em particular, consegui obter um pico de largura de banda muito bom do iftop sem instalar nada.
Foliovision
16

Eu tenho outro script bash rápido para isso:

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

É considerando que sleep 1na verdade vai durar exatamente um segundo, o que não é verdade, mas bom o suficiente para uma avaliação aproximada da largura de banda.

Agradecimentos a @ephemient pelo /sys/class/net/<interface>! :)

Matthieu
fonte
3
Se você deseja formatar seus números em MB / s, troque a linha "echo" por esta: echo $ BWRX $ BWTX | awk '{rx = $ 1/1024/1024; tx = $ 2/1024/1024; imprimir "Recebido" rx "MB / s, Enviado" tx "MB / s"} '
Michael Böckling
1
@BuddyCasino Tenho certeza de que você poderia fazer isso diretamente no let BWRX=($RX-$RXPREV)/1024(embora eu não tenha nada para testar agora)
Matthieu
Parece que você está certo, por algum motivo não funcionou quando tentei fazer dessa forma, então me conformei com o awk, mas acho que foi apenas um erro de digitação.
Michael Böckling
15

Além de iftop e iptraf, verifique também:

  • bwm-ng (Monitor de largura de banda de última geração)

e / ou

  • cbm (Medidor de largura de banda colorida)

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

miguel
fonte
2
bwm-ng rocks: ele não precisa de nenhuma permissão especial para ser executado.
Rudy Matela
Eu já uso há anos e na maioria dos casos de uso acho sua interface muito mais clara do que, por exemplo, a do iftop.
Dr. Jan-Philip Gehrcke
6

Se você deseja apenas obter o valor, pode usar um shell simples 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

Ele mostrará a média de "bytes recebidos por segundo" por um período de 10 segundos (você pode alterar o período alterando o S=10parâmetro e pode medir o BPS transmitido em vez do BPS recebido usando em tx_bytesvez de rx_bytes). Não se esqueça de mudar eth0para o dispositivo de rede que deseja monitorar.

Claro, você não está limitado a exibir a taxa média (como mencionado em outras respostas, existem outras ferramentas que irão mostrar uma saída muito melhor), mas esta solução é facilmente programável para fazer outras coisas.

Por exemplo, o seguinte script de shell (dividido em várias linhas para facilitar a leitura) executará o processo offline do mapa apenas quando a velocidade de transmissão média de 5 minutos cair abaixo de 10kBPS (presumivelmente, quando algum outro processo que consome largura de banda terminar):

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

Observe que /sys/class/...é específico do Linux (o que está ok, pois o remetente escolheu a linuxtag) e precisa de um kernel não arcaico. O código do shell em si é compatível com / bin / sh (portanto, não apenas bash, mas dash e outras implementações de / bin / sh funcionarão) e / bin / sh é algo que realmente está sempre instalado.

Matija Nalis
fonte
5

Eu gosto, iptrafmas você provavelmente terá que instalá-lo e ele parece não ser mais mantido ativamente.

Johannes Weiss
fonte
1
Existe um iptraf-ng, alguma sugestão sobre as diferenças entre eles?
Felix Yan
1
iptraf-ng é um fork do projeto original. Deve ter todas as características originais com mais.
Rudy Matela
2

Acho que dstat é muito bom. No entanto, deve ser instalado. Fornece muito mais informações do que você precisa. O Netstat fornecerá taxas de pacotes, mas não a largura de banda também. netstat -s


fonte
0

Não consegui fazer com que o script de análise ifconfig funcionasse para mim em um AMI, então coloquei isso para funcionar medindo o tráfego recebido em uma média de 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"

Desculpe, é sempre tão barato e desagradável, mas funcionou!

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

Se você quiser a saída de (ifconfig -a) no formato json, você pode usar isto (python)

Yahya Yahyaoui
fonte
Nenhuma dessas estatísticas de rendimento do relatório?
Dzamo Norton de