Monitorar e coletar estatísticas sobre a conexão TCP com o host src ou dst

4

Gostaria de coletar estatísticas sobre os pacotes TCP / UDP enviados entre dois hosts (A e B). Eu estou procurando uma ferramenta para instalar em A e B para obter as seguintes informações:

  • kb / segundos
  • pacotes / segundos
  • bytes (cumulativos) enviados até o momento
  • pacotes (cumulativos) enviados até o momento
  • avg na janela deslizante

Existe iptraf , mas tenho dificuldades para configurá-lo a partir da linha de comando. O tcptrack não agrega dados ... Estou um pouco perdido ...: D Eu poderia escrever o tcpdump: /

Provavelmente, sinto falta de algo bastante óbvio ...

UPDATE: Ambos os servidores executam o Ubuntu 14.04.

UPDATE 2: Eu experimento agora com o tcpflow (logs crescem bem rápido) e vou checar collectId

UPDATE 3: A maneira mais fácil de rastrear o tráfego para um determinado IP ou rede é usar IPTABLES e IPTABLES collectD plugin.

    
por Skarab 27.04.2015 / 16:21

4 respostas

2

Esta é uma pergunta muito interessante.
A resposta depende da configuração da sua rede, mas vou tentar cobrir alguns casos.
Eu acredito que o CollectD é parte da resposta.

Primeiro, como você deseja coletar suas métricas "a cada segundo", sua necessidade de configurar o valor do intervalo CollectD

Solução 1 - O ServerA ESTÁ EXCLUSIVAMENTE falando com o ServerB em uma interface específica? (e vice-versa)
Instale o CollectD com o plug-in de interface . Ele irá "coletar" parte do que você precisa:

  • kb / segundos
  • pacotes / segundos
  • bytes (cumulativos) enviados até o momento
  • pacotes (cumulativos) enviados até o momento

Distribua as métricas do CollectD para um banco de dados de séries temporais, como o Graphite.
Você poderá visualizar essas métricas e aplicar uma função de média móvel . Ele irá corresponder à sua necessidade de:

  • avg na janela deslizante


Solução N ° 2 - O ServerA está apenas falando com o ServerB no TCP e na porta específica? (e vice-versa)
Muito parecido. Use o CollectD e monitore o tráfego somente na porta TCP específica usando o CollectD e o plugin TCPConns . Além disso, use o Graphie para a " média na janela deslizante "

    
por 27.04.2015 / 20:05
4

Uma maneira de fazer isso é usar tshark .

Faça o seguinte:

  1. Capture o tráfego com filtros relevantes em ambos os lados usando tshark / tcpdump / o que produzir um arquivo formatado pcap.
  2. Quando terminar, execute tshark option -z nos arquivos de captura.

Então:

  • para obter taxas de pacotes e bytes por segundo:

    tshark -q -r myfile.cap -z io,stat,1

Isso produzirá algo assim:

=============================
| IO Statistics             |
|                           |
| Interval size: 1 secs     |
| Col 1: Frames and bytes   |
|---------------------------|
|          |1               |
| Interval | Frames | Bytes |
|---------------------------|
| 0 <> 1   |     29 |  2026 |
| 1 <> 2   |     35 |  2440 |
| 2 <> 3   |     35 |  2440 |
| 3 <> 4   |     43 |  2920 |
| 4 <> 5   |     93 |  5776 |
| 5 <> 5   |     77 | 25758 |
=============================
  • para obter a agregação de pacotes e bytes, bem como a janela TCP média:

    tshark -q -r myfile.cap -z io,stat,0,"AVG(tcp.window_size)tcp.window_size"

O resultado será algo desse tipo:

==============================================
| IO Statistics                              |
|                                            |
| Interval size: 5.109 secs (dur)            |
| Col 1: Frames and bytes                    |
|     2: AVG(tcp.window_size)tcp.window_size |
|--------------------------------------------|
|                |1               |2      |  |
| Interval       | Frames | Bytes |  AVG  |  |
|-----------------------------------------|  |
| 0.000 <> 5.109 |    312 | 41360 | 41363 |  |
==============================================


Agora, se você obter o tamanho médio da janela do TCP fora da equação (você não obterá essa métrica sem uma ferramenta inspecionando o tráfego), poderá usar ferramentas de monitoramento padrão para representar graficamente o que quiser sobre taxas / agregação de pacotes em qualquer protocolo usando por exemplo cactos .

Editar: Não sabe ao certo o que você quis dizer com janela deslizante, dadas as outras respostas (com votos positivos). Se você quis dizer média de métricas para um determinado período de tempo começando em alguma data (e não o tamanho da janela TCP), então você pode fazer a coisa toda lançando um filtro de data com comandos tshark.

Mas parece que você está simplesmente buscando uma solução de monitoramento global. Cactos, collectd, zabbix, shinken, nagios (com icinga ou algo assim) devem estar bem para suas necessidades e personalizáveis o suficiente para filtrar o tráfego específico, se necessário.

    
por 27.04.2015 / 19:03
2

Crie um espelho de porta para o servidor e execute o wireshark de dois computadores para coletar os dados. Assim, isso não afetará seu servidor na produção.

    
por 27.04.2015 / 17:14
1

Minha solução para executar testes de 1 a 2 horas:

  • tcpflow para coletar o fluxo TCP, eu uso tcpflow -i eth0 -FT para ter registro de data e hora nos nomes dos arquivos de resultados
  • parse report.xml (DFXML) para criar relatório em conexões fechadas
  • analisa os nomes dos arquivos com o tráfego capturado + registra seus tamanhos para relatar a conexão em andamento durante a medição
  • use o matplotlib para traçar gráficos

Vantagem:

  • visão detalhada do que está acontecendo

Desvantagem:

  • arquivos com tráfego de capturas crescem muito rápido
por 05.05.2015 / 12:04