Estatísticas de rede no Linux

1

Eu estou tentando escrever um pequeno script para coletar estatísticas de rede no meu sistema Linux. Existe uma maneira de fazer isso?

O que eu estou procurando é estatísticas ao vivo sobre a taxa de transferência atual da rede. Fiz algumas leituras e descobri que /proc/net/dev é útil e posso analisar o conteúdo disso para calcular a velocidade atual da rede. Esta é uma maneira viável / confiável de fazer isso? Como pacotes como iptraf e iftop calculam a velocidade para cima e para baixo?

    
por W Khan 06.08.2014 / 11:22

3 respostas

3

Sim, /proc/net/dev é a maneira normal de fazer isso. Você também pode usar os arquivos em /sys/class/net/eth0/statistics se achar isso mais fácil.

Como alternativa, moreutils contém um script ifdata que receberá essas informações para você. Por exemplo, para imprimir o número de bytes em ( -sib ) e sair ( -sob ), você faria:

$ ifdata -sib -sob eth0
48115944587
71982675360

A saída está na mesma ordem dos sinalizadores, de modo que é 48… in e 71… out.

Ele também calculará os bits / s no último segundo para você (fazendo basicamente sleep 1 ):

$ ifdata -bips -bops eth0
1148
1755
    
por 06.08.2014 / 13:09
1

No passado, usei a saída de ifconfig para reunir estatísticas sobre taxa de transferência e gravá-la em grafite. Cada interface tem um contador RX e TX que conta os bytes de taxa de transferência. Você só precisa escrever um script que analise periodicamente ifconfig e grave a diferença entre o valor atual e o valor anterior para a tela ou um arquivo.

eth0      Link encap:Ethernet  HWaddr 00:0c:29:cf:12:d3  
          inet addr:10.100.3.26  Bcast:10.100.3.31  Mask:255.255.255.248
          inet6 addr: fe80::20c:29ff:fecf:12d3/64 Scope:Link
          inet6 addr: 2001:xxx:7927:3::26/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:160523475 errors:0 dropped:921 overruns:0 frame:0
          TX packets:106097000 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2912933876 (2.7 GiB)  TX bytes:3734512667 (3.4 GiB)

eth1      Link encap:Ethernet  HWaddr 00:0c:29:cf:12:dd  
          inet addr:10.100.0.1  Bcast:10.100.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fecf:12dd/64 Scope:Link
          inet6 addr: 2001:xxx:7927::1/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:92858590 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142257564 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1849495529 (1.7 GiB)  TX bytes:389856127 (371.7 MiB)

eth2      Link encap:Ethernet  HWaddr 00:0c:29:cf:12:e7  
          inet addr:10.100.4.1  Bcast:10.100.4.255  Mask:255.255.255.0
          inet6 addr: 2001:xxx:7927:4::1/64 Scope:Global
          inet6 addr: fe80::20c:29ff:fecf:12e7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10951337 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16448597 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1437098401 (1.3 GiB)  TX bytes:1634328371 (1.5 GiB)

O script está no link , talvez você possa inspirar-se nisso.

    
por 06.08.2014 / 12:23
1

Você está familiarizado com sar ?

Você pode tentar sar -n ALL para obter todas as estatísticas de rede possíveis, ou se quiser estatísticas de rx e tx por dispositivo de rede, a cada segundo - tente isto:

 sar -n DEV 1

Por uma média de 5 segundos de rx e tx para eth0 (por exemplo) faça:

sar -n DEV 1 5 | grep -i eth0 | tail -n1 | awk '{print $5, $6}'
    
por 06.08.2014 / 16:04