você está aqui: Home  → Arquivo de Mensagens

Gráficos de Consumo de Rede em Tempo Real

Colaboração: Kadu Langoni

Data de Publicação: 26 de outubro de 2011

Vou explicar em detalhes, nas linhas abaixo, como montar alguns gráficos de consumo de rede em tempo real. O principal objetivo é, como administrador de redes, ter uma visualização melhor do que acontece de tráfego, mas de forma simples, sem ter que acessar ao servidor e usar o iptraf ou sem ter que esperar o tempo médio de 5 muitos do cacti/MRTG. Sem mais demoras vamos lá!

Motivação

Há mais ou menos três anos atrás tive a oportunidade de trabalhar com equipamentos de rádio Nanostation da Ubitiqui e um detalhe sempre me chamou a atenção; o monitoramento de tráfego. Ele traça um gráfico simples, com duas linhas, que apresentam o consumo de rede de cada interface.

Procurei no google, nestes últimos anos, uma forma semelhante de fazer, algum sistema pronto, e nada. Chegou o dia de colocar a mão na massa!

Primeiro eu tentei com RRD[1], o resultado ficou bom, mas bem aquem das minhas expectativas, eu queria fazer exatamente como no nano, o gráfico na tela, atualizando os pontos a cada X segundos, e não o reload de uma imagem a cada X segundos.

Resolvi então, através da engenharia reversa, criar um sistema semelhante.

Depois de alguns dias entendendo melhor javascript, jquery, flotr e outras coisinhas mais, consegui gerar um código funcional que permite fazer o gráfico de duas maneiras: usando o /proc/net/dev e usando regras do iptables.

Funcionamento

A ideia é bem simples, ler um contador e marcar pontos em um gráfico.

O download do código pode ser feito aqui.[2]

Você precisará de um servidor web com suporte a php.

O arquivo, após descompactado, irá criar o diretório monitor, que deve ser colocado onde possa ser acessado via navegador.

O sistema funciona com dois conjuntos de arquivos:

  • index.php e status.php - responsável por criar os gráficos da interface de rede
  • index2.php e status2.php - responsável por criar os gráficos baseado em regras do iptables.

index.php, no começo do arquivo tem a variável iface[]. Ajuste-a para as interfaces que deseja monitorar. Está com eth1 e eth2 comentado (// no começo). Depois no arquivo status.php você ajusta a variável path com o caminho onde ele vai encontrar o script get_net_info.sh, que está na raiz do diretório monitor.

No index2.php você ajusta a variável $serie_nome de modo a informar quantas são e quais são as origens de dados. No status2.php você ajusta as variáveis de captura do iptables

No iptables crie duas chains personalizadas chamadas YLOG e YJUMP (o nome é sugestivo, basta apenas modificar o status2.php de acordo com os nomes que vc criar. Eu fiz a seguinte adição de regras

  $IPT -t filter -N YLOG
  $IPT -t filter -N YJUMP
  #WEB
  iptables -t filter -A YLOG -m multiport -p tcp --sport 80,443 -j YJUMP
  iptables -t filter -A YLOG -m multiport -p tcp --dport 80,443 -j YJUMP
  #SMTP
  iptables -t filter -A YLOG -m multiport -p tcp --sport 25,587 -j YJUMP
  #POP/IMAP
  iptables -t filter -A YLOG -m multiport -p tcp --sport 110,143,993,995 -j
  YJUMP
  
  iptables -t filter -I INPUT -j YLOG
  iptables -t filter -I OUTPUT -j YLOG
  iptables -t filter -I FORWARD -j YLOG

A segunda chain personalizada foi utilizada apenas para evitar o uso do jump LOG, que encheu meu HD de um dia para o outro, desta modo a contagem ainda funciona e não gera nenhuma interferência nas regras do firewall.

É MANDATÓRIO que estas regras sejam as primeiras de cada uma das chains da tabela filter.

Foi tudo preparado no fim de semana e pode conter bugs e código mal escrito. Quem quiser contribuir com modificações e sugestões deve se sentir a vontade!

Em [3] encontra-se a documentação da API que desenha os gráficos, você pode utilizá-la para personalizar a visualização dos gráficos.

Abraços a todos!

  1. http://oss.oetiker.ch/rrdtool/
  2. http://www.kadu.langoni.net/net_monitor-1.0.tgz cópia local
  3. http://flot.googlecode.com/svn/trunk/API.txt
Kadu Langoni é usuário de Linux desde 1998, participante ativo da comunidade. Desde 2000 trabalha com administração de servidores Linux em data centers e provedores de internet, de São Paulo e Espírito Santo, onde desenvolveu aplicações com firewall e ferramentas de gerenciamento para os principais serviços.Como instrutor ministrou cursos de introdução ao Linux, cursos de Linux para Administradores, e treinamentos específicos nas implantações realizadas nas empresas em que trabalha.


 

 

Veja a relação completa dos artigos de Kadu Langoni

Opinião dos Leitores

Gustavo Henrique
10 Out 2013, 11:26
Muito interessante o artigo, porém não achei os arquivos para download e possíveis testes, ainda existem esses arquivos disponíveis para download?
Lamartine Silva
07 Nov 2011, 12:02
Cara, parabéns pelo tutorial, estava procurando algo desse tipo. Vlw
Lawrence Linder
27 Out 2011, 11:34
Parabéns Kadu! Ótima ideia gostei muito vou trabalhar os PHP para as minhas necessidades qualquer coisa te manda pra você dar uma olhada.

Abraço
Lawrence Linder
Edipo Avanzo
27 Out 2011, 10:04
Olá Kadu, ótima dica, funcionou legal aqui comigo, seria interessante mudar um pouco o script e colocar todos os protocolos para pegar o trafego total do link, igual ao iptraf, assim não precisamos entrar na konsole para ver o tráfego.
Abraço
Paulo Cesar
27 Out 2011, 09:32
Pessoal, so agora vi a resposta do Kadu Langoni no que tange ao script.php, mas com relacao as informacoes, por que nao é apresentado nada nas outras paginas ?
valew!
Paulo Cesar
27 Out 2011, 09:31
Ola, gostei muito da idéia e também não encontrei o script.php (onde encontrá-lo?) com isso meu grafico de relatorio não esta apresentando as informacoes. e o que apareceria em status2.php ? O unico que está funcionando para mim corretamente é o index.php.
Obrigado!
Michel Silva
26 Out 2011, 19:20
Muito show, parabéns.
Riccelli Reis
26 Out 2011, 09:00
Vou testar aqui. Também andei procurando exatamente isso, exatamente pelo mesmo motivo que o seu, também depois de ver o gráfico da nanostaion. Se necessário, e possível, posso tentar melhorar alguma coisa, visto que meu servidor gerencia 22 subredes, mas lhe aviso e envio uma cópia se acontecer.
Abraço
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script