3.3 Projeto
3.3.4 Definição das classes do Mib Browser e do módulo central da plataforma
Na fase de análise do sistema, foram definidas as classes necessárias para o
desenvolvimento do MIB Browser e do módulo central da plataforma, estas classes
também serão utilizadas no desenvolvimento dos outros módulos da plataforma.
Foram definidas 5 classes:
“MibBrowser.class” implementa a interface gráfica do MIB Browser. É
através desta classe que o administrador da rede tem acesso as operações
do SNMP;
“ModuloCentral.class” implementa a interface gráfica do módulo central;
“ArvoreMib2.class” implementa a estrutura da árvore MIB II,
desenvolvida com o objetivo de oferecer uma interface com todos os
objetos pertencentes a RFC 1213;
“OperacoesBD.class” realiza a conexão e as operações com o banco de
dados MySQL;
“OperacoesComuns.class” disponibiliza as operações de imprimir, salvar
arquivo, ler arquivos etc;
“OperacoesSNMP.class” realiza a interface entre as classes do projeto e o
pacote SNMP, implementando as operações pertencentes ao protocolo
SNMP. É através desta classe que é realizada a conexão com o agente, e
realizada as operações de leitura, escrita ou trap.
Na figura 3.4 é possível observar as funções que cada classe desempenha no
projeto.
Figura 3.4 - Interação entre as classes Java
3.4 Conclusão
A modelagem do banco de dados foi realizada tentando obter uma estrutura
de tabelas que proporcionasse um bom desempenho nas operações com o banco de
dados. A quantidade de dados armazenada durante as coletas do módulo central é
relativamente alta e não poderia haver perda destas informações em conseqüência de
um baixo desempenho do banco de dados. Diante destes requisitos, definiu-se a
modelagem do banco de dados e, pelos testes realizados, esta modelagem atendeu as
necessidades do sistema.
Julgou-se adequada a linguagem Java para a implementação do MIB
Browser e do módulo central da plataforma. Após a escolha do pacote SNMP a ser
utilizado e um estudo realizado sobre o seu funcionamento, passou-se à definição das
classes que foram necessárias para a implementação destes dois módulos.
Neste capítulo foi apresentada a modelagem do sistema e do banco de dados.
Destaca-se, neste capítulo, a definição das classes que foram implementadas e os
motivos que levaram à escolha da plataforma Java para o desenvolvimento das classes.
A partir da modelagem do sistema, da modelagem do banco de dados e da
definição das classes, foram desenvolvidos o MIB Browser e o módulo central da
Plataforma de Gerência de Redes. Neste capítulo são apresentadas algumas etapas do
desenvolvimento.
4.1 MIB Browser
Conforme definido nos requisitos funcionais, o MIB Browser destina-se a
oferecer uma interface ao administrador da rede, onde ele possa realizar as operações
de leitura e escrita dos objetos da MIB II. Através do MIB Browser é possível realizar
as operações SNMP em qualquer um dos equipamentos gerenciáveis da rede. A figura
4.1 mostra a interface gráfica desenvolvida para o MIB Browser.
Destacam-se na Figura 4.1, os seguintes ítens:
IP do Agente corresponde ao endereço IP do agente gerenciável em que se
deseja realizar as operações SNMP;
Communit é uma senha de acesso do agente, esta senha é configurada em
todos os agentes com suporte ao SNMP. Cada agente pode ter mais do que
uma senha de communit configurada. Em geral, é definida uma senha como
“public” que permite que sejam realizadas somente as operações de leitura
do agente, e uma ou mais senhas privadas, estas configuradas para permitir
leitura e escrita, ou somente leitura ou somente escrita;
Timeout é o tempo em segundos (de um a quinze segundos) em que o
software vai aguardar um retorno do agente após uma solicitação de leitura
ou escrita. Caso este tempo expire e o agente ainda não tenha efetuado a
operação, o processo é cancelado;
Figura 4.1 - MIB Browser
No lado esquerdo observa-se a estrutura da árvore MIB II. Nesta árvore estão
definidos todos os objetos, seguindo as definições da RFC 1213, que
padroniza a MIB II;
Logo abaixo da árvore há um campo que apresenta os dados referentes ao
objeto selecionado na árvore. Ao ser realizada a navegação, este campo vai
mostrar o OID correspondente ao objeto, o seu nome, sua sintaxe, tipo de
acesso e seu status. Com um clique do botão direito do mouse neste campo é
possível visualizar a descrição do objeto.
À direita está a área de resultados; a cada operação efetuada o resultado é
adicionado nesta área. Os dados consultados são gerados como um arquivo
texto comum, possibilitando a edição, impressão e armazenamento das
informações.
4.1.1 Árvore MIB
A árvore MIB foi implementada de acordo com a RFC-1213. Na figura 4.2
pode-se visualizar um fragmento de código da implementação (ArvoreMib2.class).
Figura 4.2 - Fragmento do código “ArvoreMib2.class”
No fragmento apresentado na figura 4.2, destaca-se o método onde a
estrutura da árvore é formada. Neste fragmento de código estão sendo definidos os nós
iniciais da árvore (linhas 2 a 7) até se chegar ao nó mib2 (linha 9), onde são inseridos
os objetos do grupo system (linhas 10 a 16) e iniciada a definição dos objetos do grupo
interface (linha 17). Na continuação deste código estão todos os outros objetos
pertencentes a MIB-II.
Após o administrador da rede selecionar o objeto a ser consultado, é
1.public ArvoreMib2(){
2.
add(iso);
3.
iso.add(org);
4.
org.add(dod);
5.
dod.add(internet);
6.
internet.add(mgmt);
7.
mgmt.add(mib2);
8.
9.
mib2.add(system);
10. system.add(sysDescr);
11. system.add(sysObjectID);
12. system.add(sysUpTime);
13. system.add(sysContact);
14. system.add(sysName);
15. system.add(sysLocation);
16. system.add(sysServices);
17. mib2.add(interfaces);
necessário utilizar o protocolo SNMP para realizar as operações de leitura e escrita dos
objetos gerenciáveis. Estas operações foram implementadas através da classe
OperacoesSNMP.class (figura 4.3).
Figura 4.3 - Fragmento do código “OperacoesSNMP.class”
No fragmento da figura 4.3 é apresentado uma parte do código onde está
sendo realizada a operação get do SNMP. Destaca-se no código a obtenção do sufixo
do objeto através do seu prefixo (linhas 7 a 10), uma vez que se obteve o sufixo é
realizada a leitura do objeto no agente (linha 12).
Ainda, no desenvolvimento do MIB Browser, foi necessário utilizar funções
para limpar a tela, salvar arquivos etc.
No fragmento de código da figura 4.4, destaca-se o método utilizado para
1.while((itemID.indexOf(parOid)>=0)&&(verifTentativas !=
0)){
2.
verifLeitura = true;
3.
SNMPObject snmpValue = null;
4.
do{
5.
verifTentativas--;
6.
try{
7.
SNMPVarBindList newVars =
interfaceSnmp.getNextMIBEntry( itemID );
8.
SNMPSequence pair =
(SNMPSequence)(newVars.getSNMPObjectAt(0));
9.
SNMPObjectIdentifier snmpOID =
(SNMPObjectIdentifier)pair.getSNMPObjectAt(0);
10.
itemID = snmpOID.toString();
11.
//realiza a leitura do objeto no agente
12.
snmpValue = pair.getSNMPObjectAt(1);
13.
verifLeitura = false;
14.
verifTentativas = parTentativas;
15. }catch(Exception ex){
verifLeitura = true; }
16. }while((verifLeitura)&&(verifTentativas != 0));
17. if(verifLeitura){
salvar os dados obtidos nas consultas em alguma unidade de disco selecionada pelo
administrador.
Figura 4.4 - Fragmento do código “OperacoesComuns.class”
Na figura 4.5, observa-se a opção de leitura em grupo do MIB Browser; que
permite ao administrador selecionar um conjunto de objetos e definir um período e
intervalo de tempo entre as coletas. Nesta opção é possível, por exemplo, selecionar os
objetos ifInOctets e ifOutOctet e configurar as leituras, de forma que sejam repetidas
por um período de 2 horas com intervalos de 10 minutos. Isto permite ao
administrador deixar o MIB Browser realizando as coletas enquanto ele realiza outras
atividades. Ao final da leitura, o administrador pode imprimir ou salvar o arquivo
1.public void salvarArquivo( JTextArea jta ){
2.
JFileChooser fc = new JFileChooser();
3.
fc.setDialogType(JFileChooser.SAVE_DIALOG);
4.
fc.setDialogTitle("Salvar Resultados:");
5.
fc.setApproveButtonText("Salvar");
6.
if(fc.showSaveDialog( this ) ==
JFileChooser.CANCEL_OPTION )
7.
return;
8.
try{
9.
File f = fc.getSelectedFile();
10. FileOutputStream fos = new FileOutputStream(f);
11. DataOutputStream dos = new DataOutputStream(fos);
12. dos.writeBytes( jta.getText() );
13. }catch(FileNotFoundException fnfe){
14. //System.out.println("File not found");
15. }catch(IOException ioe){
16. //System.out.println("IOException");
17. }catch(Exception e){
18. //System.exit(0);
19. }
20.}
gerado para uma análise posterior.
Figura 4.5 - Opção de leitura em grupo
As operações (Leitura Individual e Leitura em Grupo) são independentes.
Caso o administrador queira deixar um conjunto de leituras em grupo sendo
executadas enquanto utiliza a opção leitura individual, basta que ele navegue entre as
duas opções, podendo realizar leituras individuais utilizando outro endereço IP,
timeout ou senha de communit.
4.2 Módulo central
O módulo central da plataforma tem o objetivo de realizar a leitura e
armazenamento dos objetos gerenciáveis, disponibilizando assim uma base de dados
dos objetos do agente. Os dados armazenados no banco de dados serão utilizados pelos
outros módulos da plataforma. Este módulo têm como função apenas realizar a leitura
e gravação dos dados no banco de dados, não executando nenhuma operação sobre
eles.
Seu funcionamento é similar à Leitura em Grupo utilizada no MIB Browser,
tendo como maior diferença o fato das leituras aqui serem armazenadas em um banco
de dados. A Figura 4.6 mostra a interface do módulo central executando dois
processos. Cada processo é uma conexão com um agente gerenciável diferente, que vai
ficar realizando a leitura de todos os seus objetos (MIB II). As leituras são repetidas a
cada intervalo de tempo e período informado pelo administrador. Para adicionar um
novo processo, basta que o administrador informe:
‘IP do Agente’ é o endereço IP do agente gerenciável, caso já exista um
processo em execução com o mesmo IP, o processo será rejeitado;
‘Communit’ é a senha de communit do agente;
‘Timeout’ é o tempo em segundos (de um a quinze segundos) em que o
software vai aguardar um retorno do agente após uma solicitação de leitura,
caso este tempo expire e o agente ainda não tenha retornado algo, o sistema
vai verificar a ‘Qtda de tentativas’;
‘Qtda Tentativas’ é um contador que toda vez que o limite de timeout
estourar vai verificar se deve ou não realizar a releitura do objeto. Caso a
leitura falhe em todas as tentativas o objeto vai ser gravado no banco de
dados com valor null;
‘Tempo Coleta’ é o tempo em que o processo vai permanecer em execução,
caso este valor seja deixado em zero, o processo vai permanecer em
execução por aproximadamente um ano;
‘Intervalo’ é o intervalo em minutos entre duas leituras consecutivas.
Após a informação dos dados, basta que o administrador pressione o botão
‘Iniciar’, desta forma, o processo entra na fila dos Processos em Execução. Para
cancelar um processo, basta que seja selecionado o processo e pressionada a tecla
DEL, o programa vai concluir a leitura dos objetos que restavam durante aquele ciclo,
salvar no banco de dados e eliminar o processo. Os dados que já haviam sido
realizados e salvos no banco de dados vão permanecer como histórico.
desenvolvimento da classe OperacoesBD.class, responsável pela conexão e
armazenamento dos dados no banco de dados. Na figura 4.7 pode-se visualizar um
fragmento de código desta classe.
Figura 4.6 – Módulo central
No fragmento de código apresentado na figura 4.7 destacam-se os métodos
utilizados para realizar a conexão e as operações com o banco de dados.
Figura 4.7 - Fragmento do código “OperacoesBD.class”
4.3 Conclusão
No pacote SNMP utilizado, estão definidos os valores padrões das portas do
SNMP. Quando se tentou realizar as alterações necessárias no pacote para permitir a
flexibilização da configuração do número da porta, constatou-se que, mesmo
possuindo distribuição open-source, o pacote não permitia alterações em seus arquivos
.class. Acredita-se que os códigos fonte disponibilizados no site do desenvolvedor não
sejam de uma mesma versão dos arquivos .class disponibilizados, impossibilitando
desta forma que as classes pertencentes ao pacote sejam recompiladas. No entanto, os
valores padrões das portas não são comumente alterados.
Dentre os requisitos do MIB Browser está definido o uso dos objetos da
1.public void conectarBanco() throws Exception {
2.
final String driver = "com.mysql.jdbc.Driver";
3.
final String url =
"jdbc:mysql://127.0.0.1:3306/plataformaBD";
4.
final String usuario = "root";
5.
final String senha = "";
6.
Class.forName(driver);
7.
conexao = DriverManager.getConnection(url ,
usuario , senha);
8.}
9.public void operacaoDados(String dados) throws
SQLException{
10. instrucao = conexao.createStatement();
11. if(instrucao.executeUpdate(dados) != 1){ }
12. instrucao.close();
13. //conexao.close();
14.}
MIB-II. Mas, é comum os fabricantes de equipamentos de redes, criarem suas próprias
MIBs com objetos específicos. A leitura dos objetos destas outras MIBs estão
limitadas a uma opção do MIB Browser onde o administrador de redes tem que indicar
o valor do OID correspondente ao objeto desejado.
Neste capítulo foi realizada uma descrição de algumas etapas da
implementação do módulo central e do MIB Browser da plataforma de gerência de
redes. Pode-se observar que o pacote SNMP escolhido, o uso do paradigma de
orientação a objetos e a linguagem Java foram adequados para as implementações
realizadas. Os códigos fontes completos das implementações estão nos apêndices.
As redes de computadores foram concebidas, inicialmente, como um meio de
compartilhar dispositivos periféricos mais caros como impressoras, modens de alta
velocidade etc. Entretanto, à medida que as redes crescem e tornam-se integradas às
organizações, o compartilhamento dos dispositivos toma aspecto secundário em
comparação às outras vantagens oferecidas. Desta forma, as redes passam a fazer parte
do cotidiano dos usuários como uma ferramenta que oferece recursos e serviços que
permitem a integração e o aumento de produtividade.
A gerência de redes está associada ao controle de atividades e ao
monitoramento do uso de recursos da rede. As tarefas básicas da gerência de redes são:
obter informações da rede, tratar estas informações de maneira a possibilitar um
diagnóstico e encaminhar as soluções dos problemas. Para cumprir estes objetivos, as
funções de gerência devem ser embutidas nos seus diversos componentes,
possibilitando descobrir, prever e reagir a problemas.
O desenvolvimento de sistemas de gerência de redes foi facilitado com a
padronização dos protocolos de gerência, destacando a definição do modelo de
referência OSI (protocolo CMIP) e posteriormente, o modelo de referência Internet
(protocolo SNMP). O objetivo destes modelos são definir um padrão comum a todos
os fabricantes, permitindo assim uma compatibilidade maior entre as atividades de
gerência. Atualmente, praticamente todos os equipamentos de redes gerenciáveis,
oferecem acesso através do protocolo SNMP.
Este trabalho, teve enfoque na gerência de redes do modelo Internet,
portanto, foi utilizado o protocolo SNMP. As informações que se pode monitorar com
o SNMP variam de itens relativamente simples e padronizados, como o volume de
tráfego fluindo em uma interface, até itens mais complexos de hardware de
fornecedores específicos, por exemplo, a temperatura do ar dentro de um roteador. O
SNMP oferece aos usuários operações para leitura e escrita que permitem o
gerenciamento remoto dos dispositivos da rede. O SNMP vem sofrendo atualizações
visando melhorar o seu desempenho, segurança e adaptações às necessidades dos
novos paradigmas de rede que estão surgindo. O SNMPv2, lançado em 1992, já está
consolidado pelo IETF, porém, devido à diferenças em como implementar alguns
destes conceitos, resultou em duas abordagens diferentes chamadas de SNMPv2 e
SNMPv2*. Visando consolidar estas duas abordagens em uma única proposta, além de
implementar novas melhorias, foi criado pelo IETF o SNMPv3, que deve ser a
próxima versão a alcançar o status de padrão.
Uma MIB pode ser considerada um banco de dados de objetos gerenciados
que o agente rastreia. Todo tipo de informação sobre o status ou estatísticas acessadas
pelo gerenciador é definida em uma MIB. Um agente pode implementar várias MIBs,
mas todos os agentes implementam a MIB-II, que é padronizada pela RFC 1213. Este
padrão define variáveis para elementos como dados estatísticos de uma interface,
assim como outros aspectos relacionados ao próprio sistema. A MIB-II, oferece um
conjunto de informações padrões, porém, há situações em que é necessário outras
informações adicionais às contidas na MIB-II. Dentre os requisitos do MIB Browser
foi definido o uso dos objetos da MIB-II. Mas, é comum os fabricantes de
equipamentos de redes criarem suas próprias MIBs com objetos específicos. A leitura
dos objetos destas outras MIBs esta limitada a uma opção do MIB Browser, onde o
administrador de redes deve indicar o valor do OID correspondente ao objeto
desejado. Sugere-se como trabalho futuro, a implementação de uma árvore que
possibilite carregar outras MIBs de forma dinâmica, facilitando a leitura destes objetos
específicos.
Em paralelo a este trabalho, estão sendo desenvolvidos os módulos
relacionados à gerência de desempenho e à gerência de falhas. Porém, estes dois
módulos estão limitados à geração de informações a partir de consultas aos dados
armazenados pelo módulo central no banco de dados, estes dois módulos estão sendo
desenvolvidos em PHP. Portanto, há a necessidade de realização de testes de
acoplamento entre as classes desenvolvidas em Java e PHP (Hypertext Preprocessor).
Pretende-se, utilizar as classes já implementadas e testadas para realizar consultas
SNMP através do PHP, possibilitando a geração de gráficos e informações em tempo
real, através da Web.
Durante o segundo semestre de 2003, na disciplina de Análise de
Desempenho, foi realizado um teste de uso do MIB Browser. Os acadêmicos do 6
ºsemestre, utilizaram o software para coleta de informações em equipamentos
gerenciáveis. Através da observação do uso do software e dos comentário realizados
pelos alunos, foi identificada a ausência de informações adicionais sobre os objetos
consultados, através do botão direito do mouse (help), entre outras. Diversas
deficiências foram corrigidas. Porém, destaca-se a necessidade de um teste de uso mais
refinado, feito com administradores de redes da região do Planalto Catarinense.
O objetivo principal deste trabalho foi o desenvolvimento do MIB Browser e
do módulo central de uma plataforma para gerência de redes. Pode-se observar que a
linguagem Java e o pacote SNMP escolhido para o desenvolvimento das classes
modeladas foram adequados. A modelagem do banco de dados, atendeu aos requisitos
estabelecidos na fase de projeto.
COMER, D. E. Interligação em Redes com TCP/IP. Rio de Janeiro: Campus, 1998.
v. 1. 672 p.
DE FRANCESCHI, A. S. M. Aplicação de Técnicas de Inteligência Artificial
Conexionista no Desenvolvimento de Agentes para Gerência de Redes. 2003. 114
f. Tese (Doutorado em Engenharia Elétrica) – Programa de Pós-graduação em
Engenharia Elétrica, Universidade Federal de Santa Catarina, Florianópolis.
DEITEL, H. M.; DEITEL, P. J. JAVA Como Programar. 3, ed. Porto Alegre:
Bookman, 2001. 1201 p.
LOPES, R. V.; SAUVÉ, J. P.; NICOLLETTI, P. S. Melhores Práticas para Gerência
de Redes de Computadores. Rio de Janeiro: Campus, 2003. 373 p.
MAURO, D. R.; SCHMIDT, K. J. SNMP Essencial. Tradução de Teresa Cristina
Feliz de Souza. Rio de Janeiro: Campus, 2001. 316 p.
MEIRELLES, L. F. T. Gerenciamento de Redes: Apostilas. UCPel, 1999. Disponível
em: <http://redes.ucpel.tche.br/ensino/070020/html/apostila.html >. Acesso em: 09
mai. 2003.
MORAES, R. A. R.; DE FRANCESCHI, A. S. M.Metodologia para o
desenvolvimento de uma Plataforma de Gerência de Redes utilizando agentes
inteligentes. In: XX Simpósio Brasileiro de Telecomunicações - SBrT, 2003, Rio de
Janeiro - RJ.
RAMOS, A. C. Desenvolvimento de um protótipo de MIB-Browser em Delphi.
2001. 74 f. Trabalho de Conclusão de Curso (Bacharelado em Informática) –
Departamento de Ciências Exatas e Tecnológicas, Universidade do Planalto
Catarinense, Lages.
SEVY, J. JAVA SNMP Stack And Applications. Drexel University’s, 2000.
Disponível em: <http://edge.mcs.drexel.edu/GICL/people/sevy/ >. Acesso em: 10 jun.
2003.
SZTAJNBERG, A. Gerenciamento de Redes: Conceitos básicos sobre os protocolos
SNMP e CMIP. Disponível em: <http://www.gta.ufrj.br/~alexzt/ger/snmpcmip.html>.
Acesso em: 01 mai. 2003.
ALBUQUERQUE, F. TCP/IP Internet: Programação de sistemas distribuídos
HTML, Javascript e JAVA. Rio de Janeiro: Axcel, 2001. 492 p.
ARTOLA, E. S. MIB (Management Information Base). Universidade Federal do
Rio Grande do Sul, 1995. Disponível em: <http://penta.ufrgs.br/gr952/e_capa.html>.
Acesso em: 01 mar. 2003.
COELHO, L.; MORAES, R. A. R.; DE FRANCESCHI, A. S. M. Uma versão
preliminar do MIB Browser de uma plataforma de gerência de redes. In: Encontro
de Ciência e Tecnologia - ECTEC, 2003, Lages - SC.
CHESANI, L. SNMP - Simple Network Management Protocol. Universidade
Federal do Rio Grande do Sul, 1995. Disponível em:
<http://penta.ufrgs.br/gr952/trab1/snmp_snmp.html>. Acesso em: 06 mar. 2003.
DE FRANCESCHI, A. S. M.; MORAES, R. A. R. Agentes inteligentes:
Desenvolvimento de baselines utilizando redes neurais artificiais. In: IV Simpósio
de Informática do Planalto Médio, 2003, Passo Fundo - RS.
TORRES, G. Redes de Computadores: Curso completo. Rio de Janeiro: Campus,
2001. 664 p.
STALLINGS, W. SNMP, SNMPv2, SNMPv3, and RMON 1 and 2. 3. ed.
Massachusetts: Addison Wesley Longman, 1999. 619 p.
POSTEL, J. User Datagram Protocol. RFC 768. USC/Information Sciences Institute,
November 1980. Disponível em: <http://www.rfc-editor.org/rfcsearch.html>. Acesso
em: 05 mai. 2003.
MILLER, M. A. Managing Internetworks With SNMP. 3. ed. Canadá: IDG Books,
1999. 661.
Apêndice 1: MIBBROWSER.JAVA
Apêndice 2: MODULOCENTRAL.JAVA
Apêndice 3: ARVOREMIB2.JAVA
Apêndice 4: OPERACOESSNMP.JAVA
Apêndice 5: OPERACOESCOMUNS.JAVA
Apêndice 6: OperacoesBD.java
/**
MibBrowser.java
Desenvolvida por Luciano Coelho
Quando instanciada esta classe, o resultado vai ser a interface com o usuário do Mib Browser
*/
/** Importação de pacotes necessarios */ import java.awt.*; import java.awt.event.*; import java.util.*; import java.text.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.tree.*; import javax.swing.event.*; import javax.swing.text.MaskFormatter;
No documento
IMPLEMENTAÇÃO DO MIB BROWSER E DO MÓDULO CENTRAL DE UMA PLATAFORMA DE GERÊNCIA DE REDES
(páginas 51-129)