1. Identificação
Giovane César Moreira Moura
Escola de Engenharia Elétrica e de Computação, UFG.
4º Ano de Engenharia de Computação
Matrícula: 012826
Professor Orientador: Prof. Msc. Marcelo Stehling de Castro
Local de estágio: Ponto de Presença da Rede Nacional de Ensino e
Pesquisa em Goiás (PoP-GO RNP), sediado no prédio da UFGNET no Campus
1, Escola de Engenharia.
Data do estágio: 01 de março de 2004 até 28 de fevereiro de 2005.
Total de horas semanais: 30 horas.
Total de Horas em todo o período: 1560 horas.
2. Introdução
2.1 Sobre a RNP e o PoP-GO
A RNP foi criada em setembro 1989 pelo Ministério da Ciência e
Tecnologia (MCT) com o objetivo de construir uma infra-estrutura de rede
Internet nacional de âmbito acadêmico. A Rede Nacional de Pesquisa, como
era chamada em seu início, tinha também a função de disseminar o uso de
redes no país. Em paralelo à implantação de sua estrutura, a RNP dedicouse a tarefas diversas, tais como divulgar os serviços Internet à comunidade
acadêmica através de seminários, montagem de repositórios temáticos e
treinamentos, estimulando a formação de uma consciência acerca de sua
importância estratégica para o país e tornando-se referência em aplicação
de tecnologias Internet.
Em maio de 1995, teve início a abertura da Internet comercial no país.
Neste período, a RNP passou por uma redefinição de seu papel, estendendo
seus serviços de acesso a todos os setores da sociedade. Com essa
reorientação de foco, a RNP ofereceu um importante apoio à consolidação
da Internet comercial no Brasil. Foi criado o Centro de Informações
Internet/BR para dar suporte no surgimento de provedores e usuários da
rede. Mais de 3.000 questões relativas à Internet foram respondidas em seu
primeiro ano de funcionamento. Inúmeras empresas fabricantes de bens de
informática, tais como Compaq, Equitel, IBM, Philips etc., passaram a
oferecer apoio concreto à RNP, fornecendo equipamentos, software e,
mesmo, financiando atividades diretas do projeto.
Em outubro de 1999, dez anos depois de ser criado o projeto RNP, os
ministérios da Ciência e Tecnologia e da Educação (MEC) assinaram um
1
convênio, o Programa Interministerial de Implantação e Manutenção da Rede
Nacional para Ensino e Pesquisa (PI-MEC/MCT), com o objetivo de levar a
rede acadêmica a um novo patamar. Os dois ministérios investiriam R$ 215
milhões na implantação e manutenção do backbone RNP2, uma infraestrutura de rede avançada, capaz de atender às novas necessidades de
banda e de serviços para ensino e pesquisa. A Associação Rede Nacional de
Ensino e Pesquisa (AsRNP), criada neste mesmo ano pelos funcionários da
RNP, conduziria o programa, sob orientação de um Comitê Gestor (CG-RNP)
formado por representantes do MEC e do MCT. O backbone RNP2 foi
oficialmente inaugurado em maio de 2000.
Em janeiro de 2002, a AsRNP foi qualificada pelo governo federal
como uma Organização Social. Com isso, ganhou maior autonomia
administrativa para executar suas tarefas e o poder público ganhou meios
de controle mais eficazes para avaliar e cobrar o alcance dos objetivos
traçados para a organização.
Em 26 de março de 2002, a Organização Social Rede Nacional de
Ensino e Pesquisa (RNP/OS) firmou um contrato de gestão com o MCT. Nele,
a RNP/OS se predispõe a atingir determinadas metas, visando ao fomento
das atividades de pesquisas tecnológicas em redes de desenvolvimento e à
operação de meios e serviços de redes avançadas que beneficiem a pesquisa
e o ensino nacionais.
Já o PoP-GO (Point of Presence) é o ponto de presença da RNP em
Goiás. Nada mais é que uma extensão da RNP em Goiás que assegura o
funcionamento da estrutura da RNP em Goiás, garantindo a operação de
qualidade da rede interligando as instituições participantes a internet.
2.2 Sobre este relatório
A parte técnica deste relatório foi feito nos moldes de um tutorial,
para que posso ser utilizado por um muito mais pessoas que tiverem
acesso.
3. Atividades realizadas
As atividades realizadas no PoP-GO durante o período que estagiei
podem ser divididas em três categorias:
•
Atividades rotineiras de hardware/software
•
Projeto de Monitoramento
•
Pesquisa em Multimídia sobre IP
Nas seções abaixo descreverei melhor cada uma das três categorias.
2
3.1 Atividades rotineiras de hardware/software
Essas atividades são caracterizadas por instalação/manutenção de
software no maquinário do PoP-GO, manutenção de hardware e cabeamento
estruturado.
Vale salientar que sempre utilizei exclusivamente software livre em
todas as atividades e projetos que realizei no PoP.
Dentro os softwares instalados, inclui-se o sistema operacional
Slackware/Linux, servidor web Apache httpd e softwares de produção, com
OpenOffice e softwares de usuário. Aqui não considero a instalação dos
softwares que foram usados exclusivamente no projeto de monitoramento,
pois esses serão mais detalhados na seção 3.3.
Devido a experiência que eu já possuía nesta área, instalação de
software em GNU/Linux não representou grande desafio, motivo pelo qual a
descrição dessa atividade será bem resumida neste relatório(deixando para
o projeto de monitoramento uma melhor documentação). Entre outras
atividades inclui o monitoramento do desempenho e resposta das
máquinas, verificação de logs e tentativas de acesso não autorizado. Foi
notado em logs do Slackware Linux várias tentativas de acesso via ssh onde
diversas combinações de nomes e senhas provenientes de diversos países
eram tentadas, sempre sem sucesso devido a política de senhas usada. A
RNP tem uma rede bastante visada do ponto de vista de invasores, portanto
trabalhar numa rede dessas oferece capacidade de aprender bastante com
tantas tentativas.
Em relação a hardware, foi feito algumas manutenções no maquinário
do PoP, como por exemplo abrir uma máquina com problema na bios.
No que se refere a atividades rotineiras em redes, realizei atividades
para testar switches, acompanhei configuração de linhas SLDD para
interconexão do PoP-GO com o prédio da Caixa Econômica Federal
localizado na Avenida Anhangüera. Essa conexão foi necessária para a
transmissão para internet de um evento realizado na Caixa. Mais atividades
foram realizadas no projeto de monitoramento. Também acompanhei o
Coordenador Técnico do PoP, Cláudio Garcia, na configuração de switches
IBM e NEC. Outras vezes com o bolsista Frederico Rodrigues acompanhei
tais configurações.
Também fui algumas vezes ao prédio da Brasil Telecom onde o PoPGO tem uma sala técnica onde ficam equipamentos de rede conectando a os
dois campus da UFG e a REMAV.
3.2 Projeto de Monitoramento
A origem deste projeto foi a necessidade de um relatório. Uma
experiência que mostrou que apenas um relatório pode exigir um projeto
inteiro. E a partir da entrega deste relatório, continuei o projeto estendendo
3
para um uso diversificado.
O relatório exigido surgiu a partir de um problema detectado. O PoPGO é fisicamente ligado ao PoP-DF (Ponto de Presença de RNP no DF) via
uma conexão ATM alugada de uma operadora de telefonia(contrato anual,
onde todo ano Brasil Telecom e Embratel concorrem pelo link). No ano de
2004 a empresa que fornecia o link era então a Brasil Telecom. Detectamos
que quando um usuário de dentro da rede do PoP-GO tentava acessar um
site hospedado em Goiás (exemplo: Detran-GO – www.detran.go.gov.br ) os
pacotes deste usuário saiam do PoP-GO e iam até Curitiba-PR para então
voltarem para Goiânia. Era dada uma volta muito grande dos pacotes pelo
país, ocasionando um pior desempenho para o usuário final e uma
sobrecarga desnecessária aos demais enlaces da RNP (DF,RJ e PR) para
rotear pacotes que poderiam ter ficado dentro do estado de GO mesmo.
Para solucionar este problema, foi pensado um projeto de Ponto de Troca de
Tráfego (considera-se como Ponto de Troca de Tráfego Internet - PTT, uma
rede eletrônica de alta velocidade ou estrutura equivalente, onde diversas
redes se conectam por meio de roteadores IP com o propósito de troca de
tráfego) para solucionar este problema. E este PTT seria entre o PoP-GO e a
concessionária Brasil Telecom. Como um PTT é um conceito implementado
em roteadores de borda(no nosso caso um CISCO 7500), e isso exigiria do
roteador um maior uso de memória, por nosso lado fez-se a necessidade de
saber quanto de tráfego da nossa rede (PoP-GO) se destinava a rede da
Brasil Telecom (entenda-se todos os clientes da Brasil Telecom , incluindose usuários de ADSL,empresas que contratam link da concessionária, o
governo, e etc..) e quanto do tráfego que entrava em nossa rede vinha da
rede da Brasil Telecom (precisa-se de haver uma demanda para
implementar um projeto destes).
Como obter esses dados? Para explicar melhor, é necessário mostrar
a topologia do PoP-GO na figura 1:
Figura 1: Topologia Lógica do PoP-GO
4
Esta figura representa a topologia lógica em alto nível do PoP-GO
(sem considerar a REMAV Goiânia, a qual seu tráfego fica apenas dentro da
rede do PoP-GO, não passando para a internet). Percebe-se que o PoP-GO
conecta UFG, Embrapa,CEFET,Sectec e a secretaria municipal de Educação a
internet. E para o tal, todo o tráfego destes clientes vai para um conjunto de
switches (representado pelo switch maior) e então todo tráfego passa pelo
roteador de borda Cisco 7500. Ou seja, basta apenas monitorar todo o
tráfego por um ponto da rede, o roteador de borda. Se um aluno da UFG de
dentro da UFG tenta acessar, por exemplo, o site www.detran.go.gov.br (que
pertence a rede Brasil Telecom) , esses dados passam pela rede da UFG
inteira até culminar no Cisco 7500. E lá conseguimos também monitorar o
quanto de tráfego de entrada da Brasil Telecom acessa nossa rede. Uma
analogia seria como se o Cisco 7500 fosse uma ponte que liga uma ilha
(rede do PoP-GO) a um continente(Internet).
Já detectamos onde monitorar, porém ficou em aberto a questão:
como? Daniel Chaffe Stone, responsável por toda Rede da UFG,juntamente
com o coordenador técnico do PoP-GO,Cláudio Garcia, sugeriram o uso da
tecnologia Cisco IOS Netflow.
Cisco IOS Netflow é um software que roda no roteador Cisco 7500 do
PoP-GO que provê um conjunto chave de serviços para aplicações
IP,incluindo contagem de tráfico de rede, billing baseado no uso da rede
(por exemplo, monitorar quanto de download um determinado IP realizou –
como as operadoras que provem serviço ADSL monitoram quanto casa
usuário usa), permitem um maior planejamento da rede, maior segurança,
monitoramento de DoS e monitoramento da rede em questão. Podemos
extrair diversas informações, sobre os usuários da rede e quais aplicativos
estão usando, horário de pico, roteamento.
O funcionamento do Netflow é basicamente o seguinte: o roteador
(ou switch, porém no nosso caso é o Cisco 7500 da figura 1) coleta os fluxos
de dados (que são “logs” dos pacotes que entram e saem do roteador) que
passam por suas interfaces e prepara os dados para serem exportados.
Desses fluxos ele acumula dados com características únicas,como endereço
IP, aplicação, CoS. Então esses dados condensados são exportados para um
coletor que os recebe,armazena e então analisa (no nosso caso, utilizamos
uma estação IBM Netfinity PIII 550Mhz para coleta de dados utilizando
Slackware Linux. O software de coleta chama-se flow-tools, que é um
conjunto de ferramentas livres). A título de ilustração, no PoP-GO
coletávamos cerca de 350MB/dia. É um volume expressivo de dados, que na
verdade são “brutos” e precisam ser tratados por softwares para se extrair a
informação desejada.
Como o Netflow coleta os fluxos e sumariza usando IP, poderíamos
aplicar regras na análise dos dados coletados e dizer: “queremos saber qual
a porcentagem dos dados que passam pelo nosso roteador vão para a rede
da Brasil Telecom e qual a porcentagem dos dados de entrada que vem de
lá”, apenas informando ao nossa ferramenta de análise (flow-tools) quais
faixas de endereços IPs pertenciam a rede Brasil Telecom.
5
A partir deste momento bastava apenas implementação do projeto.
Essa parte trabalhei bastante lendo documentação em sites na web e
consegui obter os resultados esperados.
Para obter o relatório em questão, deixaríamos coletando dados 37
dias (para termos uma melhor espaço amostral) e nossas estatísticas mais
realistas. O que fizemos basicamente para coletar os dados foi o seguinte:
1. Pedir para o pessoal da administração da RNP no Rio de Janeiro
configurar remotamente o Cisco 7500 para exportar os dados
coletados pelo Netflow para nossa estação coletora (IBM PIII
550Mhz).
2. Configurar a estação para coletar os dados. Para isso, utilizamos o
seguinte comando:
#flow-capture -w /netflow -E20G <ip_estação_coletora>/0/9800
Este comando diz para o flow-capture(software integrante do flowtools) para coletar os dados do netflow e os armazenar na pasta /
netflow, num total de 20G (-E20G – quando este limite é atingido, os
dados mais antigos são sobrepostos) , na porta 9800.
3. Esperar o tempo de coleta
4. Analisar e entregar o relatório.
Esse relatório foi entregue dia 23/09/2004. Ele está disponível no
Anexo 1.
Descobrimos então que a Brasil Telecom respondeu por 17,64% dos
uploads e 11,65% dos downloads. Foi encaminhado o relatório aos
responsáveis, e até o momento que eu estive na RNP não houve outra
reunião com a Brasil Telecom.
Uma vez que a máquina a qual eu administrava (a máquina coletora)
ainda continuava a receber os dados do Netflow, decidi então ampliar o uso
da ferramenta para obter outras análises, uma extensão do projeto.
Essa extensão se basearia em:
a) Analisar os dados diariamente e extrair informações: Queria ter
informações diárias sobre o volume total de upload e download diário, e
também o tráfego de entrada e saídas nas portas 80(http), 20(ftp), 25
(snmp).
b) Que essa análise fosse automática, e gerasse gráficos todos os
dias.
c) Esses gráficos fossem disponibilizados no site do PoP-GO.
6
Para executar tal projeto, precisaria deixar a máquina coletora
sempre online recebendo fluxos de netflow, 24horas por dia, 7 dias por
semana, e então analisar e armazenar. Na verdade eu precisaria de um
conjunto de ferramentas livres para realizar tal tarefa. Já havia no mesmo
estágio instalado um software de monitoramento de rede chamado JFFNMS
( Just For Fun NMS), que na verdade era um site em PHP que coletava dados
via SNMP (simple network management protocol) , gerava gráficos e os
armazenava. Este mesmo software utilizada um conjunto de ferramentas
chamadas RRDTool para armazenar os dados e então gerar os gráficos, de
acordo com suas especificações. Então eu já sabia qual software utilizar
para gerar os gráficos, mas ainda não tinha extraído do flow-tools quais
dados seriam utilizados.
O que eu utilizei pode ser resumido na figura abaixo:
Figura 2: Hardware e software envolvido no projeto
No roteador não mexi em nada; apenas pedi ao pessoal do RJ para
programar o roteador para enviar dados do Netflow para minha estação IBM.
E era nela na verdade que o trabalho todo é executado. Depois de analisar
os dados e gerar os gráficos, é tudo transmitido via ssh com chave para o
servidor web do PoP-GO.
Nas próxima seção descreverei os aspectos técnicos envolvendo a
estação coletora.
3.3.1 Configuração da estação coletora
Para configurar a estação coletora, a primeira coisa é instalar o
pacote flow-tools. O tradicional configure, make e make install instalam o
software tranquilamente.
7
Feito a instalação como manda o desenvolvedor, execute o flowcapture para fazer sua máquina armazenar os dados vindos do roteador
(como foi dito anteriormente).
#flow-capture -w /netflow -E20G <ip_estação_coletora>/0/9800
Com esta linha é criado automaticamente uma estrutura de diretórios
dentro de /netflow separados por ano, mês e dia. E dentro do dia em
questão é que os arquivos dos fluxos são propriamente armazenados.
Veja como ficou nossa árvore de diretórios:
|-|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2004
|-- 2004-10
|
|-- 2004-10-01
|
|-- 2004-10-02
|
|-- 2004-10-03
|
|-- 2004-10-04
|
|-- 2004-10-05
|
|-- 2004-10-06
|
|-- 2004-10-07
|
|-- 2004-10-08
|
|-- 2004-10-09
|
|-- 2004-10-10
|
|-- 2004-10-11
|
|-- 2004-10-12
|
|-- 2004-10-13
|
|-- 2004-10-14
|
|-- 2004-10-15
|
|-- 2004-10-16
|
|-- 2004-10-17
|
|-- 2004-10-18
|
|-- 2004-10-19
|
|-- 2004-10-20
|
|-- 2004-10-21
|
|-- 2004-10-22
|
|-- 2004-10-23
|
|-- 2004-10-24
|
|-- 2004-10-25
|
|-- 2004-10-26
|
|-- 2004-10-27
|
|-- 2004-10-28
|
|-- 2004-10-29
|
|-- 2004-10-30
|
`-- 2004-10-31
|-- 2004-11
|
|-- 2004-11-01
|
|-- 2004-11-02
Dentro de cada diretório é que ficam os arquivos de flows, que são
como abaixo:
1.3M
1.3M
1.2M
ft-v05.2005-08-09.000000-0300
ft-v05.2005-08-09.001500-0300
ft-v05.2005-08-09.003000-0300
8
1.2M
ft-v05.2005-08-09.004500-0300
Os arquivos criados começam o nome por ft. Vamos destricinhar o
primeiro arquivos pelo nome. FT de flow tools, v05 é a versão 5 do Netflow
(vide Cisco para mais informações de outras versões), 2005-08-09 é a data,
e 0000000 é a hora referente ao arquivo, que registra da 00:00 até 00:15 os
fluxos, com zona geográfica de -3 horas em relação a GMT. O tamanho do
arquivo é 1.3MB.
Flow-tools é um conjunto composto pelos seguintes softwares:
flow-capture – Coleta, comprime, armazena e gerencia o espaço em
disco para flows vindos do roteador.
flow-cat – Concatena os arquivos de flow. Tipicamente os arquivos
de flows são referentes a 5 ou 15 minutos de exports. Use flow cat para
concatená-los e aumentar suas análises para perídos de tempo maiores.
flow-report – Gera relatórios. Relatório incluem IP de origem e
destino, AS de origem e destino. Mais de 50 tipos de relatórios são
suportados.
flow-tag - Serve para marcar os flows baseados em IP ou AS. Esses
tags podem ser usadas depois com flow-report para gerar relatórios sobre
determinada faixa IP. Utilizamos para filtrar dados da AS Brasil Telecom.
flow-filter – Filtra o tráfego baseado em campos como porta. Por
exemplo, podemos querer saber quanto tráfego da AS Brasil telecom
corresponde a porta 80. Então marcamos os flows com flow-tag e passamos
para o flow-filter..
flow-import - Importa data de ASCII ou cflowd.
flow-export - Export data para ASCII ou cflowd .
flow-send – Envia dados na rede utilizando o protocolo netflow.
flow-receive – Recebe exports usando o protocolo Netflow porém
sem armazenar em disco,como o flow-capture.
flow-gen – Gera dados para teste.
flow-dscan – ferramenta simples para detectar scanners na rede e
tentativas de ataques de negação de serviços (DDoS e DoS.
flow-merge – une arquivos em ordem cronológica.
flow-xlate – faz tradução de alguns campos.
flow-expire -Expiras fluxos utilizando a mesma política do flow9
capture.
flow-header – Exibe metadados do flow.
flow-split – divide arquivos em tamanho menores.
Bom, visto agora o que flow-tools possui, para usarmos basta
encadear com pipes (“|”) os comandos para obtermos os relatórios, com os
devidos parâmetros.
Vou demonstrar um exemplo de flow-tools:
flow-cat /netflow | flow-filter -p25 |flow-stat -f0
Este código concatena os arquivos do Netflow que estão abaixo da
árvore /netflow, então passa para a flow-filter que filtra os que tém a porta
25 e o flow-stat gera relatório a partir dos dados vindos da cadeia de
comandos anteriores.
# --- ---- ---- Report Information --- --- --#
# Fields:
Total
# Symbols:
Disabled
# Sorting:
None
# Name:
Overall Summary
#
# Args:
/usr/local/netflow/bin/flow-stat -f0
#
Total Flows
: 161145
Total Octets
: 203357738
Total Packets
: 3360762
Total Time (1/1000 secs) (flows): 1288065068
Duration of data (realtime)
: 86400
Duration of data (1/1000 secs) : 86470120
Average flow time (1/1000 secs) : 7993.0000
Average packet size (octets)
: 60.0000
Average flow size (octets)
: 1261.0000
Average packets per flow
: 20.0000
Average flows / second (flow)
: 1.8636
Average flows / second (real)
: 1.8651
Average Kbits / second (flow)
: 18.8142
Average Kbits / second (real)
: 18.8294
IP packet size distribution:
1-32
64
96 128 160 192 224 256 288 320 352 384 416
448 480
.000 .419 .459 .110 .007 .002 .001 .000 .000 .000 .000 .000 .000 .
000 .000
512 544 576 1024 1536 2048 2560 3072 3584 4096 4608
.000 .001 .000 .000 .000 .000 .000 .000 .000 .000 .000
10
Packets per flow distribution:
1
2
4
8
12
16
20
24
28
32
36
40
44
48
52
.180 .042 .070 .216 .181 .132 .060 .022 .013 .008 .006 .005 .006 .
004 .003
60 100 200 300 400 500 600 700 800 900 >900
.004 .010 .024 .005 .004 .002 .001 .001 .000 .000 .001
Octets per flow distribution:
32
64 128 256 512 1280 2048 2816 3584 4352 5120 5888 6656
7424 8192
.000 .141 .066 .074 .087 .451 .106 .019 .008 .005 .007 .007 .006 .
003 .002
8960 9728 10496 11264 12032 12800 13568 14336 15104 15872 >15872
.001 .002 .001 .001 .001 .001 .001 .000 .001 .001 .011
Flow time distribution:
10
50 100 200 500 1000 2000 3000 4000 5000 6000 7000 8000
9000 10000
.205 .002 .005 .014 .030 .045 .093 .099 .062 .055 .047 .037 .030 .
043 .029
12000 14000 16000 18000 20000 22000 24000 26000 28000 30000 >30000
.040 .028 .023 .017 .013 .014 .011 .007 .006 .005 .040
Visto um exemplo básico, passamos agora ao ambiente de produção,
como realizo o monitoramento.
Todo processo é resumido em scripts agendadados no crond a
execução a partir de 00:01 horas.
#!/bin/bash
#scrip daily – a ser executado diariamente pelo crond
#Giovane Moreira [email protected]
/root/scripts/n_generate
/root/scripts/n_ripdata
/root/scripts/NGRAPHS
scp -r -i /home/grafico/.ssh/id_rsa /root/scripts/graphs/
login@servidorweb:/var/www/popgo/dir_destino/
Um fluxograma de execução da solução seria:
Figura 3: Fluxograma de execução do projeto
11
Como se pode ver, ele chama na verdade 3 scripts e realiza um scp
para o servidor web. Eis a função de cada um:
Script n_generate: gerar os relatórios do flow-tools a partir do que
foi armazenado no disco. Sempre se analisa os dados do dia anterior, por
isso date recebe 1 day ago. Como produto gera uma série de arquivos .txt,
que contém os relatórios.
#!/bin/bash
#n_generate: script para acessar os diretórios gerados pelo flowcapture e então gerar os dados necessários para gerar os gráficos via
rrdtool.
#date recebe data no formato 2005/2005-07/2005-07-08, que é a
#estrutura de diretórios do flow-capture que contem os flows.
data=`date --date '1 days ago' +%Y/%Y-%m/%Y-%m-%d`
netflow_dir=/usr/local/netflow/bin
dir=/netflow/$data/
#acessa o diretório dos fluxos do dia.
cd $dir
echo $dir
#Gera upload.txt que contém o Upload Total do roteador
$netflow_dir/flow-cat $dir |$netflow_dir/flow-stat -f18>/netflow/$
{data}/upload.txt
#Download Total
$netflow_dir/flow-cat $dir |$netflow_dir/flow-stat -f17
>/netflow/${data}/download.txt
#Upload na Porta 80
$netflow_dir/flow-cat $dir
|$netflow_dir/flow-filter -P80 |
$netflow_dir/flow-stat -f0 > /netflow/${data}/p80u.txt
#Download na Porta 80$netflow_dir/flow-cat $dir
$netflow_dir/flow-filter -p80 |$netflow_dir/flow
-stat -f0 > /netflow/${data}/p80d.txt
|
#Upload na Porta 20
$netflow_dir/flow-cat $dir
|$netflow_dir/flow-filter -P20 |
$netflow_dir/flow-stat -f0 >/netflow/${data}/p20u.txt
#Download na Porta 20
$netflow_dir/flow-cat $dir
|$netflow_dir/flow-filter -p20 |
$netflow_dir/flow-stat -f0 >/netflow/${data}/p20d.txt
#Upload na Porta 25
$netflow_dir/flow-cat $dir
|$netflow_dir/flow-filter -P25 |
$netflow_dir/flow-stat -f0 >/netflow/${data}/p25u.txt
#Download na Porta 25
$netflow_dir/flow-cat $dir
|$netflow_dir/flow-filter -p25 |
$netflow_dir/flow-stat -f0 >/netflow/${data}/p25d.txt
12
Script n_ripdata: precisamos extrair do relatório bruto (os .txt
gerados acima) os dados que serão passados ao RRDTOOL para gerarem os
gráficos. Por exemplo, queremos saber quantos bytes passaram de upload
na porta 25, e armazenar isso em um arquivo para que possa ser lido,
apenas o número total. E então esse valor é armazenado nos arquivos do
RRDTOOL.
#!/bin/bash
#n_ripdata: script para extrair dados dos relatórios do flow-tools,
para então usar no RRDTTOOL
#como converter data em timestamp: date -d040914 +%s
netflow_dir=/usr/local/netflow/bin/
data=`date --date '1 days ago' +%Y/%Y-%m/%Y-%m-%d `
datastamp=`date --date '1 days ago' +%s`
cd /netflow/${data}
#abaixo são expressões regulares que extraem os campos que serão
#armazenados em arquivos _rrd.txt para leitura do RRDTool, apenas o
#dado que interessa. É feito uma execução para cada txt.
#upload total
head -13 upload.txt|tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' > upload_rrd.txt
| awk -F"
#download total
head -13 download.txt|tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
-F" " '{print $3}' >download_rrd.txt
#download na porta 80
head -11 p80d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' >p80d_rrd.txt
| awk
| awk -F"
#download na porta 20
head -11 p20d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' >p20d_rrd.txt
| awk -F"
#download na porta 25
head -11 p25d.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' >p25d_rrd.txt
| awk -F"
#upload na porta 80
head -11 p80u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' >p80u_rrd.txt
| awk -F"
#upload na porta 20
head -11 p20u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' > p20u_rrd.txt
| awk -F"
#upload na porta 25
head -11 p25u.txt |tail -1 | sed "s/\W* \W* \(\W\)/\1/g "
" '{print $3}' >p25u_rrd.txt
| awk -F"
#esses dados são gerados em bytes, queremos convertê-los para
#gigabytes, por isso chamamos o programa a.out (feito em c) para
#executar isso. E grava no mesmo arquivo. Apenas converte de bytes
13
#para gbytes.
temp=$(cat upload_rrd.txt)
/root/scripts/a.out $temp > upload_rrd.txt
temp=$(cat download_rrd.txt)
/root/scripts/a.out $temp > download_rrd.txt
temp=$(cat p20d_rrd.txt)
/root/scripts/a.out $temp > p20d_rrd.txt
temp=$(cat p20u_rrd.txt)
/root/scripts/a.out $temp > p20u_rrd.txt
temp=$(cat p25d_rrd.txt)
/root/scripts/a.out $temp > p25d_rrd.txt
temp=$(cat p25u_rrd.txt)
/root/scripts/a.out $temp > p25u_rrd.txt
temp=$(cat p80d_rrd.txt)
/root/scripts/a.out $temp > p80d_rrd.txt
temp=$(cat p80u_rrd.txt)
/root/scripts/a.out $temp > p80u_rrd.txt
#agora é que precisamos colocar os arquivos na forma que o RRDTOOL
#consegue armazenar. A saída será algo na forma: 40:30:20:20.30
#na documentação do rrdtool será explicado o porque desta forma.
#arquivo que o netflow lê e armazena. Versão dos downloads.
temp=`cat download_rrd.txt``echo :``cat p80d_rrd.txt``echo :``cat
p20d_rrd.txt``echo :``cat p25d_rrd.txt`
echo $temp > update_d
#arquivo que o netflow lê e armazena. Versão dos uploads.
temp=`cat upload_rrd.txt``echo :``cat p80u_rrd.txt``echo :``cat
p20u_rrd.txt``echo :``cat p25u_rrd.txt`
echo $temp >update_u
#comando que faz o rrdtool atualizar sua base com os arquivos
#coletados do dia. Apenas atualiza.
/usr/bin/rrdtool update /root/scripts/download.rrd $datastamp:`cat
update_d`
/usr/bin/rrdtool update /root/scripts/upload.rrd $datastamp:`cat
update_u`
Script NGRAPHS: script responsável por gerar os gráficos e
disponibilizar automaticamente nos diretórios. Cria os gráficos, gera
diretórios de acordo com a data.
#!/bin/bash
#NGRAPHS: script de criação de gráficos, árvore de diretórios de
disponibilização no apache. por Giovane Moreira [email protected]
#primeiramente devemos testar se há realmente os diretórios para
guardar os gráficos. A estrutura de diretórios segue o padrã
#graphs/ANO/MES <DENTRO DE MES TEM AS PASTAS
#mensal,1st,2nd,3rd,last,cada qual com 6 gráficos distintos.
14
#após atualizar os rrd , é preciso gerar os gráficos novamente e
#disponibilizar.
cd /root/scripts
ano=`date +%y`
mes=`date +%m`
temp=`date +%d`
ano_mes=`echo graphs/$ano/$mes`
ano_dir=`echo graphs/$ano`
rrdtool=/usr/bin/rrdtool
#determina qual semana estamos, se é 1, 2 3 ou 4
if [ $temp -lt 8 ]; then
semana=1
elif [ $temp -ge 7 ] && [ $temp -lt 15 ]; then
semana=2
elif [ $temp -ge 15 ] && [ $temp -lt 22 ]; then
semana=3
else semana=4
fi
#testa se os diretórios existem. Os gráfico são organizados
#árvore como: <ano><mes><semana>
numa
if [ -d $ano_mes ];
then
echo "os dir estão ok"
elif [ -d $ano_dir ];
then
#cria dir do mes novo
mkdir /root/scripts/graphs/$ano/$mes
mkdir /root/scripts/graphs/$ano/$mes/mensal
mkdir /root/scripts/graphs/$ano/$mes/1st
mkdir /root/scripts/graphs/$ano/$mes/2nd
mkdir /root/scripts/graphs/$ano/$mes/3rd
mkdir /root/scripts/graphs/$ano/$mes/last
else
mkdir
mkdir
mkdir
mkdir
mkdir
mkdir
mkdir
/root/scripts/graphs/$ano
/root/scripts/graphs/$ano/$mes
/root/scripts/graphs/$ano/$mes/mensal
/root/scripts/graphs/$ano/$mes/1st
/root/scripts/graphs/$ano/$mes/2nd
/root/scripts/graphs/$ano/$mes/3rd
/root/scripts/graphs/$ano/$mes/last
fi
#funções que geram os gráficos.. serão invocadas logo
abaixo...
#Geral_updown: gera gráfico de upload e download total, sem
#dividir por portas.
Geral_updown() {
15
#gráfico down e upload total
syear=$1 #syear = start year – ano de início
smonth=$2
sday=$3
eano=$4 #eano = end ano – ano de fim
emes=$5
eday=$6
#essa variáveis valem para todas as funções de gráficos desse
#script. Delimitam o intervalo de início e fim da geração dos
#gráficos.
$rrdtool graph Geral_updown.gif --start `date -d ${syear}${smonth}
${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoPGO: Cisco - Downloads e Uploads Volume Total - Ano:$syear
Mês:$smonth" --vertical-label "gigabytes"
DEF:download=download.rrd:download:LAST
DEF:upload=upload.rrd:upload:LAST LINE1:download#ff0000:"Downloads"
LINE2:upload#0400ff:"Uploads" 'GPRINT:download:LAST:Último
Download\:%2.1lf GB' 'GPRINT:upload:LAST:Último Upload\:%2.1lf GB'
'GPRINT:download:MAX:Download Max\:%2.1lf GB'
'GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:
MIN:Download Mín\:%2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lf
GB' -w 509
}
#gera o gráfico de upload e download nas portas específicas.
Portas_updown() {
#gráfico down e upload nas portas específicas
syear=$1
smonth=$2
sday=$3
eano=$4
emes=$5
eday=$6
porta=$7
$rrdtool graph P${porta}_updown.gif --start `date -d ${syear}
${smonth}${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` -title "PoP-GO: Cisco - Downloads e Uploads Volume Total - Porta
$porta Ano:$syear Mês:$smonth" --vertical-label "gigabytes"
DEF:download=download.rrd:p${porta}d:LAST DEF:upload=upload.rrd:p$
{porta}u:LAST LINE1:download#ff0000:"Downloads Porta $porta"
LINE2:upload#0400ff:"Uploads Porta $porta"
'GPRINT:download:LAST:Último Download\:%2.1lf GB'
'GPRINT:upload:LAST:Último Upload\:%2.1lf GB'
'GPRINT:download:MAX:Download Max\:%2.1lf GB' 'GPRINT:up
load:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:MIN:Download Mín\:%
2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lf GB' -w 509
}
All_down() {
#gráfico download geral e na P80,P20 e P25
syear=$1
smonth=$2
sday=$3
eano=$4
emes=$5
eday=$6
16
$rrdtool graph All_down.gif --start `date -d ${syear}${smonth}${sday}
+%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO:
Cisco - Downloads - Volume Total - Total,Portas 80,20,25 Ano:$syear
Mês:$smonth" --vertical-label "gigabytes"
DEF:download=download.rrd:download:LAST
DEF:p80d=download.rrd:p80d:LAST DEF:p20d=download.rrd:p20d:LAST
DEF:p25d=download.rrd:p25d:LAST LINE1:download#ff0000:"Download
Total" LINE2:p80d#0400:"Download Porta 80"
LINE3:p20d#00FF00:"Download Porta 20" 'GPRINT:download:LAST:Último
Download\:%2.1lf GB' 'GPRINT:p80d:LAST:Último Download
80\:%2.1lf GB' 'GPRINT:p20d:LAST:Último Download P20\:%2.1lf GB'
'GPRINT:p25d:LAST:Último Download P25\:%2.1lf GB'
'GPRINT:download:MAX:Download Max\:%2.1lf GB'
'GPRINT:p80d:MAX:Download Max P80 \:%2.1lf GB'
'GPRINT:p20d:MAX:Download Max P20 \:%2.1lf GB'
'GPRINT:p25d:MAX:Download Max P25:%2.1lf GB'
'GPRINT:download:MIN:Download Mín\:%2.1lf GB'
'GPRINT:p80d:MIN:Download Mín P80\:%2.1lf GB'
'GPRINT:p20d:MIN:Download Mín P20\:%2.1lGB'
'GPRINT:p25d:MIN:Download Mín P25\:%2.1lf GB' -w 509
}
All_up() {
#gráfic upload geral e na P80,P20 e P25
$rrdtool graph All_up.gif --start `date -d ${syear}${smonth}${sday}
+%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoP-GO:
Cisco -Uploads - Volume Total - Total,Portas 80,20,25 Ano:$syear
Mês:$smonth" --vertical-label "gigabytes"
DEF:upload=upload.rrd:upload:LAST DEF:p80u=upload
rd:p80u:LAST DEF:p20u=upload.rrd:p20u:LAST
DEF:p25u=upload.rrd:p25u:LAST LINE1:upload#ff0000:"Upload Total"
LINE2:p80u#0400ff:"Upload Porta 80"
INE3:p20u#00FF00:"Upload Porta 20" 'GPRINT:upload:LAST:Último
Upload\:%2.1lf GB' 'GPRINT:p80u:LAST:Último Upload P80\:%2.1lf GB'
'GPRINT:p20u:LAST:Último Upload P20\:%2.1lf GB'
'GPRINT:p25u:LAST:Último Upload P25\:%2.1lf GB'
'GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:p80u:MAX:Upload Max
P80 \:%2.1lf GB' 'GPRINT:p20u:MAX:Upload Max P20 \:%2.1lf GB'
'GPRINT:p25u:MAX:Upload Max P25 \:%2.1lf GB'
'GPRINT:upload:MIN:Upload Mín\:%1lf GB' 'GPRINT:p80u:MIN:Upload Mín
P80\:%2.1lf GB' 'GPRINT:p20u:MIN:Upload Mín P20\:%2.1lf GB'
'GPRINT:p25u:MIN:Upload Mín P25\:%2.1lf GB' -w 509
}
#funções agora que setam variáveis e então invocam as funçoes
#geradoras de gráficos...#Mensal gera gráficos para o mês inteiro,
invocando funções anteriores:
Mensal () {
#seta syear, smonth e sday, eyear,emonth e eday e invoca
syear=$ano
smonth=$mes
sday=01
eyear=$ano
emonth=$mes
eday=07
17
Geral_updown $syear $smonth $sday $eyear $emonth $eday ;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 80;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 20;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_up $syear $smonth $sday $eyear $emonth $eday;
#move paras as devidas pastas
mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/1st/
mv P80_updown.gif /root/scripts/graphs/$ano/$mes/1st/
mv P25_updown.gif /root/scripts/graphs/$ano/$mes/1st/
mv P20_updown.gif /root/scripts/graphs/$ano/$mes/1st/
mv All_down.gif /root/scripts/graphs/$ano/$mes/1st/
mv All_up.gif /root/scripts/graphs/$ano/$mes/1st/
}
#segunda no caso se for a segunda semana do mês
Segunda () {
#seta syear, smonth e sday, eyear,emonth e eday
e invoca
syear=$ano
smonth=$mes
sday=08
eyear=$ano
eday=15
emonth=$mes
Geral_updown $syear $smonth $sday $eyear $emonth $eday ;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 80;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 20;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_up $syear $smonth $sday $eyear $emonth $eday;
#move paras as devidas pastas
mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/2nd/
mv P80_updown.gif /root/scripts/graphs/$ano/$mes/2nd/
mv P25_updown.gif /root/scripts/graphs/$ano/$mes/2nd/
mv P20_updown.gif /root/scripts/graphs/$ano/$mes/2nd/
mv All_down.gif /root/scripts/graphs/$ano/$mes/2nd/
mv All_up.gif /root/scripts/graphs/$ano/$mes/2nd/
}
#para terceira semana do mês
Terceira () {
#seta syear, smonth e sday, eyear,emonth e eday
e invoca
syear=$ano
smonth=$mes
sday=16
eyear=$ano
emonth=$mes
eday=21
18
Geral_updown $syear $smonth $sday $eyear $emonth $eday ;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 80;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 20;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_up $syear $smonth $sday $eyear $emonth $eday ;
#move as pastas pros devidos locaiss pastas
mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/3rd/
mv P80_updown.gif /root/scripts/graphs/$ano/$mes/3rd/
mv P25_updown.gif /root/scripts/graphs/$ano/$mes/3rd/
mv P20_updown.gif /root/scripts/graphs/$ano/$mes/3rd/
mv All_down.gif /root/scripts/graphs/$ano/$mes/3rd/
mv All_up.gif /root/scripts/graphs/$ano/$mes/3rd/
}
#para última semana do mês
Last () {
#seta syear, smonth e sday, eyear,emonth e eday
e invoca
syear=$ano
smonth=$mes
sday=22
eyear=$ano
emonth=$mes
#informa se o mês tem 30 ou 31 ou 28 dias.
case $mes in
O1) eday=31 ;;
02) eday=28 ;;
03) eday=31 ;;
04) eday=30 ;;
05) eday=31 ;;
06) eday=30 ;;
07) eday=31 ;;
08) eday=31 ;;
09) eday=30 ;;
10) eday=31 ;;
11) eday=30 ;;
12) eday=31 ;;
esac
Geral_updown $syear $smonth $sday $eyear $emonth $eday ;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 80;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 20;
Portas_updown $syear $smonth $sday $eyear $emonth $eday 25;
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_up $syear $smonth $sday $eyear $emonth $eday;
#move paras as devidas pastas
mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P80_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P25_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P20_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv All_down.gif /root/scripts/graphs/$ano/$mes/last/
mv All_up.gif /root/scripts/graphs/$ano/$mes/last/
}
19
All_down $syear $smonth $sday $eyear $emonth $eday ;
All_up $syear $smonth $sday $eyear $emonth $eday;
#move paras as devidas pastas
mv Geral_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P80_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P25_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv P20_updown.gif /root/scripts/graphs/$ano/$mes/last/
mv All_down.gif /root/scripts/graphs/$ano/$mes/last/
mv All_up.gif /root/scripts/graphs/$ano/$mes/last/
}
#se for a 1ª semana, não há necessidade de gerar gráfico da 2ªsemana.
if [ $semana -eq 1 ]; then
#gera graficos mensal apenas, e copias ele pra pasta 1st.. pq
#sao iguasi!
Mensal ;
Primeira ;
elif [ $semana -eq 2 ]; then
#gera grafico mensal, 1st e 2nd
Mensal ;
Primeira ;
Segunda ;
elif [ $semana -eq 3 ]; then
#gera grafico mensal, 1st, 2nd e 3rd
Mensal ;
Primeira ;
Segunda ;
Terceira ;
elif [ $semana -eq 4 ]; then
#gera todos os graficos
Mensal ;
Primeira ;
Segunda ;
Terceira ;
Last ;
fi
#copia os gráficos para o diretório correto.
cp -r /root/scripts/graphs /var/www/htdocs
chown -R nobody /var/www/htdocs/graphs
3.2.2 Resultado e produtos obtidos
O produto deste final são os gráficos que são automaticamente
colocados na árvore de diretórios,algo com a figura abaixo:
20
Figura 4: árvore de diretórios gerada pelo script n_generate
A pasta acima na figura 04 indica o ano, 10 o mês, e 1st, 2nd,3rd ,last
indicam a semana do mês. Já mensal é a pasta para o mês inteiro. Cada
pasta dessas recebe arquivos .gif que são os gráficos. Depois basta linkar
isso a um site e estará pronto na internet.
Os gráficos obtidos serão como o abaixo:
Figura 5: Gráfico all_down.gif Primeira semana de abril. Download
separado por porta
Mais gráficos gerados pelos scripts podem ser vistos na seção
monitoramento do site http://www.pop-go.rnp.br
Agora já temos o produto final, porém alguns itens ainda não foram
explicados em relação ao script n_generate.
Um deles é o programa a.out , que converte dados de bytes para
gigabytes. Eis abaixo o código dele:
// a.c – softaware de conversão de valores de byte para gigabytes.
21
#include <stdlib.h>
# include <stdio.h>
#include <math.h>
int main(int argc, char *argv[]) {
if(argc != 2) return(99);
printf("%.3f",((atof(argv[1])/1024)/1024)/1024);
return(0);
}
Outra coisa que ainda não expliquie foi o uso da ferrramenta Rdtool,
como ele opera e como gera os gráficos. Preferi deixar isso para agora para
evitar confusões.
3.2.3. Entendendo o RRDtool
RRDtool é uma ferramenta que cria arquivos na ordem round-robin e
então armazena os valores (como uma base de dados) e depois pode gerar
gráficos a partir desses valores. É uma evolução de outro projeto, o MRTG.
Enquanto MRTG é focado em aplicações SNMP, o RRDTool pode ser usado
para monitorar qualquer tipo de dado, desde dados de rede de
computadores a crescimento de bactérias. Para gerar gráficos, ele requer a
biblioteca gráfica GD.
Antes de usarmos o RRDtool no projeto, precisamos criar os arquivos
.rrd , que serão a base de dados para os dados. É nele que serão inseridos
os valores diários de upload na porta 80, upload total, download na porta
20, etc... .
No uso no PoP-GO decidi criar 2 arquivos: um para dowloads e outro
para uploads. Utilizei o comando:
#Arquivo RRD de downloads
rrdtool create download.rrd --start `date -d 040930 +%s` --step 86400
DS:download:GAUGE:86400:0:200 DS:p80d:GAUGE:86400:0:200
DS:p20d:GAUGE:86400:0:200 DS:p25d:GAUGE:864
00:0:200 RRA:LAST:0.5:1:7 RRA:LAST:0.5:1:30 RRA:LAST:0.5:1:365
#Arquivo RRD de Uploads
rrdtool create upload.rrd --start `date -d 040930 +%s` --step 86400
DS:upload:GAUGE:86400:0:200 DS:p80u:GAUGE:86400:0:200
DS:p20u:GAUGE:86400:0:200 DS:p25u:GAUGE:86400:0
:200 RRA:LAST:0.5:1:7 RRA:LAST:0.5:1:30 RRA:LAST:0.5:1:365
A sintaxe do arquivo de downloads quanto o de uploads é
basicamente a mesma, de forma que basta explicar apenas um deles. O
parâmetro create download.rrd passa ao RRDtool que criaremos um
arquivo novo do zero, com data inicial em 30/09/04 , passado pelo
parâmetro --start . O parâmetro step informa que o passo em segundos
que atualizaremos o arquivo, ou seja, o arquivo será atualizado a cada 24
horas, ou 86400 segundos. É que nossa análise é feita após o fim do dia,
onde extraímos tudo que aconteceu. Já o parâmetro DS:ds-name:DST:dst
22
arguments significa que estamos criando uma fonte de dados. DS é sigla
para Data Source (fonte de dados). Temos várias fontes no script, e pegando
como exemplo a DS:p80u:GAUGE:86400:0:200 temos que p80u é um
nome para nossa data source (na verdade, armazena os uploads da porta
80,sintaxe que eu uso, você pode usar a que quiser). GAUGE significa que
devemos armazenar nosso dado com ele chega. Outras opções no lugar de
GAUGE seriam DERIVE, que armazena a derivada da reta valor que chega
em relação ao valor anterior. Existem outros tipos de fonte de dados (DST –
data source types), consulte as páginas de manual do software para mais
informações. Como argumentos estamos usando 86400, que é o período
para atualização do arquivo. E 0:200 no caso define a faixa máxima de
valores que pode variar este dado, no caso nosso de 0 gigabytes a 200
gigabytes. Qualquer valor fora deixa faixa será interpretado com UNKNOWN.
Por exemplo, não é possível que tenhamos download abaixo de 0.
No que se refere ao comando RRA:LAST:0.5:1:7, RRA é a sigla
para Round-Robin Archive. Um RRA consiste de dados estatísticos de DS
(data sources). A sintaxe genérica para o RRA é RRA:AVERAGE | MIN | MAX
| LAST:xff:steps:rows , que na verdade é parâmetro que diz o que deve
ser feito com os dados do DS.Pode ser uma média e armazenar de hora em
hora, mas no nosso caso ele armazena o último valor recebido. É o arquivo
que determina quantos slots tem para armazenar dados, evitando o
crescimento linear da base de dados. Ele armazena amostras para
semana,mês e ano no nosso caso.
Depois destes arquivos criados, o primeiro passo o armazenar os
dados neles, feito da seguinte forma:
# esse comando diz para atualizar o arquivo dowload.rrd com a data
#atual e o conteúdo extraído de update_d. Vide NGRAPHS.
rrdtool update /root/scripts/download.rrd $datastamp:`cat update_d`
Ou seja, inserimos um valor como por exemplo 20:40:40:32, que
serão os valroes dos downloads geral, na porta 80, 20 e 25 para o dia
(representado por $datastamp, vide NGRAPHS) em questão. No outro dia,
quando rodarmos o script, o datastamp será outro e atualizará
automaticamente o valor.
Com os dados “populados”, basta agora gerarmos os gráficos. O
RRDtool fornece um parâmetro para criar gráficos. Vejamos o exemplo:
$rrdtool graph Geral_updown.gif --start `date -d ${syear}${smonth}
${sday} +%s` --end `date -d ${eano}${emes}${eday} +%s` --title "PoPGO: Cisco - Downloads e Uploads Volume Total - Ano:$syear
Mês:$smonth" --vertical-label "gigabytes"
DEF:download=download.rrd:download:LAST
DEF:upload=upload.rrd:upload:LAST LINE1:download#ff0000:"Downloads"
LINE2:upload#0400ff:"Uploads" 'GPRINT:download:LAST:Último
Download\:%2.1lf GB' 'GPRINT:upload:LAST:Último Upload\:%2.1lf GB'
'GPRINT:download:MAX:Download Max\:%2.1lf GB'
'GPRINT:upload:MAX:Upload Max\:%2.1lf GB' 'GPRINT:download:
23
MIN:Download Mín\:%2.1lf GB' 'GPRINT:upload:MIN:Upload Mín\:%2.1lf
GB' -w 509
}
O parâmetro graph diz ao rrdtool para criar um gráfico de nome
Geral_updown.gif, a partir da data depois de --start. Essa data é a do dia
anterior, visto que geramos o gráfico e análises após a meia noite.
Estabelecemos o fim do gráfico pela opção --end . O parâmetro --title
informa qual será o título que aparecerá no gráfico, no cabeçalho, como na
figura
acima
foi
PoP-GO
...
.
A
linha
DEF:download=download.rrd:download:LAST
serve para buscar dados
no arquivo rrd. Dentro de download.rrd, pegaremos o valor da DS download
com a função de consolidação LAST e armazenaremos num nome virtual
(vname) também chamado download. Esse vname é o download após DEF:.
Aí dentro deste comando quando quisermos nos refererir a este valor de
download dentro de download.rrd, usaremos o nome download apenas. O
parâmetro LINE1:download#ff0000:"Downloads" cria uma linha da cor
ff0000 que conterá o valor de download variando no no intervalo de tempo
que escolhemos acima com --start  --end . O parâmetro
'GPRINT:download:MAX:Download Max\:%2.1lf GB' imprime uma linha
que diz Downlaod Max no gráfico e joga o conteúdo de download na frente.
O parâmetro -w 509 informa a largura máxima da figura, que será 509
pixels. Foi necessário para padronizar o tamanho do gráfico para o site do
PoP-GO.
Pode parecer um pouco complicado, e recomendo leitura das páginas
de manual e tutoriais do site oficial do RRDTool. Com isso fecha-se nossas
ferramentas desenvolvidas e obtivemos o resultado desejado.
Lembre-se que Netflow possibilita vários tipos de relatórios, junto
com flow-tools. Basta usar a criatividade e extair, monitorar e gerar gráficos
de diversas situações. Uma delas seria o tráfego P2P.
Melhorias desse software seriam a integração com um banco de
dados relacional livre e integração com alguma ferramenta de
monitoramento,como o JFFNMS.
Essa seção se focou apenas em apresentar a ferramentas. As
conclusões e análise de resultados podem ser obtidas na seção 4 de
conclusão.
3.3 Pesquisa em Multimídia sobre IP
Meu projeto final de curso se relaciona a multimídia sobre IP. Na RNP
dediquei parte do tempo a pesquisa nessa área. Vários artigos eu li do site
dos Periódicos da Capes, principalmente artigos do IEEE Xplore.
Participei do 5º Fórum Internacional do Software Livre em Porto
Alegre, junho de 2005. Lá vi os trabalhos na mesma área do PoP-BA.
Estavam presentes o pessoal do VideoLan Project, projeto de um player de
24
vídeo e servidor livre. Realizei testes fazendo streaming com esta
ferramenta, e monitorei utilizando o protocolo SNMP com a ferramenta
JFFNMS.
O teste que realizei com o VLC foi fazer um streaming de arquivo de
áudio codificado com MPEG1 layer 3 (MP3) de qualidade fixa de 128kbps
para outra máquina em outra rede. Monitorando a saída da placa de rede,
obtivemos o resultado que pode ser observado relatório incluído no anexo
2.
Li muitos artigos que estão sendo de fundamental importância para
meu projeto final. Os resultados dessa pesquisa poderá ser visto no artigo.
No que se refere ao JFFNMS, criei um guia de instalação para o
Slackware/Linux que pode ser visto no anexo 3. Esse guia foi traduzido do
inglês e adaptado ao Slackware por mim.
4. Conclusão
O desafio lançado pelo PoP-GO sobre mim a fim de obter os
resultados do monitoramento foi muito empolgante. Tive a chance de
aprofundar o estudo em redes de computadores,incluindo aí a pilha TCP/IP,
monitoramento, tecnologias de ponta como Cisco Netflow, segurança,
serviços e métricas de desempenho, aprender muito sobre redes de grande
porte com suas AS,roteamento de borda, uma infinidade inesgotável de
assuntos. Desconheço em qualquer outro lugar do estado de Goiás que se
tenha a mesma estrutura disponível e que eu teria uma oportunidade
semelhante. Somente em estágio eu poderia ter aprendido tanto, foi o local
onde fixei um objetivo e fiz pesquisa,baseado no conhecimento de sala de
aula.
Outro ponto forte foi aprender bastante sobre integração de
ferramentas de software livre. Com o flow-tools se coleta os dados, e com o
rrdtool se armazena faz-se os gráficos (e por sua vez rrdtool utiliza outra
grama de aplicativos livres, como a biblioteca gráfica GD para gerar
gráficos), então automatizar este processo com scripts em Shell e código em
C e finalmente disponibilizar o conteúdo num servidor web (apache,livre) via
ssh. , e integrar uma gama de ferramentas de software livre para gerar um
produto pronto, os gráficos de monitoramento do site do PoP-GO.
Todas essas atividades exigiram muita pesquisa e dedicação. Muitos
dias na internet, falando com os colegas de trabalho (que sem eles isso não
teria sido possível),sempre focando na busca da melhor forma de fazer as
coisas.
Os resultados obtidos foram um sistema operante de monitoramento
para medição de tráfego para o PoP-GO devidamente documentado neste
relatório,utilizando apenas software livres.
Dificuldades sempre existiram durante todo o percurso. Agradeço a
25
todos os colegas de trabalho pela ajuda, a equipe do PoP-GO e da UFGNet.
Uma observação que gostaria de deixar é que este relatório foi
inteiramente feito com software livre. OpenOffice.org como editor de texto,
Dia como programa para gráficos e diagramas.
Antes desse projeto também estive usando outras ferramentas de
monitoramento SNMP,tais como JFFNMS e Cacti. Percebi que em nenhuma
delas existe o suporte de monitoramento com Netflow. Algo para continução
desse projeto seria a integração desses códigos que realizei com algum
software desse nível.
26
Anexo 1
Relatório de análise de tráfego entre redes do
PoP-GO/RNP e Brasil Telecom
Introdução
Este relatório visa estimar o tráfego trocado entre as redes do Ponto
de Presença em Goiás da Rede Nacional de Ensino e Pesquisa (PoP-GO) e
Brasil Telecom. A necessidade de obter estes valores é verificar a viabilidade
do estabelecimento de um Ponto de Troca de Tráfego (PTT) entre as duas
redes em Goías evitando assim todo o percurso até Curitiba que os pacotes
atualmente passam, mesmo se o destino for um host em Goiás.
Para obter estes valores, coletamos por um período de 37 dias (de 22
de Julho à 24 de agosto de 2004, e de 14 de setembro à 17 de setembro) os
dados vindos do roteador Cisco do PoP-GO. (lembramos que julho é o
período de férias acadêmicas da UFG, maior cliente do PoP-GO, e há
redução substancial do tráfego). Os dados obtidos via Netflow foram então
depois analisados com as ferramentas flow-tools, e assim conseguimos as
estatísticas desejadas.
Análise dos dados e resultados
Além da meta primária de obter os valores trocados entre as duas
redes (PoP-GO/RNP e Brasil Telecom), outra meta seria estabelecer quanto
representa a troca de dados com a Brasil Telecom em relação a todo tráfego
gerado. Obtivemos estes valores facilmente com flow-tools.
Começaremos primeiramente analisando toda saída do roteador.
Segue abaixo o resultado:
#RELATÓRIO DE TODA ENTRADA (DOWNLOAD) DO CISCO ROUTER POP-GO/RNP.
#Gerado em: 22/09/04 às 11:37 AM
#Intervalo de coleta: 22/07-24/08 e 14/09-17/09
#
#Sintaxe do comando(usando flow-tools para análise):
#./flow-cat /flows/ /netflow |./flow-stat -f18 >SaidaTOTAL2.txt &
#onde /flows e /netflow são diretórios dos flows capturados
#
# --- ---- ---- Report Information --- --- --#
# Fields:
Total
# Symbols:
Disabled
# Sorting:
None
# Name:
Output interface
#
27
# Args:
#
#
# interface
#
7
2
1
0
./flow-stat -f18
flows
octets
packets
215736716
179471776
75559134
50075433
1812267314100
1291693851690
360257865825
29774437080
3191349487
2948007981
925654315
137316230
Dentre as três interfaces do roteador em questão, a número 7 é a que
representa o link Goiânia-Rio de Janeiro (ATM, 12Mbps upload, 16Mbps
download). Estamos basicamente interessados nesta interface, visto que as
outras são de uso interno do PoP-GO. O output desta interface representa
todo os dados que chegaram até o PoP-GO vindos de redes de fora, ou
seja,downloads. O total de octetos roteados pela interface 7 é de
1812267314100 , que dá um total de 1,648 Terabytes roteados pra dentro
do PoP- GO nesses 37dias.
O outro relatório é o que marca todas as entradas no roteador do
PoP-GO (e devido ao sentido, representam os dados que saem da rede do
PoP-GO para as demais redes, ou seja, upload). Segue ele abaixo:
#RELATÓRIO DE TODA SAÍDA (UPLOAD) DO CISCO ROUTER POP-GO/RNP.
#Gerado em: 22/09/04 às 11:39 AM
#Intervalo de coleta: 22/07-24/08 e 14/09-17/09
#
#sintaxe do comando:
#./flow-cat /flows/ /netflow |./flow-stat -f17 >EntradaTOTAL2.txt &
#onde /flows e /netflow são diretórios dos flows capturados
#
# --- ---- ---- Report Information --- --- --#
# Fields:
Total
# Symbols:
Disabled
# Sorting:
None
# Name:
Input interface
#
# Args:
./flow-stat -f17
#
#
# interface flows
octets
packets
#
7
244924205
1623219546750
3082972241
2
187627046
1558709347852
3151603403
1
88291808
312064574093
967752369
Como o que nos interessa é a interface 7, notamos que ela roteou
1623219546750 octetos. Isso nos dá um valor total de 1,476 Terabytes nos
mesmos 37 dias.
Agora que temos um valor total da saída e entrada na rede do PoPGO. Analisaremos o quanto disso vem da rede da Brasil Telecom. Geramos
dois relatório filtrando as faixas de endereço IP da Brasil Telecom (AS 8167)
28
O primeiro relatório abaixo lista todos os dados vindos da rede Brasil
Telecom.
#RELATÓRIO DE ENTRADA DE DADOS NO POP-GO VINDOS DA BRT
#Gerado em: 22/09/04 às 17:09
#Intervalo de coleta: 22/07-24/08 e 14/09-17/09
#
#Sintaxe do comando:
# ./flow-cat /flows/ /netflow/ | ./flow-filter -f acl_new -SBrT | ./
flow-stat
#-f0 > OrigemBRT2.txt &
#onde /flows e /netflow são diretórios dos flows capturados
#
# --- ---- ---- Report Information --- --- --#
# Fields:
Total
# Symbols:
Disabled
# Sorting:
None
# Name:
Overall Summary
#
# Args:
./flow-stat -f0
#
Total Flows
: 18938016
Total Octets
: 211142339124
Total Packets
: 394304150
Total Time (1/1000 secs) (flows): 136671796704
Duration of data (realtime)
: 4991368
Duration of data (1/1000 secs) : 4294967076
Average flow time (1/1000 secs) : 7216.0000
Average packet size (octets)
: 535.0000
Average flow size (octets)
: 11149.0000
Average packets per flow
: 20.0000
Average flows / second (flow)
: 4.4094
Average flows / second (real)
: 3.7942
Average Kbits / second (flow)
: 393.2833
Average Kbits / second (real)
: 338.4120
Analisando este relatório, temos que entraram no nosso roteador
211142339124 octetos oriundo das Brasil Telecom, o que significa
aproximadamente 196,64 Gigabytes nos 37 dias de coleta. Em relação aos
downloads de todo o PoP-GO, a Brasil Telecom responde sozinha por
11,65%.
Figura 1: Porcentagem dos downloads no roteador
29
Outro relatório é o que marca os dados saem do PoP-GO para a
rede da Brasil Telecom:
#RELATÓRIO DE SAÍDA DE DADOS NO POP-GO COM DESTINO BRT
#Gerado em: 22/09/04 às 17:10
#Intervalo de coleta: 22/07-24/08 e 14/09-17/09
#
#Sintaxe do comando:
#./flow-cat /flows/ /netflow/ | ./flow-filter -f acl_new -DBrT
| ./flow-stat
#-f0 > SaidaBRT2.txt & exit
#onde /flows e /netflow são diretórios dos flows capturados
#
# --- ---- ---- Report Information --- --- --#
# Fields:
Total
# Symbols:
Disabled
# Sorting:
None
# Name:
Overall Summary
#
# Args:
./flow-stat -f0
#
Total Flows
: 17499828
Total Octets
: 286351956238
Total Packets
: 398041084
Total Time (1/1000 secs) (flows): 132781952608
Duration of data (realtime)
: 4991370
Duration of data (1/1000 secs) : 4294966948
Average flow time (1/1000 secs) : 7587.0000
30
Figura 2: Porcentagem dos uploads no roteador
Analisando este relatório, notamos que sairam do roteador do PoPGO 286351956238 octetos para a rede da Brasil Telecom, o que significa
aproximadamente 266,68 Gigabytes nos 37 dias de coleta. Em relação aos
uploads todos do PoP-GO, a Brasil Telecom responde sozinha por 17,64%.
Conclusões
Agora com estes valores obtidos, poderemos decidir a viabilidade
do Ponto de Troca de Tráfego. Os dados foram obtidos como desejado.
Quaisquer dúvidas técnicas e/ou comentários favor entrar em contato no
endereço abaixo.
Giovane Moreira
PoP-GO/RNP
[email protected]
[email protected]
Goiânia, 23 de setembro de 2004.
31
Anexo 2: Streaming com VideoLan Client
Relatório de consumo de largura de banda em transmissão de
conteúdo multimídia utilizando VideoLan Client (VLC)
Giovane Moreira ([email protected])
PoP-GO RNP
6 de Julho de 2004
1. Introdução
Este relatório mostra a experiência do PoP-GO no streaming de
arquivos de áudio e vídeo respectivo consumo de largura de banda (e ter
uma idéia do overhead gerado na transmissão).
O enfoque do artigo é o uso da rede na atividade, e não como realizar
o streaming (visto que a documentação no site do VLC é bastante completa
e simples).
2. Equipamentos,software e rede
Servidor: A máquina utilizada como servidor de streaming foi um IBM
Netvista 6349-KCP. Sistema operacional: Slackware GNU/Linux 9.1 (kernel
2.6.6). VideoLan versão 0.7.1 Bond. Rede: Pertencente a rede A.
Cliente: PC com processador Pentium 4 e 256MB de Memória DDR.
Sistema operacional: Slackware GNU/Linux 9.1 (kernel 2.4.22). VideoLan
versão 0.7.1 Bond.Pertencente a rede B.
No que se refere ao monitoramento, o software JFFNMS(Just For Fun
NMS) foi instalado na máquina servidora e o monitoramento foi feito
observando a saída da sua placa de rede.
As redes A e B redes ethernet de 10Mbps, distantes 2 hops. Ambas
estão nas dependências da Universidade Federal de Goiás.
3. Transmissão e resultados
Seguindo as instruções simples de streaming do VLC, conseguimos
realizar uma transmissão tranqüila com qualidade total (visto que tínhamos
largura de banda a vontade – 10Mbps).
Cenário : Transmissão de arquivo Mpeg 1 Layer 3 (MP3) de 128kpbs
de qualidade fixa. redes distitas.
Hardware: Servidor e Cliente (especificado acima)
32
Rede: Servidor e Cliente em redes diferentes, distantes de 2 hops
entre si.
Arquivos: Lista de MP3s 128Kbits/s.
Duração: 30 minutos
Transmissão: Unicast
Para este caso, segue abaixo o gráfico gerado pelo JFFNMS.
Percebe-se que neste intervalo tivemos uma saída média de
186,31kbps (para MP3s de 128Kbps). Deste modo, temos um overhead
aproximado de 58,31kbps, ou seja, 45,5 % dos 186,31kbps. Este primeiro
relatório mostra a experiência com VideoLan client numa rede interna, com
o cenário descrito acima. Outros cenários serão descritos e testados para o
projeto final de curso de Engenharia de Computação.
33
Anexo 3: Guia de instalação do JFFNMS no Slackware Linux
Guia de Instalação do JFFNMS para Slackware GNU/Linux (testado em
versões 10.0 e 9.1)
Giovane Moreira- [email protected]
PoP-GO - RNP
Este guia é uma versão baseada no guia de instalação oficial do JFFNMS
disponível em http://www.jffnms.org. Esta versão é adaptada ao Slackware
(evita passos desnecessários e alguns bugs! ). Se você estiver fazendo upgrade
de uma versão anterior do JFFNMS, leia o arquivo UPGRADE. Agradecimentos a
Javier Szyszlican pela esta excelente ferramenta e pela documentação, além de
todo suporte.
Requerimentos:
-Sistema Operacional: Slackware GNU/Linux (testado com versões 9.1 e 10.0) JFFNMS roda em Solaris,*BSD e Window$ também.
-Apache - servidor web - o da instalação default serve
-Mysql - o da instalação default serve
-RRDTool - os fontes - Disponível em www.rrdtool.org para gerar os gráficos.
-PHP (>=4.1.2)
-NET-SNMP (4.2.5 ou 4.2.6) - Não incluso no Slackware - disponível em www.netsnmp.org
-GD - incluso na instalação full do Slackware
-GNU Diff - incluso na instalação full do Slackware
-TFTP Server (opicional)
-JFF NMS Integration Packages (TACACS+ & Syslog) (opcional, útil em roteadores)
-Graphviz & WebFonts (http://www.graphviz.org) (opcional)
-NMAP PortScanner > 2.54B (http://www.insecure.org/nmap/) para busca de portas
TCP (opcional)
-Fping (http://www.fping.com)
Instalando:
-Caso o seu Slackware não tenha o MySQL,compile e/ou instale ele. (tive problemas
com o da versão 9.1 - ele não estava startando threads * e matava a máquina -veja
mais sobre isto no final, porém o da 10.0 está normal).
-Caso o seu Slackware não tenha o Apache,compile e/ou instale ele. O .tgz default
do Slackware funciona muito bem :)
-Compile e/ou instale Graphviz and WebFonts (optional)
- Caso o seu Slackware não tenha o Nmap, compile-o e instale. (o default funciona
100%). O Nmap precisa ser set-uid root se você quiser monitoramento de portas UDP
e discovery funcionando Execute:
# chmod +s /usr/bin/nmap
# chmod a+x /usr/bin/nmap
34
-Compile e/ou instale o Fping.
-Verifique se o Cron está rodando (#ps aux |grep crond)
Execute:
# chmod +s /usr/local/sbin/fping
# chmod a+x /usr/local/sbin/fping
-Compile e instale RRDTool (com o ./configure --enable-shared -prefix=/usr) . JFFNMS irá usar estes binários.
-Compile e/ou instale o PHP (ATENÇÃO: O DEFAULT NÃO SERVE!). Voce terá duas
opções: puxar os sources e compilar com os parâmetros abaixo.
Os parâmetros são:
./configure --prefix=/usr --disable-static
--with-apxs=/usr/sbin/apxs --sysconfdir=/etc --enable-discard-path -with-config-file-path=/etc/apache --enable-safe-mode --with-openssl
--enable-bcmath --with-bz2 --with-pic --enable-calendar --enablectype --with-gdbm --with-db3 --enable-dbase --enable-ftp --with-iconv
--with-gd --enable-gd-native-ttf --with-jpeg-dir=/usr --with-png -with-gmp --with-mysql=shared,/usr --with-xml=shared,/usr --withgettext=shared,/usr --with-mm=/usr --enable-trans-sid --enable-shmop
--enable-sockets --with-regex=php --enable-sysvsem --enable-sysvshm
--enable-yp --enable-memory-limit --with-tsrm-pthreads --enableshared --disable-debug --with-zlib=/usr --with-snmp --with-gd -enable-wddx
IMPORTANTE!
Módulos do PHP necessários: sockets, snmp,gd (pgslq e/ou mysql), wddx
(para satélites), pcre(syslog parsing).
Lembre-se de verifcar se seus módulos estão carregados da tela de
setup do JFFNMS (mais adiante mostra como)
Descomente a seguinte linha no /etc/apache/httpd.conf
Include /etc/apache/mod_php.conf
-Mude as seguintes opções no arquivo /etc/apache/php.ini
Register_Globals = On
error_reporting = E_ALL & ~E_NOTICE
allow_url_fopen = On
include_path = .:/usr/share/pear
- Reinicie o apache (qualquer mudança no php.ini requer reiniciar o
apache)
- Opcional: instale os pacotes de integração tac_plus e msyslog (leia
o README e o INSTALL de cada um deles) - particularmente quando
instalei não funcionou e deixei de lado.
- Descompacte a versão do JFFNMS
tar xvzf jffnms-0.7.x.tar.gz
Você então terá um diretório de nome jffnms-0.7.x.
35
-Mova-o para /opt/jffnms (mv jffnms-0.7.x. /opt/jffnms )
-Mude as permissões para o usuário nobody (do apache) poder acessar:
chown -R nobody.nogroup /opt/jffnms/
-Agora vamos adicionar ao cron os jobs a serem executados
su nobody
crontab -e
#adicione tudo abaixo
*/1 * * * * cd /opt/jffnms/engine && php -q consolidate.php >/dev/null 2>&1
*/5 * * * * cd /opt/jffnms/engine && php -q poller.php >/dev/null 2>&1
*/30 * * * * cd /opt/jffnms/engine && php -q rrd_analizer.php >/dev/null 2>&1
*/30 * * * * cd /opt/jffnms/engine && php -q autodiscovery_interfaces.php > /dev/null 2>&1
02 4 * * * cd /opt/jffnms/engine && php -q tftp_get_host_config.php >/dev/null 2>&1
02 5 * * * cd /opt/jffnms/engine && php -q cleanup_raw_tables.php >/dev/null 2>&1
20 5 * * * cd /opt/jffnms/engine && sh tmpwatch.sh /opt/jffnms/engine >/dev/null 2>&1
- Se você quiser saber o que significa cada linha, leia o guia oficial do site :)
- Criando a base de dados: (usei o MySql, porém pode ser o postgree. Se você
instalou o Slackware do zero, você deve executar mysql_install_db como root e
mudar as permissões do /var/lib/mysql para mysql.mysql) .
MySQL:
======
# mysql -u <mysql admin username> -p<password>
mysql> CREATE DATABASE jffnms;
mysql> GRANT ALL PRIVILEGES ON jffnms.* TO jffnms@localhost
IDENTIFIED BY 'jffnms';
mysql> FLUSH PRIVILEGES;
mysql> quit
# mysql -u jffnms -pjffnms jffnms < docs/jffnms-0.7.x.mysql
PostgreSQL:
===========
# psql template1 postgres
template1=# create user jffnms password 'jffnms' createdb;
template1=# \connect template1 jffnms
template1=# create database jffnms;
template1=# \q
# psql jffnms jffnms < docs/jffnms-0.7.x.pgsql
-Configurando o Apache.
Você tem dois modos de configurar:
1. Como um Virtual Host (se você controla um servidor DNS)
<VirtualHost *>
ServerAdmin [email protected]
DocumentRoot /opt/jffnms/htdocs
36
ServerName nms.yournet.com
</VirtualHost>
2. Com um link simbólico
ln -s /opt/jffnms/htdocs /var/www/htdocs/jffnms
(ou o diretório de páginas do seu apache)
O JFFNMS precisa estar ou em um desses modos ou também no main
Document Root (O Javier viu funcionado com ScriptAlias)
- Quase acabando.. restarte o apache, MySQL ou PgSQL, inetd.
- Abra o navegador em http://www.yourserver.com/jffnms/admin/setup.php (ou seu
domínio) ou http://localhost/jffnms/admin/setup.php
Este script mostrará se está tudo ok suas configurações, verifique todas as opções
antes de prosseguir.
- Depois de checar as opções, você está apto a acessar o JFFNMS .
Acesse http://www.yourserver.com/jffnms/ ou http://localhost/jffnms/
login: admin
password: admin
Agora você está no sistema. Agora vem a parte de configuração
- Esta é a ordem de criação dos registros:
Necessários:
Zones (vá em Admin/Hosts/Zones) - descreve as zonas geográficas
Customers(vá em Admin/Users/Customers) controlam diferentes interfaces
Hosts (vá em Admin/Hosts/Hosts) residem em Zonas
Interfaces (vá em Admin/Hosts/Interfaces) correspodem a um Host e um Customer
Opcional:
Users (vá em Admin/Users/Users) podem acessar o NMS.
Você pode definir seu submapa em Admin/Hosts/Submap)
E Fazer uma relação entre Interface e submap em View.
Tente não usar registros UNKNOWN (Uknown Host, Unknown Zone, Unknown
Customer,etc).
Créditos do Desenvolvedor:
====================================================
=====================
Se você precisar de algo, nos contate via: [email protected]
Obrigado por usar o 'Just For Fun' Network Management System
Não se esqueça do doar ao projeto se você o achar útil para seu trablalho.
====================================================
=====================
Javier Szyszlican aka SzYsZ
Buenos Aires, Argentina
[email protected] (please try the mailing list first)
37
ICQ #397319
Tradução e adaptação ao Slackware:
Giovane Moreira
Goiânia,Goiás, Brasil.
PoP-GO-RNP
[email protected]
[email protected]
38
Bibliografia resumida
Andrew S. Tanembaum, Redes de Computadores, Editora Campus,
2003.
Daniel A. Menascé e Virgílio A. F. Almeida, Planejamento de
Capacidade para Serviços na Web , Editora Campus, 2002.
Adolfo Rodriguez, John Gatrell, John Karas e Roland Peschke, TCP/IP
Tutorial and Techincal Overview, IBM Corporation, 2001.
JFFNMS - Just For Fun Network Management System, www.jffnms.org
Flow-tools, http://www.splintered.net/sw/flow-tools/
Cisco IOS Software Netflow,
http://www.cisco.com/warp/ public/732/Tech/nmp/netflow/index.shtml
Net-SNMP, http://net-snmp.sourceforge.net/
The Slackware Linux Project, http://www.slackware.com/
Progamando
em
http://www.devin.com.br/eitch/shell_script/
Shell
Script,
Daniel P. Bovet, Marco Cesati, Understanding the Linux Kernel,
O'Reilly, 2002.
RRDTool, http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/
39
Download

Monitoramento de redes utilizando NetFlow - PoP-GO