Fiz uma pequena coleção de ícones para Zabbix para usar nos meus mapas e estou disponibilizando aqui!
Abaixo uma imagem deles:
Marcelo Ariatti disponibilizou uma série de ícones feitos por ele, e me autorizou a disponibiliza-los aqui!
Abaixo uma imagem deles:
A utilização e distribuição é livre.
terça-feira, 18 de dezembro de 2012
Coleção de Ícones para Zabbix
Marcadores:
Ícones,
Monitoramento,
Open Source,
Software Livre,
SysAdmin,
Zabbix
segunda-feira, 10 de dezembro de 2012
Conversão de Máquina Física em Máquina Virtual
Introdução:
O VMware vCenter Converter Standalone permite converter máquinas físicas em virtuais, o que já é bem interessante, mas além disso ele permite fazer essa conversão direto para um servidor de virtualização VMware ESX ou VMware ESXi.
Instalação do VMware vCenter Converter Standalone
Instalar a última versão do software VMware vCenter Converter Standalone no site da VMware, é necessário cadastro gratuito no site.
O processo é bem simples, next, next, finish.
Processo de Conversão da máquina
Abra o VMware vCenter Converter Standalone e clique em “Convert machine”.
Configure as opções de acordo com as necessidades:
Select source type: Tipo de máquina de origem.
Specify the powered-on-machine: A própria máquina local ou uma máquina remota.
A remote machine:
Ip addres or name: Nome ou IP da máquina.
User name: Login da máquina.
Password: Senha do usuário acima.
OS Family: Escolher entre Windows ou Linux.
Clique em “View source details...”.
No alerta que surge clique em “Yes”.
O software faz o levantamento das configurações da máquina. Aguarde.
Surge a janela com as configurações da máquina. Confira os dados e clique em “Close”.
Se tudo estiver correto clique em “Next”.
No aviso do certificado clique em “Ignore”.
Surge a janela com as informações da máquina de destino, se você quiser pode alterar o nome da máquina, observe também que são exibidas todas as VMs existentes no destino e seu status atual, se tudo estiver certo clique em “Next”.
Nesta tela podemos escolher qual datastore e versão da máquina virtual serão utilizados. Clique em “Next”.
Este é o resumo de acordo com as informações levantadas, uma série de configurações pode ser realizada, mas o que nos interessa é a seção “Helper VM network”, clique em “Edit”.
É preciso utilizar um IP da mesma rede que a máquina que será migrada, faça as configurações necessárias e clique em “Next”.
Resumo da conversão, se tudo estiver de acordo clique em “Finish”.
O processo inicia e exibe o tempo estimado inicial.
Durante o processo de conversão, o tempo estimado é automaticamente ajustado.
Se tudo ocorreu de forma correta, a mensagem de “Completed” é exibida em “Status”.
Alterações pós-conversão
Conecte-se no Servidor de Virtualização para onde a máquina foi migrada.
Selecione a máquina e clique em “Power On”.
Depois de iniciada a máquina é preciso alterar o script de inicialização da placa de rede, anote o endereço MAC da placa de rede.
Vamos copiar o conteúdo do script de inicialização original da máquina e edita-lo.
Alterando o endereço MAC para o atual.
Desligue a máquina antiga e reinicie a máquina nova.
O VMware vCenter Converter Standalone permite converter máquinas físicas em virtuais, o que já é bem interessante, mas além disso ele permite fazer essa conversão direto para um servidor de virtualização VMware ESX ou VMware ESXi.
Instalação do VMware vCenter Converter Standalone
Instalar a última versão do software VMware vCenter Converter Standalone no site da VMware, é necessário cadastro gratuito no site.
O processo é bem simples, next, next, finish.
Processo de Conversão da máquina
Abra o VMware vCenter Converter Standalone e clique em “Convert machine”.
Configure as opções de acordo com as necessidades:
Select source type: Tipo de máquina de origem.
Specify the powered-on-machine: A própria máquina local ou uma máquina remota.
A remote machine:
Ip addres or name: Nome ou IP da máquina.
User name: Login da máquina.
Password: Senha do usuário acima.
OS Family: Escolher entre Windows ou Linux.
Clique em “View source details...”.
No alerta que surge clique em “Yes”.
O software faz o levantamento das configurações da máquina. Aguarde.
Surge a janela com as configurações da máquina. Confira os dados e clique em “Close”.
Se tudo estiver correto clique em “Next”.
No aviso do certificado clique em “Ignore”.
Surge a janela com as informações da máquina de destino, se você quiser pode alterar o nome da máquina, observe também que são exibidas todas as VMs existentes no destino e seu status atual, se tudo estiver certo clique em “Next”.
Nesta tela podemos escolher qual datastore e versão da máquina virtual serão utilizados. Clique em “Next”.
Este é o resumo de acordo com as informações levantadas, uma série de configurações pode ser realizada, mas o que nos interessa é a seção “Helper VM network”, clique em “Edit”.
É preciso utilizar um IP da mesma rede que a máquina que será migrada, faça as configurações necessárias e clique em “Next”.
Resumo da conversão, se tudo estiver de acordo clique em “Finish”.
O processo inicia e exibe o tempo estimado inicial.
Durante o processo de conversão, o tempo estimado é automaticamente ajustado.
Se tudo ocorreu de forma correta, a mensagem de “Completed” é exibida em “Status”.
Alterações pós-conversão
Conecte-se no Servidor de Virtualização para onde a máquina foi migrada.
Selecione a máquina e clique em “Power On”.
Depois de iniciada a máquina é preciso alterar o script de inicialização da placa de rede, anote o endereço MAC da placa de rede.
Vamos copiar o conteúdo do script de inicialização original da máquina e edita-lo.
Alterando o endereço MAC para o atual.
Desligue a máquina antiga e reinicie a máquina nova.
Grace Hopper
10 de Dezembro é o dia do nascimento de duas mulheres muito importantes para a área de computação: Ada Lovelace e Grace Hopper, hoje quero falar sobre a segunda, desde que lí essa história na lista do Linuxchix Brasil, nunca mais esqueci, e resgatei a história no blog da Sulamita Garcia, num post de 2006, que reproduzo abaixo.
Grace Brewster Murray nasceu em Nova York, e chegou ao PhD em Matemática em 1934, com a tese “Novos critérios de irredutibilidade”(relacionado a polinômios). Seus feitos mais memoráveis são a criação do primeiro compilador, e o Cobol, que segundo o Wikipedia foi inspirado no FLOW-MATIC(de autoria dela), a primeira linguagem de programação a se aproximar da linguagem humana ao invés da linguagem de máquina.
Porém, em uma visita ao Brasil, tivemos a honra de conhecer algumas outras histórias curiosas a respeito dela de alguem que a conheceu pessoalmente e esteve em uma de suas palestras, Jon Hall Maddog. A primeira é que ela dizia que era melhor pedir desculpas que pedir permissão. Quando você queria fazer alguma coisa, se você dissesse ao seu chefe “posso fazer tal coisa, será bom por isto isto e isto”, geralmente ele vai pedir que vc preencha um relatorio, escreva porque seria bom, qual a previsão, o cronograma, as consequencias… O invés disso, você vai lá e faz. E quando vierem dizer “mas você fez isto!” você diz “desculpe, fiz, mas olha como ficou legal!”. Deve ter funcionado com ela, pois ela tentou se aposentar pelo menos 5 vezes(ela se aposentava e eles a chamavam novamente para o trabalho).
Outra foi sobre os nano e pico segundos. Ela é do tempo daqueles computadores enormes, que processavam informações em segundos ou centésimos de segundos. Ela certa vez conversando com um cadete estava falando: “sabe, eu posso entender o que é um centesímo de segundo, até mesmo um milésimo de segundo, mas não consigo entender um nanosegundo. Faz o seguinte, me arrume um nanosegundo”. Ele perguntou “como, oficial?” e ela repetiu “me arrume um nanosegundo”. Ele acatou, e frequentemente quando ela o encontrava, ela cobrava novamente “e o meu nanosegundo? Eu não vou esquecê-lo, me consiga um nanosegundo”. Meses depois, este cadete vem até ela e entrega uma folha de papel. Ela pergunta “o que é isto?” ele diz “isto é o seu nanosegundo. Esta é a distância que a luz percorre em um nanosegundo”. Ela ficou encantada, e como sempre fazia palestras sobre computação, passou a distribuir nanosegundos nas palestras: folhas de papel de 29.9792458 cm(segundo o wikipedia a medida que a luz percorre em um nanosegundo é esta). Alguns anos depois, ela encontrou este mesmo cadete, mas agora ele já era capitão. Ela disse “sabe, você fez um trabalho tão bom aquela vez com o nanosegundo, será que você conseguiria para mim um picosegundo?” Desta vez ele levou menos de um dia, aparecendo no outro dia com uma semente de pimenta preta, e a depositou sobre a mesa. Ele diste “este é o seu picosegundo. Em um picosegundo, a luz vai de um lado a outro desta semente.” A partir de então, ela passou a distribuir picosegundos nas suas palestras, e segundo Maddog, ele ainda tem o dele guardado.
Obrigada Almirante, por seu exemplo nos encorajar e servir de inspiração a todos.
Grace Brewster Murray nasceu em Nova York, e chegou ao PhD em Matemática em 1934, com a tese “Novos critérios de irredutibilidade”(relacionado a polinômios). Seus feitos mais memoráveis são a criação do primeiro compilador, e o Cobol, que segundo o Wikipedia foi inspirado no FLOW-MATIC(de autoria dela), a primeira linguagem de programação a se aproximar da linguagem humana ao invés da linguagem de máquina.
Porém, em uma visita ao Brasil, tivemos a honra de conhecer algumas outras histórias curiosas a respeito dela de alguem que a conheceu pessoalmente e esteve em uma de suas palestras, Jon Hall Maddog. A primeira é que ela dizia que era melhor pedir desculpas que pedir permissão. Quando você queria fazer alguma coisa, se você dissesse ao seu chefe “posso fazer tal coisa, será bom por isto isto e isto”, geralmente ele vai pedir que vc preencha um relatorio, escreva porque seria bom, qual a previsão, o cronograma, as consequencias… O invés disso, você vai lá e faz. E quando vierem dizer “mas você fez isto!” você diz “desculpe, fiz, mas olha como ficou legal!”. Deve ter funcionado com ela, pois ela tentou se aposentar pelo menos 5 vezes(ela se aposentava e eles a chamavam novamente para o trabalho).
Outra foi sobre os nano e pico segundos. Ela é do tempo daqueles computadores enormes, que processavam informações em segundos ou centésimos de segundos. Ela certa vez conversando com um cadete estava falando: “sabe, eu posso entender o que é um centesímo de segundo, até mesmo um milésimo de segundo, mas não consigo entender um nanosegundo. Faz o seguinte, me arrume um nanosegundo”. Ele perguntou “como, oficial?” e ela repetiu “me arrume um nanosegundo”. Ele acatou, e frequentemente quando ela o encontrava, ela cobrava novamente “e o meu nanosegundo? Eu não vou esquecê-lo, me consiga um nanosegundo”. Meses depois, este cadete vem até ela e entrega uma folha de papel. Ela pergunta “o que é isto?” ele diz “isto é o seu nanosegundo. Esta é a distância que a luz percorre em um nanosegundo”. Ela ficou encantada, e como sempre fazia palestras sobre computação, passou a distribuir nanosegundos nas palestras: folhas de papel de 29.9792458 cm(segundo o wikipedia a medida que a luz percorre em um nanosegundo é esta). Alguns anos depois, ela encontrou este mesmo cadete, mas agora ele já era capitão. Ela disse “sabe, você fez um trabalho tão bom aquela vez com o nanosegundo, será que você conseguiria para mim um picosegundo?” Desta vez ele levou menos de um dia, aparecendo no outro dia com uma semente de pimenta preta, e a depositou sobre a mesa. Ele diste “este é o seu picosegundo. Em um picosegundo, a luz vai de um lado a outro desta semente.” A partir de então, ela passou a distribuir picosegundos nas suas palestras, e segundo Maddog, ele ainda tem o dele guardado.
Obrigada Almirante, por seu exemplo nos encorajar e servir de inspiração a todos.
domingo, 25 de novembro de 2012
Monitorando a Temperatura do CPD com Termometro USB da China e Zabbix
Introdução
Recentemente comprei um Termometro USB na Deal Extreme por US$ 9,20 com frete grátis, isso mesmo, praticamente R$ 20,00. Quando ele chegou espetei em uma máquina Windows, instalei o software e realizei os testes, tudo OK. Hora de fazer esse cara funcionar no Linux.
Fiz algumas pesquisas na net e achei alguns scripts[1][2] que resolviam o problema, mas eu executava o script, ele não dava erro, mas não mostrava nada, cheguei a achar um projeto de um novo driver para resolver o problema[3], mas resolvi procurar mais um pouco, então encontrei o link que dizia que ele procurou pelo ID do USB[4], resolvi fazer a mesma coisa. Então achei em um fórum da própia DX[5], a dica do pcsensor[6], e a informação mais importante: Que ele tinha comprado 2 termometros, o primeiro que funcionava com as soluções que eu já tinha encontrado e um novo que ele adquiriu depois, e que possui um novo chipset, e o mesmo não funciona com as soluções anteriores.
Volta a pesquisar soluções com o pcsensor + ID do USB e achei a receita base para o tutorial abaixo aqui.
Instalação do PCSensor
Resolver as dependências:
# yum install libusb-devel make gcc
Download dos fontes:
# wget http://www.isp-sl.com/pcsensor-0.0.1.tgz
Compilar:
# tar xzf pcsensor-0.0.1.tgz
# cd pcsensor-0.0.1
# make clean
# make
Instalar:
# cp ./pcsensor /usr/local/bin/
# cp 99-tempsensor.rules /etc/udev/rules.d
Inserir o Termometro USB, se ele já estava inserido, remova e insira novamente.
Testar a leitura de informações:
# pcsensor
2012/11/23 17:14:17 Temperature 65.30F 18.50C
Separar a parte da informação que nos interessa:
# pcsensor | cut -d" " -f5 | cut -dC -f1
18.50
Criar a entrada no Agente do Zabbix:
# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=temperatura,/usr/local/bin/pcsensor | cut -d" " -f5 | cut -dC -f1
Reiniciar o serviço do agente:
# service zabbix_agentd restart
Criar o item no Zabbix Server:
Clique em Configuration // Hosts
Na linha do servidor que está com o termometro instalado, clique em Items
Clique em Create item
Configure conforme imagem abaixo:
Observações:
Em Host vai aparecer o nome do seu servidor;
O campo Name pode ter o nome que você quiser dar ao item;
O campo Key deve ter o mesmo nome informado no arquivo de configuração do agente;
Em Host Interface vai aparecer o IP do Servidor.
Clique no botão Save.
Agora basta montar o gráfico com o item recém criado:
Referências:
[1] https://grepular.com/Using_Linux_to_Monitor_Room_Temperature_Remotely_and_Cheaply
[2] http://lab4.org/wiki/Zabbix_Raumtemperatur_ueberwachen_mit_USB_Temper
[3] http://relavak.wordpress.com/2009/10/17/temper-temperature-sensor-linux-driver/
[4] http://bitplane.net/2012/01/temper1-ubuntu/
[5] http://club.dx.com/forums/forums.dx/threadid.463194
[6] http://www.isp-sl.com/pcsensor-0.0.1.tgz
Recentemente comprei um Termometro USB na Deal Extreme por US$ 9,20 com frete grátis, isso mesmo, praticamente R$ 20,00. Quando ele chegou espetei em uma máquina Windows, instalei o software e realizei os testes, tudo OK. Hora de fazer esse cara funcionar no Linux.
Fiz algumas pesquisas na net e achei alguns scripts[1][2] que resolviam o problema, mas eu executava o script, ele não dava erro, mas não mostrava nada, cheguei a achar um projeto de um novo driver para resolver o problema[3], mas resolvi procurar mais um pouco, então encontrei o link que dizia que ele procurou pelo ID do USB[4], resolvi fazer a mesma coisa. Então achei em um fórum da própia DX[5], a dica do pcsensor[6], e a informação mais importante: Que ele tinha comprado 2 termometros, o primeiro que funcionava com as soluções que eu já tinha encontrado e um novo que ele adquiriu depois, e que possui um novo chipset, e o mesmo não funciona com as soluções anteriores.
Volta a pesquisar soluções com o pcsensor + ID do USB e achei a receita base para o tutorial abaixo aqui.
Instalação do PCSensor
Resolver as dependências:
# yum install libusb-devel make gcc
Download dos fontes:
# wget http://www.isp-sl.com/pcsensor-0.0.1.tgz
Compilar:
# tar xzf pcsensor-0.0.1.tgz
# cd pcsensor-0.0.1
# make clean
# make
Instalar:
# cp ./pcsensor /usr/local/bin/
# cp 99-tempsensor.rules /etc/udev/rules.d
Inserir o Termometro USB, se ele já estava inserido, remova e insira novamente.
Testar a leitura de informações:
# pcsensor
2012/11/23 17:14:17 Temperature 65.30F 18.50C
Separar a parte da informação que nos interessa:
# pcsensor | cut -d" " -f5 | cut -dC -f1
18.50
Criar a entrada no Agente do Zabbix:
# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=temperatura,/usr/local/bin/pcsensor | cut -d" " -f5 | cut -dC -f1
Reiniciar o serviço do agente:
# service zabbix_agentd restart
Criar o item no Zabbix Server:
Clique em Configuration // Hosts
Na linha do servidor que está com o termometro instalado, clique em Items
Clique em Create item
Configure conforme imagem abaixo:
Observações:
Em Host vai aparecer o nome do seu servidor;
O campo Name pode ter o nome que você quiser dar ao item;
O campo Key deve ter o mesmo nome informado no arquivo de configuração do agente;
Em Host Interface vai aparecer o IP do Servidor.
Clique no botão Save.
Agora basta montar o gráfico com o item recém criado:
Referências:
[1] https://grepular.com/Using_Linux_to_Monitor_Room_Temperature_Remotely_and_Cheaply
[2] http://lab4.org/wiki/Zabbix_Raumtemperatur_ueberwachen_mit_USB_Temper
[3] http://relavak.wordpress.com/2009/10/17/temper-temperature-sensor-linux-driver/
[4] http://bitplane.net/2012/01/temper1-ubuntu/
[5] http://club.dx.com/forums/forums.dx/threadid.463194
[6] http://www.isp-sl.com/pcsensor-0.0.1.tgz
domingo, 29 de julho de 2012
Happy Sysadmin Day!
O Dia do Administrador de Sistemas é comemorado na última sexta-feira de Julho, achei esse texto bem interessante.
O sysadmin desempacotou o servidor para esse site, instalou o sistema, atualizou ele para se manter seguro, garantiu que energia e refrigeração estavam funcionando na sala de servidores, monitorou a estabilidade, configurou o software, e manteve os backups em caso de algo desse errado. Tudo isso para servir essa página.
O sysadmin instalou os roteadores, colocou os cabos, configurou as redes, os firewalls, e monitorou e guiou o trafico por cada salto da rede que trabalha sobre cobre, fibra ótica, e até mesmo pelo ar para trazer a internet ao seu computador.
Tudo para garantir que o site encontre seu caminho do servidor para seu computador.
O sysadmin garante que sua conexão de rede esta segura, disponível e funcionando. O sysadmin garante que seu computador está funcionando de uma maneira saudável em uma rede saudável.
O sysadmin faz backups para se assegurar contra desastres humanos e diversos, fecha os portões contra ameaças de segurança e crackes, e mantem as impressoras funcionando não importe quantas copias alguém esteja imprimindo.
O sysadmin se preocupa com SPAM e spyware, mas também com quedas de energia, incêndios e inundações.
Quando o servidor de email para as 2 da manhã no domingo, o seu sysadmin é notificado, acorda e vai ao trabalho.
O sysadmin é um profissional que planeja, se preocupa, conserta, delega, protege e cria boas redes de computadores, para trazer os seus dados, para ajudar você a trabalhar – para trazer o potencial da computação próximo da realidade e de você.
Então se você pode ler isto, agradeça ao seu sysadmin – e saiba que ele ou ela é apenas um das centenas ou milhares que trabalham para trazer para você seus e-mails, suas mensagens instantâneas, suas ligações, e esse site.
Portanto, dê ao seu sysadmin sua apreciação ao duro trabalho que ele exerce!
O sysadmin desempacotou o servidor para esse site, instalou o sistema, atualizou ele para se manter seguro, garantiu que energia e refrigeração estavam funcionando na sala de servidores, monitorou a estabilidade, configurou o software, e manteve os backups em caso de algo desse errado. Tudo isso para servir essa página.
O sysadmin instalou os roteadores, colocou os cabos, configurou as redes, os firewalls, e monitorou e guiou o trafico por cada salto da rede que trabalha sobre cobre, fibra ótica, e até mesmo pelo ar para trazer a internet ao seu computador.
Tudo para garantir que o site encontre seu caminho do servidor para seu computador.
O sysadmin garante que sua conexão de rede esta segura, disponível e funcionando. O sysadmin garante que seu computador está funcionando de uma maneira saudável em uma rede saudável.
O sysadmin faz backups para se assegurar contra desastres humanos e diversos, fecha os portões contra ameaças de segurança e crackes, e mantem as impressoras funcionando não importe quantas copias alguém esteja imprimindo.
O sysadmin se preocupa com SPAM e spyware, mas também com quedas de energia, incêndios e inundações.
Quando o servidor de email para as 2 da manhã no domingo, o seu sysadmin é notificado, acorda e vai ao trabalho.
O sysadmin é um profissional que planeja, se preocupa, conserta, delega, protege e cria boas redes de computadores, para trazer os seus dados, para ajudar você a trabalhar – para trazer o potencial da computação próximo da realidade e de você.
Então se você pode ler isto, agradeça ao seu sysadmin – e saiba que ele ou ela é apenas um das centenas ou milhares que trabalham para trazer para você seus e-mails, suas mensagens instantâneas, suas ligações, e esse site.
Portanto, dê ao seu sysadmin sua apreciação ao duro trabalho que ele exerce!
Marcadores:
Administrador de Redes,
Open Source,
SysAdmin
segunda-feira, 30 de abril de 2012
Treinamento Oficial de Zabbix na Unirede - Minhas Impressões
De 09 à 13 de Abril de 2012 estive em Porto Alegre realizando o treinamento oficial em Zabbix na Unirede,
várias pessoas me pediram para escrever um post sobre o assunto, o
treinamento foi o primeiro em português, aberto ao público, já havia
acontecido de forma fechada em alguns órgãos que contrataram esse modelo
de turma fechada.
Foram 02 módulos:
ZABBIX Certified Specialist - 3 Dias.
ZABBIX for Large Environments - 2 Dias.
Resposta curta: Sim vale a pena fazer o treinamento, você vai aprender muita coisa, mesmo já tendo um bom tempo de vivência com o Zabbix.
Agora vamos a resposta longa, como cheguei nessa conclusão? São vários detalhes que me chamaram a atenção e que fizeram o treinamento valer a pena, vou listando como eles vão surgindo na minha mente, sem um sequencia pré-estabelecida, isto é um blog ;-)
Infra-Estrutura:
Foi alugada uma sala em local excelente no centro de Porto Alegre, uma sala simples, mas eficiente, mesas com um notebook cada uma, com a opção de você poder usar o seu próprio equipamento, o que me agradou de cara, pois podia ficar com a cópia das VMs, realizar anotações e checar meus e-mails de vez em quando, com tranquilidade pois era o MEU note, e eu sei o que tem rodando nele.
Projetor e ar condicionado compatíveis com nossas necessidades, 2 banheiros, água e café o dia todo a disposição. Coffe Break também compatível, apesar de não ter ficado aquela sensação de "nossa tinha uma mesa de 3 metros com 25 opções de salgados, 12 de bebidas e 18 de doces", também não tenho do que reclamar, tinha água, café, suco, doces e salgados, todos muito saborosos. o Coffe era servido de manhã e de tarde.
Material Didático:
Esse é o ponto mais fraco, a "apostila" são os slides que o instrutor utiliza impressos coloridos 4 por folha, mas esse material é fornecido pela ZABBIX SIA, eles apenas traduziram, fica claro para quem frequenta o fórum, mas principalmente para quem faz o treinamento que a ZABBIX SIA é uma empresa focada no produto dela, o Alexei é centralizador, e isso reflete em tudo, para um bom nerd, isso basta como material, mas como alunos esperamos algo melhor, se o livro "Zabbix 1.8 Network Monitoring - Rihards Olups" fosse oferecido junto com o treinamento, acredito que já resolveria o problema.
Acredito que falte ao Alexei uma postura mais Mark Zuckerberg, se ele quer ficar programando, não tem problema, mas contrate pessoas competentes para fazer o resto: Marketing, Parcerias, Material Didático, etc.
Conteúdo do Curso:
Só posso falar do curso que eu fiz, mas vou me arriscar a falar um pouco sobre o que eu imagino que rolou nos outros treinamentos.
Quem tem um pouco de maturidade sabe que marcas, nomes de empresas, tradições e etc, tem seu valor até um certo ponto apenas, o que realmente faz diferença, e faz o sucesso de uma marca, empresa, tradição e etc, são as pessoas, as pessoas fazem a diferença. Eu imagino que nos treinamentos anteriores realizados pelo Alexei e por pessoas da ZABBIX SIA eles mantiveram a linha nerd da empresa, ou seja, o treinamento foi excelente, mas tudo dentro do planejado, mostrando a ferramenta da maneira que ela foi planejada e executada, típico da maior parte do mundo, mas não do Brasil, novamente isso é muito bom em muitas situações, mas não em todas, e se foi assim, acredito que meu treinamento foi melhor.
O brasileiro é conhecido pelo seu "jeitinho", isso tem um lado perjorativo que eu odeio, tento combater e não aceito de maneira alguma. Mas tem o seu lado positivo, o brasileiro é inovador, criativo e mestre em usar algo para um fim totalmente diferente do que o proposto pelo projetista. E isto se aplica à Gerencia de redes também, as normas são importantes, mas entre deixar a rede parada e colocar um hub, ou fazer um "varal", usar um micro que tava jogado como roteador temporário, você pode ter certeza que qualquer profissional no Brasil escolhe a segunda opção, pessoas de outras culturas geralmente não tem essa visão, eles não vão tomar essa iniciative pois ela viola a norma.
Nós vimos tudo que estava previsto no material, e não era pouca coisa, acredito que apenas o primeiro treinamento deveria durar os 5 dias, pois o conteúdo é muito corrido, a quantidade de labs é pequena frente ao conteúdo e alguns assuntos como relatórios, por exemplo, nem fazem parte do conteúdo programático. O segundo treinamento em 2 dias está ótimo.
O Instrutor:
Deixei para falar por último do instrutor, pois como já disse no tópico anterior o que faz a diferença são as pessoas, o Luciano Alves é um cara mega comprometido com o Zabbix e com o trabalho que a Unirede desenvolve, eles são parceiros da ZABBIX SIA, responsáveis pela tradução do Manual em Português, e da área em Português do Fórum oficial, além é claro, dos Treinamentos Oficiais em Português.
A experiência que a Unirede e o Luciano possuem na ferramenta fizeram toda a diferença no treinamento, minhas anotações convertidadas para um arquivo de texto sem formatação, geraram 4 páginas em formato A4.
O comprometimento que o Luciano teve de almoçar TODOS os dias com o pessoal do curso, procurar outras opções para conhecermos vários locais, descer e participar de todos os coffe breaks, nos levar para jantar em uma churrascaria típica, com apresentação de dança típica gaúcha, vai muito além do papel de instrutor ou do representante de uma empresa que só quer vender seu produto.
Além disso ele nunca se recusou a abordar algo que não fazia parte do treinamento oficial, de responder dúvidas, que para muitos eram simples, mostrou vários exemplos de ferramentas e abordagens que eles fazem no Zabbix, discutiu várias idéias de como utilizar o Zabbix para atender demandas de clientes que não foram pensadas pelos desenvolvedores. Como, por exemplo, fornecer ao diretor da empresa uma visão do negócio em camadas, que ajudam na tomada de decisões, e não detalhes técnicos que só interessam ao operador.
Um dos participantes só fez o primeiro treinamento e passou os outros dois dias na Unirede acompanhando o trabalho do pessoal, um amigo e eu fomos visitar a Unirede.
Enfim o Luciano fez toda a diferença no treinamento!
Algumas Fotos do Treinamento:
Foram 02 módulos:
ZABBIX Certified Specialist - 3 Dias.
ZABBIX for Large Environments - 2 Dias.
Resposta curta: Sim vale a pena fazer o treinamento, você vai aprender muita coisa, mesmo já tendo um bom tempo de vivência com o Zabbix.
Agora vamos a resposta longa, como cheguei nessa conclusão? São vários detalhes que me chamaram a atenção e que fizeram o treinamento valer a pena, vou listando como eles vão surgindo na minha mente, sem um sequencia pré-estabelecida, isto é um blog ;-)
Infra-Estrutura:
Foi alugada uma sala em local excelente no centro de Porto Alegre, uma sala simples, mas eficiente, mesas com um notebook cada uma, com a opção de você poder usar o seu próprio equipamento, o que me agradou de cara, pois podia ficar com a cópia das VMs, realizar anotações e checar meus e-mails de vez em quando, com tranquilidade pois era o MEU note, e eu sei o que tem rodando nele.
Projetor e ar condicionado compatíveis com nossas necessidades, 2 banheiros, água e café o dia todo a disposição. Coffe Break também compatível, apesar de não ter ficado aquela sensação de "nossa tinha uma mesa de 3 metros com 25 opções de salgados, 12 de bebidas e 18 de doces", também não tenho do que reclamar, tinha água, café, suco, doces e salgados, todos muito saborosos. o Coffe era servido de manhã e de tarde.
Material Didático:
Esse é o ponto mais fraco, a "apostila" são os slides que o instrutor utiliza impressos coloridos 4 por folha, mas esse material é fornecido pela ZABBIX SIA, eles apenas traduziram, fica claro para quem frequenta o fórum, mas principalmente para quem faz o treinamento que a ZABBIX SIA é uma empresa focada no produto dela, o Alexei é centralizador, e isso reflete em tudo, para um bom nerd, isso basta como material, mas como alunos esperamos algo melhor, se o livro "Zabbix 1.8 Network Monitoring - Rihards Olups" fosse oferecido junto com o treinamento, acredito que já resolveria o problema.
Acredito que falte ao Alexei uma postura mais Mark Zuckerberg, se ele quer ficar programando, não tem problema, mas contrate pessoas competentes para fazer o resto: Marketing, Parcerias, Material Didático, etc.
Conteúdo do Curso:
Só posso falar do curso que eu fiz, mas vou me arriscar a falar um pouco sobre o que eu imagino que rolou nos outros treinamentos.
Quem tem um pouco de maturidade sabe que marcas, nomes de empresas, tradições e etc, tem seu valor até um certo ponto apenas, o que realmente faz diferença, e faz o sucesso de uma marca, empresa, tradição e etc, são as pessoas, as pessoas fazem a diferença. Eu imagino que nos treinamentos anteriores realizados pelo Alexei e por pessoas da ZABBIX SIA eles mantiveram a linha nerd da empresa, ou seja, o treinamento foi excelente, mas tudo dentro do planejado, mostrando a ferramenta da maneira que ela foi planejada e executada, típico da maior parte do mundo, mas não do Brasil, novamente isso é muito bom em muitas situações, mas não em todas, e se foi assim, acredito que meu treinamento foi melhor.
O brasileiro é conhecido pelo seu "jeitinho", isso tem um lado perjorativo que eu odeio, tento combater e não aceito de maneira alguma. Mas tem o seu lado positivo, o brasileiro é inovador, criativo e mestre em usar algo para um fim totalmente diferente do que o proposto pelo projetista. E isto se aplica à Gerencia de redes também, as normas são importantes, mas entre deixar a rede parada e colocar um hub, ou fazer um "varal", usar um micro que tava jogado como roteador temporário, você pode ter certeza que qualquer profissional no Brasil escolhe a segunda opção, pessoas de outras culturas geralmente não tem essa visão, eles não vão tomar essa iniciative pois ela viola a norma.
Nós vimos tudo que estava previsto no material, e não era pouca coisa, acredito que apenas o primeiro treinamento deveria durar os 5 dias, pois o conteúdo é muito corrido, a quantidade de labs é pequena frente ao conteúdo e alguns assuntos como relatórios, por exemplo, nem fazem parte do conteúdo programático. O segundo treinamento em 2 dias está ótimo.
O Instrutor:
Deixei para falar por último do instrutor, pois como já disse no tópico anterior o que faz a diferença são as pessoas, o Luciano Alves é um cara mega comprometido com o Zabbix e com o trabalho que a Unirede desenvolve, eles são parceiros da ZABBIX SIA, responsáveis pela tradução do Manual em Português, e da área em Português do Fórum oficial, além é claro, dos Treinamentos Oficiais em Português.
A experiência que a Unirede e o Luciano possuem na ferramenta fizeram toda a diferença no treinamento, minhas anotações convertidadas para um arquivo de texto sem formatação, geraram 4 páginas em formato A4.
O comprometimento que o Luciano teve de almoçar TODOS os dias com o pessoal do curso, procurar outras opções para conhecermos vários locais, descer e participar de todos os coffe breaks, nos levar para jantar em uma churrascaria típica, com apresentação de dança típica gaúcha, vai muito além do papel de instrutor ou do representante de uma empresa que só quer vender seu produto.
Além disso ele nunca se recusou a abordar algo que não fazia parte do treinamento oficial, de responder dúvidas, que para muitos eram simples, mostrou vários exemplos de ferramentas e abordagens que eles fazem no Zabbix, discutiu várias idéias de como utilizar o Zabbix para atender demandas de clientes que não foram pensadas pelos desenvolvedores. Como, por exemplo, fornecer ao diretor da empresa uma visão do negócio em camadas, que ajudam na tomada de decisões, e não detalhes técnicos que só interessam ao operador.
Um dos participantes só fez o primeiro treinamento e passou os outros dois dias na Unirede acompanhando o trabalho do pessoal, um amigo e eu fomos visitar a Unirede.
Enfim o Luciano fez toda a diferença no treinamento!
Algumas Fotos do Treinamento:
Galera que fez o treinamento - Foto Oficial
Luciano durante o treinamento
Enéas concentrado no detalhe da foto
Luciano durante o treinamento
Luciano durante o treinamento
Treinamento Especialista Certificado 1º Dia
Luciano durante o treinamento
Como a Unirede classifica os níves de alertas
Treinamento Especialista Certificado 2º Dia
Treinamento Especialista Certificado 3º Dia
Treinamento Zabbix para grandes Ambientes
Unirede
Eu e o Luciano na Unirede
Apostila do Treinamento Gerenciamento de Redes com SNMP
Atualização 22/08/2012 - Disponibilizada versão 2 da apostila.
Em 2007 meu amigo Conrado Pinto Rebessi, ministrou no FLISOL Campinas uma palestra intitulada "Gerenciamento de Servidores Linux Utilizando SNMP", nesta época eu usava o Nagios ou Cacti, não me lembro, para gerenciar a rede onde trabalhava e sempre enroscava no SNMP, antes da palestra dele, e das milhões de conversas posteriores a ela, eu não entendia aquele monte de números estranhos (OIDs) e nem o por que eu deveria usar SNMP e não o agente da ferramenta. No ano seguinte ao fazer minha especialização, um dos professores o Ranieri Marinho de Souza, me passou um material sobre teoria de gerencia de redes.
Desde essa época eu nunca mais parei de estudar gerência de redes, foram muitas horas lendo, testando, consultando man pages, documentação oficial do Net-SNMP e claro, conversando com o Conrado.
De 2007 até hoje muita coisa mudou, inclusive o fato de eu ter me tornado Professor das matérias de Gerência de Redes I e II na Graduação e Pós Graduação da Faculdade Policamp.
Sou funcionário da Unicamp, e já existe há alguns anos a cultura de treinamentos internos, ou do funcionário realizar um treinamento externo e replicar isso aos funcionários, mas a AFPU tem intensivado, incentivado e profissionalizado essas iniciativas. Algumas pessoas foram convidadas a realizar treinamentos, algumas pessoas, como eu, apresentaram uma proposta, e uma série de treinamentos voltados para a formação e especialização do profissional Administrador de Redes tem sido ofertados.
A apostila aqui disponível é o resultado de tudo que está escrito acima.
Abraços,
André Déo - 30/04/2012
Em 2007 meu amigo Conrado Pinto Rebessi, ministrou no FLISOL Campinas uma palestra intitulada "Gerenciamento de Servidores Linux Utilizando SNMP", nesta época eu usava o Nagios ou Cacti, não me lembro, para gerenciar a rede onde trabalhava e sempre enroscava no SNMP, antes da palestra dele, e das milhões de conversas posteriores a ela, eu não entendia aquele monte de números estranhos (OIDs) e nem o por que eu deveria usar SNMP e não o agente da ferramenta. No ano seguinte ao fazer minha especialização, um dos professores o Ranieri Marinho de Souza, me passou um material sobre teoria de gerencia de redes.
Desde essa época eu nunca mais parei de estudar gerência de redes, foram muitas horas lendo, testando, consultando man pages, documentação oficial do Net-SNMP e claro, conversando com o Conrado.
De 2007 até hoje muita coisa mudou, inclusive o fato de eu ter me tornado Professor das matérias de Gerência de Redes I e II na Graduação e Pós Graduação da Faculdade Policamp.
Sou funcionário da Unicamp, e já existe há alguns anos a cultura de treinamentos internos, ou do funcionário realizar um treinamento externo e replicar isso aos funcionários, mas a AFPU tem intensivado, incentivado e profissionalizado essas iniciativas. Algumas pessoas foram convidadas a realizar treinamentos, algumas pessoas, como eu, apresentaram uma proposta, e uma série de treinamentos voltados para a formação e especialização do profissional Administrador de Redes tem sido ofertados.
A apostila aqui disponível é o resultado de tudo que está escrito acima.
Abraços,
André Déo - 30/04/2012
quarta-feira, 4 de abril de 2012
O que dá para aprender sobre Python em 02:30 hs?
Introdução:
OK, Ok, eu sei que vai depender do contexto, de quem está ensinando, de quem está aprendendo, do propósito da aula, etc.
Vou contextualizar para vocês:
Turma de Sistemas de Informação e Análise e Desenvolvimento de Software, 3º Semestre, experiência de linguagem de programação anterior: C.
Objetivo:
Demonstrar o quanto Python é fácil e versátil.
Sobre o Professor:
A aula sobre Python foi ministrada pelo meu amigo e especialista na linguagem João S. O. Bueno <gwidion at gmail dot com>
Qualquer absurdo escrito abaixo é responsabilidade minha, já que essas são minhas anotações e o João pode ter dito banana e eu escrevi tamarina.
Diferenças entre as linguagens:
C --> Compilado
Python --> Bit Code --> Acessa a VM e depois acessa o Hardware
Java --> Bit Code --> Acessa a VM e depois acessa o Hardware
C e Java --> Linguagens Estáticas
Python, Php, Javascript --> Dinâmicas
Python você não declara as variáveis para depois usar, você cria e sai usando. Surgiu em 1991
Sites sobre Python:
http://python.org e http://www.python.org.br
Começando a brincadeira:
Estavamos em um laboratório com CentOS 5, e a versão do python bem desatualizada, mas vamos em frente.
$ python
Python 2.4.3 (#1, Feb 22 2012, 16:06:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Soma:
>>> 2+2
4
Exponenciação:
>>> 2 ** 4
16
Criar uma string:
>>> 'qualquer coisa'
'qualquer coisa'
>>> "qualquer coisa"
'qualquer coisa'
>>>
Definindo Variáveis:
>>> a=10
>>> a
10
>>> a="deo"
>>> a
'deo'
>>> a="faculdade "
>>> b="politecnica"
>>> a+b
'faculdade politecnica'
Não posso somar texto com número:
>>> "50" + 50
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Converter dados:
>>> int("10")+20
30
Transformei o texto em inteiro e somei, poderia ter lido de um arquivo texto por exemplo.
Inverso do anterior:
>>> str(20)+"20"
'2020'
Importar a biblioteca para manipulação de comandos do SO:
>>> import os
Mostra o arquivo que contem as funções:
>>> os
<module 'os' from '/usr/lib/python2.4/os.pyc'>
Listar os arquivos do diretório corrente:
>>> os.listdir(".")
['.redhat', '.nautilus', '.viminfo', 'upgrade.log.syslog', '.mysql_history', 'install.log.syslog', '.ICEauthority', '.eggcups', '.gconf', '.bashrc', '.thumbnails', '.dmrc', '.tcshrc', '.recently-used', '.evolution', '.config', '.gnome2_private', '.recently-used.xbel', '.bash_logout', '.cshrc', '.gnome', '.gstreamer-0.10', '\npolicamp\nping www.polysolve.com\nPS1=C:z> ', '.xsession-errors', '.metacity', 'Desktop', '.bash_profile', 'install.log', '.gtkrc-1.2-gnome2', 'anaconda-ks.cfg', '.themes', '.icons', '.Trash', '.esd_auth', '.mozilla', '.gnome2', '.gconfd', 'upgrade.log', '.bash_history', '.openoffice.org2.0']
Pegando informações de um vetor:
>>> arquivos=os.listdir(".")
>>> arquivos[0]
'.redhat'
>>> arquivos[20]
'.gnome'
Arquivos 0,1,2:
>>> arquivos[0:3]
['.redhat', '.nautilus', '.viminfo']
Lista em Python:
>>> b=[1,2,3]
>>> b
[1, 2, 3]
>>> b[0]
1
Em Python tudo são objetos, por isso o "+" se comporta de uma maneira para texto e outra para número.
Chamando métodos:
os.listdir
os --> módulo
listdir --> método
Convertendo para maiúsculas:
>>> b="policamp"
>>> b.upper()
'POLICAMP'
>>> b
'policamp'
>>> arquivos[30]
'.themes'
>>> arquivos[30].upper()
'.THEMES'
Lista de todos os métodos disponíveis para o objeto, uso o dir.
>>> dir (b)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
strip remove espaços em branco:
>>> c = " campinas "
>>> c
' campinas '
>>> c.strip()
'campinas'
Verificar se todos são alfanuméricos: isalpha:
>>> "abcd".isalpha()
True
>>> "abcd5".isalpha()
False
Multiplicar string:
>>> "qwe"*5
'qweqweqweqweqwe'
Ver tamanho da string:
>>> a="Policamp campinas - teste"
>>> len(a)
25
>>> len(b)
25000000
Ver objeto da string:
>>> b[1]
'o'
>>> b[0:100]
'Policamp campinas - testePolicamp campinas - testePolicamp campinas - testePolicamp campinas - teste'
>>>
Programa que pega uma url e conta quantas imagens tem o site (string img):
>>> import urllib
>>> html=urllib.urlopen("http://www.seufuturonapratica.com.br/portal/index.php?id=99").read()
>>> len(html)
55162
>>> print html[0:100]
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Con
>>> html.count("<img")
179
Achar a primeira ocorrencia:
>>> html.find("<img")
4207
Exibir a url:
>>> print html[4207:4350]
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onf
>>>
LIVRO: O Mínimo Absoluto Que Todo Desenvolvedor De Software Absolutamente, Positivamente Precisa Saber Sobre Unicode E Conjuntos de Caracteres (Sem Desculpas!)
Fonte: http://local.joelonsoftware.com/wiki/O_M%C3%ADnimo_Absoluto_Que_Todo_Desenvolvedor_De_Software_Absolutamente,_Positivamente_Precisa_Saber_Sobre_Unicode_E_Conjuntos_de_Caracteres_%28Sem_Desculpas!%29
>>> print html[4207:4350].decode("latin1")
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avaliação Institucional" /></a><a href="index.php?id=3036" onf
Existe o método encode também, além do encode.
Quero pegar todas as url:
split corta o texto:
>>> c="abc, def, fgh"
>>> c.split(",")
['abc', ' def', ' fgh']
>>> imagens=html.split("<img")
>>> len(imagens)
180
>>> print imagens[1]
src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onfocus="blurLink(this);" >
>>> print imagens[2]
src="typo3temp/menu/3c997a0c3b.gif" width="200" height="20" border="0" alt="CPA" /></a><a href="index.php?id=5811" onfocus="blurLink(this);" >
O For do python percorre elementos de uma sequencia:
>>> for letra in "palavra":
... print letra * 3
...
ppp
aaa
lll
aaa
vvv
rrr
aaa
Nao preciso abrir chaves, mas preciso identar...
Posso cortar dados de uma string também:
>>> "policamp"[2:]
'licamp'
Mostrou a URL de todas as imagens:
>>> for tag in imagens[1:] :
... print tag.split('"')[1]
...
Para aprender uma linguagem precisamos aprender 3 coisas:
for, if e como definir uma função:
IF:
>>> a =1
>>> if a == 1:
... print "a vale 1"
... else:
... print "nao"
...
a vale 1
Definir a Função:
>>> def soma (a, b):
... return a + b
...
>>> soma(4, 5)
9
>>> soma("a", "b")
'ab'
>>> soma("a", 5)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in soma
TypeError: cannot concatenate 'str' and 'int' objects
>>> def testa(a) :
... if a == 1:
... print "a vale 1"
... elif a < 5:
... print "a eh menor que cinco"
... else:
... print "a eh grande"
...
>>> testa(1)
a vale 1
>>> testa(5)
a eh grande
>>> testa(4)
a eh menor que cinco
$ vi alo.py
# coding:utf-8
print "alô mundo"
$ python alo.py
alô mundo
Capturar dados:
$ vi alo.py
# coding:utf-8
nome = raw_input("seu nome ? ")
print "seu nome é", nome
$ python alo.py
seu nome ? André
seu nome é André
Pegar dados na sequencia inversa:
>>> a = [10,20,40]
>>> a[-1]
40
>>> a[-2]
20
>>> "abcde"[-1]
'e'
Programa que pergunta a url e baixa as imagens:
$ vi alo.py
# coding:utf-8
import urllib
def salva_imagem(url):
try:
dados = urllib.urlopen(url).read()
except:
print "erro para ", url
return
nome = url.split("/")[-1]
arq = open(nome, "wb")
arq.write(dados)
arq.close()
def acha_urls(html):
tag_imagens = html.split("<img")[1:]
res = []
for tag in tag_imagens:
url = tag.split('"')[1]
res.append(url)
return res
pagina = raw_input("URL da qual baixar imagens: ")
html = urllib.urlopen(pagina).read()
imagens = acha_urls(html)
for imagem in imagens:
print imagem
salva_imagem(imagem)
Python com Interface Gráfica:
>>> import gtk
>>> janela = gtk.Window()
>>> botao = gtk.Button("Ok")
>>> def clicado(*args):
... print "click"
...
>>> janela.add(botao)
>>> janela.show()
>>> botao.show()
>>> botao.connect("clicked", clicado)
>>> gtk.mainloop()
Como instalar bibliotecas no Python:
Ele tem um gerenciador de pacotes dele:
# yum install python-setuptolls.noarch
Instalar a biblioteca de Games para Python:
# easy_install pygame
py2exe --> Gera um "exe" do seu ".py" para distribuir para os usuários finais.
.pyc --> python compilado, geralmente o .py esta no mesmo diretorio
Na declaração da função ou na criação do programa, se na primeira linha eu usar
""" --> Documentação de help
bla bla bla
"""" --> Fechei a documentação
Igual o <<Label
bla bla bla
Label --> Em Shell Script
Ver o help:
>>> import os
>>> help(os)
q --> para sair
Orientação a objetos em Python:
>>> class Pessoa(object):
... pass
...
>>> p = Pessoa()
>>> p
<__main__.Pessoa object at 0xb7b78eac>
>>> p.nome = "Joao"
>>> p.nome
'Joao'
>>> class Pessoa(object):
... def __init__(self, nome="", idade=None):
... self.nome = nome
... self.idade = idade
... def __repr__(self):
... return "Pessoa: " + self.nome
def maior_de_idade(self):
if self.idade is None:
raise Exception("Idade nao definida")
return self.idade >= 18
...
>>> p = Pessoa()
>>> p
Pessoa:
>>> p = Pessoa("Daniel")
>>> p
Pessoa: Daniel
>>> p.nome
'Daniel'
>>> p.idade
>>> p.idade = 23
>>> p.idade
23
>>> p.idade = 18
>>> p.maior_de_idade()
True
>>> p2 = Pessoa("Luciana")
>>> p2
Pessoa: Luciana
>>> p2.maior_de_idade()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 9, in maior_de_idade
Exception: Idade nao definida
Livros sobre Python:
http://www.python.org.br/wiki/AprendaMais
Bom, foi essa a experiência que eu tive em 02:30 hs de aula de Python. Espero que seja tão útil para quem ler quanto foi para mim!
Obrigado João.
OK, Ok, eu sei que vai depender do contexto, de quem está ensinando, de quem está aprendendo, do propósito da aula, etc.
Vou contextualizar para vocês:
Turma de Sistemas de Informação e Análise e Desenvolvimento de Software, 3º Semestre, experiência de linguagem de programação anterior: C.
Objetivo:
Demonstrar o quanto Python é fácil e versátil.
Sobre o Professor:
A aula sobre Python foi ministrada pelo meu amigo e especialista na linguagem João S. O. Bueno <gwidion at gmail dot com>
Qualquer absurdo escrito abaixo é responsabilidade minha, já que essas são minhas anotações e o João pode ter dito banana e eu escrevi tamarina.
Diferenças entre as linguagens:
C --> Compilado
Python --> Bit Code --> Acessa a VM e depois acessa o Hardware
Java --> Bit Code --> Acessa a VM e depois acessa o Hardware
C e Java --> Linguagens Estáticas
Python, Php, Javascript --> Dinâmicas
Python você não declara as variáveis para depois usar, você cria e sai usando. Surgiu em 1991
Sites sobre Python:
http://python.org e http://www.python.org.br
Começando a brincadeira:
Estavamos em um laboratório com CentOS 5, e a versão do python bem desatualizada, mas vamos em frente.
$ python
Python 2.4.3 (#1, Feb 22 2012, 16:06:13)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-52)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
Soma:
>>> 2+2
4
Exponenciação:
>>> 2 ** 4
16
Criar uma string:
>>> 'qualquer coisa'
'qualquer coisa'
>>> "qualquer coisa"
'qualquer coisa'
>>>
Definindo Variáveis:
>>> a=10
>>> a
10
>>> a="deo"
>>> a
'deo'
>>> a="faculdade "
>>> b="politecnica"
>>> a+b
'faculdade politecnica'
Não posso somar texto com número:
>>> "50" + 50
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Converter dados:
>>> int("10")+20
30
Transformei o texto em inteiro e somei, poderia ter lido de um arquivo texto por exemplo.
Inverso do anterior:
>>> str(20)+"20"
'2020'
Importar a biblioteca para manipulação de comandos do SO:
>>> import os
Mostra o arquivo que contem as funções:
>>> os
<module 'os' from '/usr/lib/python2.4/os.pyc'>
Listar os arquivos do diretório corrente:
>>> os.listdir(".")
['.redhat', '.nautilus', '.viminfo', 'upgrade.log.syslog', '.mysql_history', 'install.log.syslog', '.ICEauthority', '.eggcups', '.gconf', '.bashrc', '.thumbnails', '.dmrc', '.tcshrc', '.recently-used', '.evolution', '.config', '.gnome2_private', '.recently-used.xbel', '.bash_logout', '.cshrc', '.gnome', '.gstreamer-0.10', '\npolicamp\nping www.polysolve.com\nPS1=C:z> ', '.xsession-errors', '.metacity', 'Desktop', '.bash_profile', 'install.log', '.gtkrc-1.2-gnome2', 'anaconda-ks.cfg', '.themes', '.icons', '.Trash', '.esd_auth', '.mozilla', '.gnome2', '.gconfd', 'upgrade.log', '.bash_history', '.openoffice.org2.0']
Pegando informações de um vetor:
>>> arquivos=os.listdir(".")
>>> arquivos[0]
'.redhat'
>>> arquivos[20]
'.gnome'
Arquivos 0,1,2:
>>> arquivos[0:3]
['.redhat', '.nautilus', '.viminfo']
Lista em Python:
>>> b=[1,2,3]
>>> b
[1, 2, 3]
>>> b[0]
1
Em Python tudo são objetos, por isso o "+" se comporta de uma maneira para texto e outra para número.
Chamando métodos:
os.listdir
os --> módulo
listdir --> método
Convertendo para maiúsculas:
>>> b="policamp"
>>> b.upper()
'POLICAMP'
>>> b
'policamp'
>>> arquivos[30]
'.themes'
>>> arquivos[30].upper()
'.THEMES'
Lista de todos os métodos disponíveis para o objeto, uso o dir.
>>> dir (b)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
strip remove espaços em branco:
>>> c = " campinas "
>>> c
' campinas '
>>> c.strip()
'campinas'
Verificar se todos são alfanuméricos: isalpha:
>>> "abcd".isalpha()
True
>>> "abcd5".isalpha()
False
Multiplicar string:
>>> "qwe"*5
'qweqweqweqweqwe'
Ver tamanho da string:
>>> a="Policamp campinas - teste"
>>> len(a)
25
>>> len(b)
25000000
Ver objeto da string:
>>> b[1]
'o'
>>> b[0:100]
'Policamp campinas - testePolicamp campinas - testePolicamp campinas - testePolicamp campinas - teste'
>>>
Programa que pega uma url e conta quantas imagens tem o site (string img):
>>> import urllib
>>> html=urllib.urlopen("http://www.seufuturonapratica.com.br/portal/index.php?id=99").read()
>>> len(html)
55162
>>> print html[0:100]
<!DOCTYPE html
PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Con
>>> html.count("<img")
179
Achar a primeira ocorrencia:
>>> html.find("<img")
4207
Exibir a url:
>>> print html[4207:4350]
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onf
>>>
LIVRO: O Mínimo Absoluto Que Todo Desenvolvedor De Software Absolutamente, Positivamente Precisa Saber Sobre Unicode E Conjuntos de Caracteres (Sem Desculpas!)
Fonte: http://local.joelonsoftware.com/wiki/O_M%C3%ADnimo_Absoluto_Que_Todo_Desenvolvedor_De_Software_Absolutamente,_Positivamente_Precisa_Saber_Sobre_Unicode_E_Conjuntos_de_Caracteres_%28Sem_Desculpas!%29
>>> print html[4207:4350].decode("latin1")
<img src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avaliação Institucional" /></a><a href="index.php?id=3036" onf
Existe o método encode também, além do encode.
Quero pegar todas as url:
split corta o texto:
>>> c="abc, def, fgh"
>>> c.split(",")
['abc', ' def', ' fgh']
>>> imagens=html.split("<img")
>>> len(imagens)
180
>>> print imagens[1]
src="typo3temp/menu/1f118291ac.gif" width="200" height="20" border="0" alt="Avalia��o Institucional" /></a><a href="index.php?id=3036" onfocus="blurLink(this);" >
>>> print imagens[2]
src="typo3temp/menu/3c997a0c3b.gif" width="200" height="20" border="0" alt="CPA" /></a><a href="index.php?id=5811" onfocus="blurLink(this);" >
O For do python percorre elementos de uma sequencia:
>>> for letra in "palavra":
... print letra * 3
...
ppp
aaa
lll
aaa
vvv
rrr
aaa
Nao preciso abrir chaves, mas preciso identar...
Posso cortar dados de uma string também:
>>> "policamp"[2:]
'licamp'
Mostrou a URL de todas as imagens:
>>> for tag in imagens[1:] :
... print tag.split('"')[1]
...
Para aprender uma linguagem precisamos aprender 3 coisas:
for, if e como definir uma função:
IF:
>>> a =1
>>> if a == 1:
... print "a vale 1"
... else:
... print "nao"
...
a vale 1
Definir a Função:
>>> def soma (a, b):
... return a + b
...
>>> soma(4, 5)
9
>>> soma("a", "b")
'ab'
>>> soma("a", 5)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 2, in soma
TypeError: cannot concatenate 'str' and 'int' objects
>>> def testa(a) :
... if a == 1:
... print "a vale 1"
... elif a < 5:
... print "a eh menor que cinco"
... else:
... print "a eh grande"
...
>>> testa(1)
a vale 1
>>> testa(5)
a eh grande
>>> testa(4)
a eh menor que cinco
$ vi alo.py
# coding:utf-8
print "alô mundo"
$ python alo.py
alô mundo
Capturar dados:
$ vi alo.py
# coding:utf-8
nome = raw_input("seu nome ? ")
print "seu nome é", nome
$ python alo.py
seu nome ? André
seu nome é André
Pegar dados na sequencia inversa:
>>> a = [10,20,40]
>>> a[-1]
40
>>> a[-2]
20
>>> "abcde"[-1]
'e'
Programa que pergunta a url e baixa as imagens:
$ vi alo.py
# coding:utf-8
import urllib
def salva_imagem(url):
try:
dados = urllib.urlopen(url).read()
except:
print "erro para ", url
return
nome = url.split("/")[-1]
arq = open(nome, "wb")
arq.write(dados)
arq.close()
def acha_urls(html):
tag_imagens = html.split("<img")[1:]
res = []
for tag in tag_imagens:
url = tag.split('"')[1]
res.append(url)
return res
pagina = raw_input("URL da qual baixar imagens: ")
html = urllib.urlopen(pagina).read()
imagens = acha_urls(html)
for imagem in imagens:
print imagem
salva_imagem(imagem)
Python com Interface Gráfica:
>>> import gtk
>>> janela = gtk.Window()
>>> botao = gtk.Button("Ok")
>>> def clicado(*args):
... print "click"
...
>>> janela.add(botao)
>>> janela.show()
>>> botao.show()
>>> botao.connect("clicked", clicado)
>>> gtk.mainloop()
Como instalar bibliotecas no Python:
Ele tem um gerenciador de pacotes dele:
# yum install python-setuptolls.noarch
Instalar a biblioteca de Games para Python:
# easy_install pygame
py2exe --> Gera um "exe" do seu ".py" para distribuir para os usuários finais.
.pyc --> python compilado, geralmente o .py esta no mesmo diretorio
Na declaração da função ou na criação do programa, se na primeira linha eu usar
""" --> Documentação de help
bla bla bla
"""" --> Fechei a documentação
Igual o <<Label
bla bla bla
Label --> Em Shell Script
Ver o help:
>>> import os
>>> help(os)
q --> para sair
Orientação a objetos em Python:
>>> class Pessoa(object):
... pass
...
>>> p = Pessoa()
>>> p
<__main__.Pessoa object at 0xb7b78eac>
>>> p.nome = "Joao"
>>> p.nome
'Joao'
>>> class Pessoa(object):
... def __init__(self, nome="", idade=None):
... self.nome = nome
... self.idade = idade
... def __repr__(self):
... return "Pessoa: " + self.nome
def maior_de_idade(self):
if self.idade is None:
raise Exception("Idade nao definida")
return self.idade >= 18
...
>>> p = Pessoa()
>>> p
Pessoa:
>>> p = Pessoa("Daniel")
>>> p
Pessoa: Daniel
>>> p.nome
'Daniel'
>>> p.idade
>>> p.idade = 23
>>> p.idade
23
>>> p.idade = 18
>>> p.maior_de_idade()
True
>>> p2 = Pessoa("Luciana")
>>> p2
Pessoa: Luciana
>>> p2.maior_de_idade()
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 9, in maior_de_idade
Exception: Idade nao definida
Livros sobre Python:
http://www.python.org.br/wiki/AprendaMais
Bom, foi essa a experiência que eu tive em 02:30 hs de aula de Python. Espero que seja tão útil para quem ler quanto foi para mim!
Obrigado João.
quarta-feira, 18 de janeiro de 2012
Protocolo de Gerenciamento RMON
O padrão RMON para monitoramento remoto oferece uma arquitetura de gerenciamento distribuída para análise de tráfego, resolução de problemas, demonstração de tendências e gerenciamento proativo de redes de modo geral.
Criado pelos mesmos grupos que desenvolveram o TCP/IP e o SNMP, o RMON é um padrão IETF (Internet Engineering Task Force) de gerenciamento de redes cuja sigla significa Remote Network Monitoring MIB. Primeiramente, desenvolveu-se o padrão SNMP, somente depois pensou-se no RMON.
O Simple Network Management Protocol, ou SNMP, é um protocolo de gerenciamento realmente simples: a única informação que se tem através de um alerta SNMP é que existe um problema em um ponto da rede. Os alertas do SNMP padrão notificam um problema somente quando ele já atingiu uma condição extrema suficiente a ponto de comprometer a comunicação na rede como um todo.
Ao contrário do que se pode imaginar, o SNMP não é capaz de definir o problema, nem sua gravidade, não fornece, tampouco, recursos para uma investigação das causas desse problema. O diagnóstico do problema é uma tarefa do administrador da rede. Assim, o SNMP é simplesmente um alerta para uma condição extrema da rede.
O comitê do IETF decidiu que, para promover uma maior e melhor expansão das tecnologias de rede, era necessário um padrão de gerenciamento de redes mais sofisticado. As principais características do novo padrão, o RMON, seriam:
Assim, o RMON tornou-se um padrão por volta de 1990. O RMON II foi publicado para entender as capacidades do RMON.
Algumas RFCs tratam do protocolo RMON:
O protocolo RMON é uma MIB SNMP, portanto o dispositivo deve possuir um agente SNMP;
É específico para tecnologias Ethernet e Token Ring, apesar de existir uma implementação para ATM;
O dispositivo que implementa o suporte para RMON se chama probe RMON: Um probe pode ser implementado em um dispositivo dedicado ou em um elemento de rede, como um hub, switch ou roteador;
Visa monitorar tráfego de um segmento da rede. O probe deve ficar em um ponto da rede por onde passa todo o tráfego do segmento, deve haver um probe RMON por segmento de rede a ser monitorado;
Em redes comutados, RMON é implementado normalmente nos equipamentos ativos ou através de espelhamento do tráfego de suas portas para uma porta de monitoração (port mirroring).
Objetivos do RMON
Realizar análise e levantar informações estatísticas sobre os dados coletados em uma sub-rede, liberando a estação gerente desta tarefa;
Reduzir tráfego entre rede local gerenciada e a estação gerente remota;
Detectar, registrar e informar à estação gerente sobre situações de erro e eventos significativos da rede;
Permitir o gerenciamento pró-ativo da rede, diagnosticando e registrando eventos que possibilitem detectar o mal funcionamento e prever falhas que interrompam a sua operação;
Enviar informações de gerenciamento para múltiplas estações gerentes.
Abrangência das versões
Exemplo de funcionamento
MIB RMON1
Aquisição de Estatísticas de Tráfego:
Estatísticas básicas do tráfego em cada segmento de rede Ethernet.
Exemplos de estatísticas Ethernet:
Armazena n últimas estatísticas da rede.
Configuração:
RMON1 – Hosts
Estatísticas para cada host do segmento de rede.
Exemplos:
Classifica os hosts de acordo com valores de variáveis do grupo hosts.
Permite definir:
Associa estatísticas de tráfego entre pares de máquinas.
Exemplos:
RMON1 – Token Ring
O suporte a Token Ring pode ser feito de 2 formas:
Estabelece limites de operação para variáveis de MIB.
Se limites forem ultrapassados, gera alarmes.
Exemplos:
RMON1 – Filter
Define condições associadas a pacotes trafegados pela rede.
Se pacote atende às condições estabelecidas:
Troubleshooting em segmentos de redes remotos.
Como capturar tráfego em um segmento de rede?
Parâmetros da captura:
Algumas ações do probe provocam eventos, por exemplo:
Log interno;
snmp-trap;
Log-and-trap.
RMON2
O RMON1 trabalha na camada de enlace de dados. Mas e as demandadas de Estatísticas de IP, IPX, etc? Estatísticas de HTTP, FTP, etc?
O RMON2 visa atender essas necessidades.
MIB RMON2
A MIB do RMON2 é um subconjunto da árvore MIB: 9 novos grupos básicos de variáveis.
RMON2 – Protocol Directory
Diretório de Protocolo.
Lista dos protocolos que o probe RMON2 consegue monitorar;
Visa à interoperabilidade.
RMON2 – Protocol Distribution
Estatísticas sobre todos os protocolos suportados pelo probe.
Número de bytes e de pacotes referentes cada protocolo trafegando naquele segmento da rede.
RMON2 – Network Layer Host/Matrix e Application Layer Host/Matrix
RMON2 – User History
Histórico de Coleta do Usuário.
Equivalente ao grupo de history do RMON1. Permite, porém configurar quais variáveis serão mantidas no histórico, além do intervalo e quantidade da amostragem.
RMON2 – Probe Configuration
Configuração do Probe.
Padroniza a configuração do probe RMON, visando interoperabilidade entre probes e softwares gerentes de diferentes fabricantes.
Exemplos:
Mapeamento de Endereços.
Relaciona endereços MAC e endereços de Rede (IP, IPX).
RMON – Considerações Finais
RMON pode exigir bastante processamento: Nem sempre um determinado recurso tem recursos de processamento e armazenamento para suportar todos os grupos de variáveis da RMON-MIB.
É suficiente que sejam implementados um único desses grupos, para o elemento ser considerado em conformidade com o RMON. Na especificação dos dispositivos são definidos quais grupos de RMON ele suporta.
No caso de existirem múltiplos gerentes, o elemento RMON deve determinar quais informações de gerenciamento devem ser encaminhadas para cada gerente.
Referências:
• Gabos, Denis.; Melo, Tereza C. Apostila de Gerenciamento de Redes, EPUSP, 2003.
• Stallings, W. SNMP, SNMPv2, SNMPv3 and RMON1 and 2. 3rd ed. 7th printing, 2003.
• Kurose; Ross. Redes de Computadores e a Internet. Uma nova Abordagem. Pearson Education, 2003.
• http://www.simpleweb.org
• http://www.rnp.br/newsgen/9901/rmon.html
• http://www.dsc.ufcg.edu.br/~jacques/cursos/gr/html/aplic/aplic5.htm
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.
Criado pelos mesmos grupos que desenvolveram o TCP/IP e o SNMP, o RMON é um padrão IETF (Internet Engineering Task Force) de gerenciamento de redes cuja sigla significa Remote Network Monitoring MIB. Primeiramente, desenvolveu-se o padrão SNMP, somente depois pensou-se no RMON.
O Simple Network Management Protocol, ou SNMP, é um protocolo de gerenciamento realmente simples: a única informação que se tem através de um alerta SNMP é que existe um problema em um ponto da rede. Os alertas do SNMP padrão notificam um problema somente quando ele já atingiu uma condição extrema suficiente a ponto de comprometer a comunicação na rede como um todo.
Ao contrário do que se pode imaginar, o SNMP não é capaz de definir o problema, nem sua gravidade, não fornece, tampouco, recursos para uma investigação das causas desse problema. O diagnóstico do problema é uma tarefa do administrador da rede. Assim, o SNMP é simplesmente um alerta para uma condição extrema da rede.
O comitê do IETF decidiu que, para promover uma maior e melhor expansão das tecnologias de rede, era necessário um padrão de gerenciamento de redes mais sofisticado. As principais características do novo padrão, o RMON, seriam:
- Interoperabilidade independentemente de fabricante;
- Capacidade de fornecer informações precisas a respeito das causas de falha no funcionamento normal da rede, assim como da severidade dessa falha;
- Oferecer ferramentas adequadas para diagnóstico da rede.
Assim, o RMON tornou-se um padrão por volta de 1990. O RMON II foi publicado para entender as capacidades do RMON.
Algumas RFCs tratam do protocolo RMON:
- RMON1: RFC 1757 - Remote Network Monitoring Management Information Base (Draft)
- RMON1: RFC 2819 - Remote Network Monitoring Management Information Base
- RFC 1513 - Token Ring Extensions to the Remote Network Monitoring MIB
- RMON2: RFC 2021 - Remote Network Monitoring Management Information Base Version 2 using SMIv2 (Obsolete) *
- RFC 3273 - Remote Network Monitoring Management Information Base for High Capacity Networks **
- RMON2: RFC 4502 - Remote Network Monitoring Management Information Base Version 2 using SMIv2
* Substituiu
** Atualizou - SMON: RFC 2613 - Remote Network Monitoring MIB Extensions for Switched Networks (Proposto)
- Overview: RFC 3577 - Introduction to the RMON Family of MIB Modules
O protocolo RMON é uma MIB SNMP, portanto o dispositivo deve possuir um agente SNMP;
É específico para tecnologias Ethernet e Token Ring, apesar de existir uma implementação para ATM;
O dispositivo que implementa o suporte para RMON se chama probe RMON: Um probe pode ser implementado em um dispositivo dedicado ou em um elemento de rede, como um hub, switch ou roteador;
Visa monitorar tráfego de um segmento da rede. O probe deve ficar em um ponto da rede por onde passa todo o tráfego do segmento, deve haver um probe RMON por segmento de rede a ser monitorado;
Em redes comutados, RMON é implementado normalmente nos equipamentos ativos ou através de espelhamento do tráfego de suas portas para uma porta de monitoração (port mirroring).
Objetivos do RMON
Realizar análise e levantar informações estatísticas sobre os dados coletados em uma sub-rede, liberando a estação gerente desta tarefa;
Reduzir tráfego entre rede local gerenciada e a estação gerente remota;
Detectar, registrar e informar à estação gerente sobre situações de erro e eventos significativos da rede;
Permitir o gerenciamento pró-ativo da rede, diagnosticando e registrando eventos que possibilitem detectar o mal funcionamento e prever falhas que interrompam a sua operação;
Enviar informações de gerenciamento para múltiplas estações gerentes.
Abrangência das versões
Exemplo de funcionamento
MIB RMON1
Aquisição de Estatísticas de Tráfego:
- Estatístico (Statistics)
- Histórico (History)
- Hosts
- Classificação de n Hosts (Host Top N)
- Matriz (Matrix)
- Token Ring
- Alarme (Alarm)
- Filtro (Filter)
- Captura de pacote (Packet Capture)
- Evento (Event)
Estatísticas básicas do tráfego em cada segmento de rede Ethernet.
Exemplos de estatísticas Ethernet:
- Bytes trafegados;
- Pacotes trafegados (<uni/broad/multi>cast);
- Pacotes < 64 bytes;
- Pacotes > 1518 bytes;
- Pacotes com erro de CRC;
- Número de colisões.
Armazena n últimas estatísticas da rede.
Configuração:
- Intervalos de amostragem;
- Quantidade de amostras armazenadas.
- Cria subsídios para um gerenciamento pró-ativo.
RMON1 – Hosts
Estatísticas para cada host do segmento de rede.
Exemplos:
- Número de bytes transmitidos e recebidos;
- Número de pacotes transmitidos e recebidos;
- Número de pacotes com erro transmitidos;
- Número de pacotes broadcast transmitidos;
- Número de pacotes multicast transmitidos.
Classifica os hosts de acordo com valores de variáveis do grupo hosts.
Permite definir:
- Variável para ordenação;
- Duração da amostragem;
- Quantidade de hosts na lista.
- As 10 máquinas que mais transmitiram pacotes na rede hoje;
- As 5 máquinas que mais transmitiram pacotes com erros nas últimas 2 horas;
- As 20 máquinas que mais geraram tráfego de broadcast na semana.
Associa estatísticas de tráfego entre pares de máquinas.
Exemplos:
- Pacotes transmitidos;
- Octetos transmitidos;
- Pacotes com erros transmitidos.
RMON1 – Token Ring
O suporte a Token Ring pode ser feito de 2 formas:
- Extensão dos grupos Statistics e History para redes Token Ring: Grupos Statistics e History originais eram dependentes de Ethernet.
- Novo grupo Token Ring.
Estabelece limites de operação para variáveis de MIB.
Se limites forem ultrapassados, gera alarmes.
Exemplos:
- Mais de 20 pacotes com erro nos últimos 5 minutos;
- Bytes enviados for menor que 100.000.000/5s.
RMON1 – Filter
Define condições associadas a pacotes trafegados pela rede.
Se pacote atende às condições estabelecidas:
- Captura o pacote ou Registra estatísticas baseadas no mesmo.
- Captura todos os pacotes vindos do servidor S1;
- Conta quantos pacotes estão indo para o roteador e não são originários dos servidores: Tráfego entre segmentos de redes das estações.
Troubleshooting em segmentos de redes remotos.
Como capturar tráfego em um segmento de rede?
- Colocar no segmento um sniffer;
- Utilizar o probe RMON.
Parâmetros da captura:
- Quantos bytes de cada pacotes serão armazenados? Default são os 100 primeiros bytes.
- Qual filtro determina os pacotes a serem capturados?
- Qual o tamanho do buffer a ser utilizado?
Algumas ações do probe provocam eventos, por exemplo:
- Alarme disparado;
- Pacote que atende condições de um filtro.
Log interno;
snmp-trap;
Log-and-trap.
RMON2
O RMON1 trabalha na camada de enlace de dados. Mas e as demandadas de Estatísticas de IP, IPX, etc? Estatísticas de HTTP, FTP, etc?
O RMON2 visa atender essas necessidades.
MIB RMON2
A MIB do RMON2 é um subconjunto da árvore MIB: 9 novos grupos básicos de variáveis.
RMON2 – Protocol Directory
Diretório de Protocolo.
Lista dos protocolos que o probe RMON2 consegue monitorar;
Visa à interoperabilidade.
RMON2 – Protocol Distribution
Estatísticas sobre todos os protocolos suportados pelo probe.
Número de bytes e de pacotes referentes cada protocolo trafegando naquele segmento da rede.
RMON2 – Network Layer Host/Matrix e Application Layer Host/Matrix
RMON2 – User History
Histórico de Coleta do Usuário.
Equivalente ao grupo de history do RMON1. Permite, porém configurar quais variáveis serão mantidas no histórico, além do intervalo e quantidade da amostragem.
RMON2 – Probe Configuration
Configuração do Probe.
Padroniza a configuração do probe RMON, visando interoperabilidade entre probes e softwares gerentes de diferentes fabricantes.
Exemplos:
- Reboot do probe;
- Atualização de Software.
Mapeamento de Endereços.
Relaciona endereços MAC e endereços de Rede (IP, IPX).
RMON – Considerações Finais
RMON pode exigir bastante processamento: Nem sempre um determinado recurso tem recursos de processamento e armazenamento para suportar todos os grupos de variáveis da RMON-MIB.
É suficiente que sejam implementados um único desses grupos, para o elemento ser considerado em conformidade com o RMON. Na especificação dos dispositivos são definidos quais grupos de RMON ele suporta.
No caso de existirem múltiplos gerentes, o elemento RMON deve determinar quais informações de gerenciamento devem ser encaminhadas para cada gerente.
Referências:
• Gabos, Denis.; Melo, Tereza C. Apostila de Gerenciamento de Redes, EPUSP, 2003.
• Stallings, W. SNMP, SNMPv2, SNMPv3 and RMON1 and 2. 3rd ed. 7th printing, 2003.
• Kurose; Ross. Redes de Computadores e a Internet. Uma nova Abordagem. Pearson Education, 2003.
• http://www.simpleweb.org
• http://www.rnp.br/newsgen/9901/rmon.html
• http://www.dsc.ufcg.edu.br/~jacques/cursos/gr/html/aplic/aplic5.htm
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.
segunda-feira, 16 de janeiro de 2012
A MIB
A MIB (Management Information Base - Base de Informações de Gerenciamento) é um conjunto dos objetos gerenciados, com o objetivo de abranger informações necessárias para a gerência da rede, é importante salientar que a MIB não contém objetos reais, somente os organiza.
Objetos Gerenciados
São “estruturas de dados” resultantes da modelagem dos recursos da rede a serem gerenciados, podem ter permissões para serem lidos ou alterados sendo que cada leitura representará o estado real do recurso e cada alteração será refletida no próprio recurso, isso permite automatização de grande parte das tarefas de gerência.
Modelos de Gerenciamento
O padrão OSI define três modelos para gerenciamento de redes:
Descreve a forma pela qual a gerência pode ser distribuída entre domínios e sistemas dentro de um domínio.
Modelo funcional
Descreve as áreas funcionais e seus relacionamentos.
Modelo informacional
Provê a base para a definição de objetos gerenciados e suas relações, classes atributos, ações e nomes.
Características do Modelo OSI
Na definição de objetos gerenciados é utilizada a orientação a objetos. Objetos com características semelhantes são agrupados em classes de objetos, uma classe pode ser uma subclasse de outra, e a primeira herda todas as propriedades da segunda.
Classe, Subclasse e Superclasse
Uma classe é definida por:
Para a definição dos objetos gerenciados deve-se considerar três hierarquias:
Hierarquia de Herança
Conhecida também como hierarquia de classe, tem como objetivo facilitar a modelagem dos objetos, através da utilização do paradigma da orientação a objetos. Ferramenta que facilita a definição de classes, superclasses, subclasses.
Hierarquia de Nomeação
Hierarquia usada para identificar uma instância de um objeto. Conhecida como Hierarquia de containment, descreve a relação de "estar contido em" aplicado aos objetos.
Um objeto gerenciado está contido dentro de um (e somente um) objeto gerenciado, um objeto gerenciado existe somente se o objeto que o contém existir.
Hierarquia de Registro
Hierarquia usada para identificar os objetos, independentemente das hierarquias de heranças e nomeação. É especificada segundo regras estabelecidas pela notação ASN.1 (Abstract Syntax Notation. One).
Cada objeto é identificado por uma sequência de números, correspondente aos nós percorridos desde a raiz, até o objeto em questão.
MIB da Internet
O RFC (Request for Comments) 1066 apresentou a primeira versão da MIB, a MIB-1, o IAB (Internet Activities Board) aceita MIB como padrão no RFC 1156.
O RFC 1158 propôs uma segunda MIB, a MIB-II, aceita e formalizada como padrão no RFC 1213.
A árvore da MIB II
Usa arquitetura de árvore de registro, cada parte da informação da árvore é um nó rotulado formado por:
Identificador de objetos (OID): 1.3.6.1.1
Descrição textual: directory(1)
O nó raiz da árvore (MIB) possui três sub-árvores:
O nó Internet(1) possui quatro subárvores:
Abaixo do nó mgmt(2) estão os objetos usados para se obter informações específicas de rede.
A árvore da MIB II
Objeto System (1.3.6.1.2.1.1)
Exemplos de Grupos
Grupo System - Sistema de operação dos dispositivos da rede
Descrição textual: iso.org.dod.internet.mgmt.mib-2.system
OID: 1.3.6.1.2.1.1
Componentes:
sysDesc(1): Descrição do sistema, nome completo e versão do tipo de hardware, sistema operacional e software de rede.
sysObjectId(2): OID de registro (fabricante do sistema).
sysUpTime(3): Tempo de atividade do sistema (1/100 s).
sysContact (4): Pessoa ou grupo responsável pelo nó.
sysName(5): Nome do nó na rede.
sysLocation(6): Localização física do nó.
sysServices(7): Flags indicando serviços suportados.
Grupo Interfaces - Interface da rede com o meio físico
Descrição textual: iso.org.dod.internet.mgmt.mib-2.interface
OID: 1.3.6.1.2.1.2
Componentes:
ifNumber(1): Número de interfaces de rede (independentemente do seu estado atual) presentes no sistema.
ifTable(2): A tabela de informações sobre cada interface de rede, o número de interfaces é dado pelo valor do ifNumber.
ifEntry(ifTable 1): Entradas de valores sobre cada uma das interfaces
ifIndex(ifEntry 1): Um valor único para cada interface, permite identificar a interface.
ifDescr(ifEntry 2): Identificação da interface, deve incluir o nome do fabricante, o nome do produto e a versão da interface.
ifType(ifEntry 3): Tipo de interface.
ifMtu(ifEntry 4): Tamanho máximo do datagrama suportado pela interface, especificado em octetos.
ifSpeed(ifEntry 5): Uma estimativa da largura de banda atual da interface em bits por segundo. Para interfaces que não variam em largura de banda ou para aqueles onde não precisa estimativa pode ser feita, este objeto deve conter a largura de banda nominal.
ifPhysAddress(ifEntry 6): Endereço físico da interface, Para interfaces que não têm tal endereço (por exemplo, uma linha serial), este objeto deve conter um octeto string de comprimento zero.
ifAdminStatus(ifEntry 7): Indica o estado desejado da interface.
ifOperStatus(ifEntry 8): Indica o estado atual de funcionamento do interface.
up(1), -- pronto para passar pacotes
down(2), -- interface desabilitada
testing(3) -- indica que nenhum pacote em estado operacional podem ser passados.
ifLastChange(ifEntry 9): O tempo de funcionamento desde que a interface entrou em estado operacional.
ifInOctets(ifEntry 10): O número total de octetos recebidos na interface, incluindo caracteres de enquadramento (framing characters).
ifInUcastPkts(ifEntry 11): O número de pacotes unicast entregues a um protocolo de camada superior.
ifInNUcastPkts(ifEntry 12): O número de pacotes não unicast (ou seja, broadcast ou multicast) entregues a um protocolo de camada superior. "
ifInDiscards(ifEntry 13): O número de pacotes de entrada que foram escolhidos para serem descartados, mesmo que nenhum erro tenha sido detectado, impede a entrega dos pacotes a um protocolo de camada superior. Uma razão possível para descartar tais pacotes poderia ser para liberar espaço de buffer.
ifInErrors(ifEntry 14): O número de pacotes de entrada que continham erros que impedem seu fornecimento a um protocolo de camada superior.
ifInUnknownProtos(ifEntry 15): O número de pacotes recebidos através da interface que foram descartados por causa de um protocolo desconhecido ou não suportado.
ifOutOctets(ifEntry 16): O número total de octetos transmitidos na interface, incluindo caracteres de enquadramento (framing characters).
ifOutUcastPkts(ifEntry 17): O número total de pacotes que o protocolo de camada superior solicitou que fossem transmitidos, incluindo aqueles que foram descartados ou não enviados.
ifOutNUcastPkts(ifEntry 18): O número total de pacotes não unicast (ou seja, broadcast ou multicast) que o protocolo de camada superior solicitou que fossem transmitidos, incluindo aqueles que foram descartados ou não enviados.
ifOutDiscards(ifEntry 19): O número de pacotes de saída que foram escolhidos para serem descartados, mesmo que nenhum erro tenha sido detectado, impede a transmissão dos pacotes. Uma razão possível para descartar tais pacotes poderia ser para liberar espaço de buffer.
ifOutErrors(ifEntry 20): O número de pacotes de saída que não puderam ser transmitidos devido a erros.
ifOutQLen(ifEntry 21): O comprimento da fila de saída de pacotes (em pacotes).
ifSpecific(ifEntry 22): Uma referência a definições MIB específicos para uma mídia em particular, sendo usado para realizar a interface com o objeto. Por exemplo, se a interface é realizado por uma ethernet, então o valor deste objeto refere-se a um documento que define objectos específicos para ethernet. Se esta informação não é presente, seu valor deve ser definido como OBJECT IDENTIFIER { 0 0 }, que é uma sintaxe válida para identificador de objeto, e estará em conformidade com qualquer implementação de ASN.1 e BER que devera ser capaz de gerar e reconhecer esse valor.
Grupo at (Address Translation) - Mapeamento de endereços IP em endereços físicos.
Descrição textual: iso.org.dod.internet.mgmt.mib-2.at
OID: 1.3.6.1.2.1.3
Componentes:
atTable(1): As tabelas de tradução de endereços, devem conter o endereço de rede para seu endereço físico equivalente.
Algumas interfaces não usam tabelas de conversão para determinar equivalências endereço (por exemplo, DDN-X.25 tem um método algorítmico), se todas as interfaces são deste tipo, então a tabela Address Translation está vazia, ou seja, tem zero entradas.
atEntry(atTable 1): Cada entrada contém um endereço de rede para seu endereço físico equivalente.
atIfIndex(atEntry 1): A interface identificada por um determinado valor deste índice é a mesma interface identificada pelo mesmo valor de ifIndex.
atPhysAddress(atEntry 2): Endereço físico da interface.
atNetAddress(atEntry 3): O endereço da rede (por exemplo, o endereço IP).
Grupo ip - Protocolo IP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.ip
OID: 1.3.6.1.2.1.4
Componentes (Apenas Alguns):
ipForwarding(1): (forwarding(1), not-forwarding(2)): Se o IP Forward está ou não habilitado no dispositivo.
ipInReceives(3): O número total de datagramas de entrada recebidos pela interface,incluindo aqueles recebidos com erro.
ipInAddrErrors(5): O número de datagramas de entrada descartados porque o endereço IP de destino em seu campo de cabeçalho IP não era um endereço válido. Essa contagem inclui endereços inválidos (por exemplo, 0.0.0.0) e os endereços de Classes não suportsadas (por exemplo, Classe E).
ipInUnknownProtos(7): O número de datagramas recebido com sucesso, mas descartados por causa de um protocolo desconhecido ou não suportado.
ipOutDiscards(11): O número de datagramas IP de saída para os quais não foram encontrados problemas para impedir a sua transmissão ao seu destino, mas que foram descartados (por exemplo, por falta de espaço de buffer).
ipOutNoRoutes(12): O número de datagramas IP descartados, porque nenhuma rota podia ser encontrada para transmiti-los aos seus destinos.
ipAddrTable(20): Tabela de endereçamento IP.
ipAdEntReasmMaxSize(ipAddrEntry 5): O tamanho do maior datagrama IP que esta entidade pode re-montar a partir dos datagramas IP fragmentados recebidos por esta interface.
ipRouteTable(21): Tabela de roteamento IP.
ipRouteDest(ipRouteEntry 1): Endereço IP do destino da rota. Uma entrada com valor 0.0.0.0 é considerada uma rota padrão.
ipRouteMetric1(ipRouteEntry 3): A métrica de roteamento primário para esta rota. A semântica desta métrica é determinada pelo protocolo de roteamento especificado na rota do valor ipRouteProto. Se essa métrica não é utilizada, seu valor deve ser definido como -1.
ipRouteNextHop(ipRouteEntry 7): O endereço IP do próximo salto da rota. (No caso de uma rota ligada a uma interface que se realiza através de uma mídia de broadcast, o valor deste campo é o endereço IP do agente daquela interface.)
Grupo icmp – Protocolo ICMP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.icmp
OID: 1.3.6.1.2.1.5
Componentes (Apenas Alguns):
icmpInMsgs(icmp 1): O número total de mensagens ICMP que a entidade recebeu. Note que a contagem inclui todos os contadores de icmpInErrors.
icmpInErrors(icmp 2): O número de mensagens ICMP que a entidade recebeu, mas determinada por erros ICMP específicos (ICMP checksums com erro, erro no tamanho, etc.)
icmpInDestUnreachs(icmp 3): O número de mensagens ICMP recebidas com destino inacessível.
icmpInTimeExcds(icmp 4): O número de mensagens ICMP recebidas com tempo excedido.
Grupo TCP – Protocolos TCP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.tcp
OID: 1.3.6.1.2.1.6
Componentes (Apenas Alguns):
tcpConnTable(13): Uma tabela contendo informações de conexão TCP específicas.
tcpConnState(tcpConnEntry 1): O estado da conexão TCP.
tcpConnLocalAddress(tcpConnEntry 2): O endereço IP local para esta conexão TCP. No caso de uma conexão no estado ouvindo disposta a aceitar conexões para qualquer interface IP associado ao nó, o valor 0.0.0.0 é usado.
tcpConnRemAddress(tcpConnEntry 4): O endereço IP remoto para essa conexão TCP.
tcpConnRemPort(tcpConnEntry 5): O número da porta remota para esta conexão TCP.
Grupo UDP – Protocolos UDP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.udp
OID: 1.3.6.1.2.1.7
Componentes:
udpInDatagrams(1): O número total de datagramas UDP entregues aos usuários UDP.
udpNoPorts(2): O número total de datagramas UDP recebidos para os quais não houve aplicação na porta de destino.
udpInErrors(3): O número de datagramas UDP recebidos que não puderam ser entregues por outras razões que a falta de uma aplicação na porta de destino.
udpOutDatagrams(4): O número total de datagramas UDP enviados a partir desta entidade.
udpTable(5): Uma tabela contendo informações sobre os ouvintes UDP.
udpEntry(udpTable 1): Informações sobre um determinado ouvinte UDP.
udpLocalAddress(udpEntry 1): O endereço IP local para este ouvinte UDP. No caso de um ouvinte UDP que está disposto a aceitar datagramas para qualquer interface IP associado com o nó, o valor 0.0.0.0 é usado.
udpLocalPort(udpEntry 2): O número da porta local para este ouvinte UDP.
Grupo EGP – Protocolo EGP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.egp
OID: 1.3.6.1.2.1.8
Componentes (Apenas Alguns):
egpInMsgs(1): O número de mensagens EGP recebidas sem erro.
egpInErrors(2): O número de mensagens EGP recebidas com erro.
egpOutMsgs(3): O número total de mensagens EGP gerados localmente.
egpOutErros(4): O número de mensagens EGP gerados localmente não enviadas devido a limitações de recursos dentro de uma entidade EGP.
egpNeighTable(5): A tabela de vizinhos EGP.
Grupo cmot – Protocolo CMOT
Descrição textual: iso.org.dod.internet.mgmt.mib-2.cmot
OID: 1.3.6.1.2.1.9
Histórico (alguns dizem histérico)
Grupo Transmission – Meios de Transmissões
Descrição textual: iso.org.dod.internet.mgmt.mib-2.transmission
OID: 1.3.6.1.2.1.10
Histórico (alguns dizem histérico)
Grupo SNMP – Protocolo SNMP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.snmp
OID: 1.3.6.1.2.1.11
Componentes:
snmpInPkts(1): O número total de mensagens entregues à entidade SNMP pelo serviço de transporte.
snmpOutPkts(2): O número total de mensagens SNMP que foram passados da entidade protocolo SNMP para o serviço de transporte.
snmpInBadVersions(3): O número total de mensagens SNMP que foram entregues à entidade protocolo SNMP, mas eram de uma versão SNMP não suportada.
snmpInBadCommunityNames(4): O número total de mensagens SNMP entregues à entidade protocolo SNMP, mas que usaram um nome da comunidade SNMP desconhecida pela entidade.
snmpInBadCommunityUses(5): O número total de mensagens SNMP entregues à entidade protocolo SNMP que representaram uma operação SNMP que não era permitido pela comunidade SNMP nomeada na mensagem.
snmpInASNParseErrs(6): O número total de erros ASN.1 ou BER encontrados pela entidade protocolo SNMP quando decodificou as Mensagens SNMP recebidas.
-- (7): Não é usado
snmpInTooBigs(8): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `tooBig '.
SnmpInNoSuchNames(9): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `noSuchName '.
SnmpInBadValues(10): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `badValue '.
snmpInReadOnlys(11): O número total válido de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é 'readOnly'. Note-se que é um erro de protocolo para gerar um PDU SNMP que contém o valor `readOnly ' no campo erro de status, como tal este objeto é fornecido como um meio de detectar implementações incorretas do SNMP.
snmpInGenErrs(12): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `genErr'.
snmpInTotalReqVars(13): O número total de objetos MIB que foram recuperados com sucesso pela entidade protocolo SNMP como o resultado de receber PDUs SNMP Get-Request e Get-Next válidos.
snmpInTotalSetVars(14): O número total de objetos MIB que foram alterados com sucesso pela entidade protocolo SNMP como o resultado de receber PDUs SNMP Set-Request válidos.
snmpInGetRequests(15): O número total de PDUs SNMP Get-Request que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInGetNexts(16): O número total de PDUs SNMP Get-Next que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInSetRequests(17): O número total de PDUs SNMP Set-Request que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInGetResponses(18): O número total de PDUs SNMP Get-Response que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInTraps(19): O número total de PDUs SNMP Trap que foram aceitas e processadas pela entidade protocolo SNMP.
snmpOutTooBigs(20): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é `tooBig '.
snmpOutNoSuchNames(21): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` noSuchName '.
snmpOutBadValues(22): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` badValue '.
-- (23): Não é usado
snmpOutGenErrs(24): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` genErr '.
snmpOutGetRequests(25): O número total de PDUs SNMP Get-Request que foram gerados pela entidade protocolo SNMP.
snmpOutGetNexts(26): O número total de PDUs SNMP Get-Next que foram gerados pela entidade protocolo SNMP.
snmpOutSetRequests(27): O número total de PDUs SNMP Set-Request que foram gerados pela entidade protocolo SNMP.
snmpOutGetResponses(28): O número total de PDUs SNMP Get-Response que foram gerados pela entidade protocolo SNMP.
snmpOutTraps(29): O número total de PDUs SNMP Trap que foram gerados pela entidade protocolo SNMP.
snmpEnableAuthenTraps(30): (enabled(1), disabled(2)): Indica se o processo do agente SNMP esta configurado para gerar traps de falha de autenticação. O valor deste objeto substitui qualquer informação de configuração, como tal, fornece um meio pelo qual todos os traps de falha de autenticação possam ser desabilitados.
Note que é altamente recomendável que esse objeto seja armazenados em memória não-volátil para que ele permaneça constante entre as reinicializações do sistema de gerencia de rede.
Referências:
RFC1213
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.
Objetos Gerenciados
São “estruturas de dados” resultantes da modelagem dos recursos da rede a serem gerenciados, podem ter permissões para serem lidos ou alterados sendo que cada leitura representará o estado real do recurso e cada alteração será refletida no próprio recurso, isso permite automatização de grande parte das tarefas de gerência.
Modelos de Gerenciamento
O padrão OSI define três modelos para gerenciamento de redes:
- Modelo Organizacional
- Modelo Informacional
- Modelo Funcional
Descreve a forma pela qual a gerência pode ser distribuída entre domínios e sistemas dentro de um domínio.
Modelo funcional
Descreve as áreas funcionais e seus relacionamentos.
Modelo informacional
Provê a base para a definição de objetos gerenciados e suas relações, classes atributos, ações e nomes.
Características do Modelo OSI
Na definição de objetos gerenciados é utilizada a orientação a objetos. Objetos com características semelhantes são agrupados em classes de objetos, uma classe pode ser uma subclasse de outra, e a primeira herda todas as propriedades da segunda.
Classe, Subclasse e Superclasse
Uma classe é definida por:
- Atributos da classe
- Ações que podem ser invocadas
- Eventos que podem ser relatados
- Subclasse a qual ela deriva
- Superclasse na qual ela está contida
Para a definição dos objetos gerenciados deve-se considerar três hierarquias:
- Hierarquia de herança
- Hierarquia de nomeação
- Hierarquia de registros usados na caracterização e identificação de objetos gerenciados
Hierarquia de Herança
Conhecida também como hierarquia de classe, tem como objetivo facilitar a modelagem dos objetos, através da utilização do paradigma da orientação a objetos. Ferramenta que facilita a definição de classes, superclasses, subclasses.
Hierarquia de Nomeação
Hierarquia usada para identificar uma instância de um objeto. Conhecida como Hierarquia de containment, descreve a relação de "estar contido em" aplicado aos objetos.
Um objeto gerenciado está contido dentro de um (e somente um) objeto gerenciado, um objeto gerenciado existe somente se o objeto que o contém existir.
Hierarquia de Registro
Hierarquia usada para identificar os objetos, independentemente das hierarquias de heranças e nomeação. É especificada segundo regras estabelecidas pela notação ASN.1 (Abstract Syntax Notation. One).
Cada objeto é identificado por uma sequência de números, correspondente aos nós percorridos desde a raiz, até o objeto em questão.
MIB da Internet
O RFC (Request for Comments) 1066 apresentou a primeira versão da MIB, a MIB-1, o IAB (Internet Activities Board) aceita MIB como padrão no RFC 1156.
O RFC 1158 propôs uma segunda MIB, a MIB-II, aceita e formalizada como padrão no RFC 1213.
A árvore da MIB II
Usa arquitetura de árvore de registro, cada parte da informação da árvore é um nó rotulado formado por:
Identificador de objetos (OID): 1.3.6.1.1
Descrição textual: directory(1)
O nó raiz da árvore (MIB) possui três sub-árvores:
- ccitt(0): Administração CCITT (Comite Consultatif Internationale de Telegraphie et Telephonie)
- iso(1): Administração ISO
- joint-iso-ccitt(2): Administração ISO e CCITT
- org(3)
- dod(6)
- Internet(1)
O nó Internet(1) possui quatro subárvores:
- directory(1): Contém informações sobre o serviço de diretórios OSI
- mgmt(2): Informações de gerenciamento
- experimental(3): Objetos em pesquisa pela IAB
- private(4): Objetos definidos por outras organizações
Abaixo do nó mgmt(2) estão os objetos usados para se obter informações específicas de rede.
A árvore da MIB II
Objeto System (1.3.6.1.2.1.1)
Exemplos de Grupos
Grupo System - Sistema de operação dos dispositivos da rede
Descrição textual: iso.org.dod.internet.mgmt.mib-2.system
OID: 1.3.6.1.2.1.1
Componentes:
sysDesc(1): Descrição do sistema, nome completo e versão do tipo de hardware, sistema operacional e software de rede.
sysObjectId(2): OID de registro (fabricante do sistema).
sysUpTime(3): Tempo de atividade do sistema (1/100 s).
sysContact (4): Pessoa ou grupo responsável pelo nó.
sysName(5): Nome do nó na rede.
sysLocation(6): Localização física do nó.
sysServices(7): Flags indicando serviços suportados.
Grupo Interfaces - Interface da rede com o meio físico
Descrição textual: iso.org.dod.internet.mgmt.mib-2.interface
OID: 1.3.6.1.2.1.2
Componentes:
ifNumber(1): Número de interfaces de rede (independentemente do seu estado atual) presentes no sistema.
ifTable(2): A tabela de informações sobre cada interface de rede, o número de interfaces é dado pelo valor do ifNumber.
ifEntry(ifTable 1): Entradas de valores sobre cada uma das interfaces
ifIndex(ifEntry 1): Um valor único para cada interface, permite identificar a interface.
ifDescr(ifEntry 2): Identificação da interface, deve incluir o nome do fabricante, o nome do produto e a versão da interface.
ifType(ifEntry 3): Tipo de interface.
ifMtu(ifEntry 4): Tamanho máximo do datagrama suportado pela interface, especificado em octetos.
ifSpeed(ifEntry 5): Uma estimativa da largura de banda atual da interface em bits por segundo. Para interfaces que não variam em largura de banda ou para aqueles onde não precisa estimativa pode ser feita, este objeto deve conter a largura de banda nominal.
ifPhysAddress(ifEntry 6): Endereço físico da interface, Para interfaces que não têm tal endereço (por exemplo, uma linha serial), este objeto deve conter um octeto string de comprimento zero.
ifAdminStatus(ifEntry 7): Indica o estado desejado da interface.
ifOperStatus(ifEntry 8): Indica o estado atual de funcionamento do interface.
up(1), -- pronto para passar pacotes
down(2), -- interface desabilitada
testing(3) -- indica que nenhum pacote em estado operacional podem ser passados.
ifLastChange(ifEntry 9): O tempo de funcionamento desde que a interface entrou em estado operacional.
ifInOctets(ifEntry 10): O número total de octetos recebidos na interface, incluindo caracteres de enquadramento (framing characters).
ifInUcastPkts(ifEntry 11): O número de pacotes unicast entregues a um protocolo de camada superior.
ifInNUcastPkts(ifEntry 12): O número de pacotes não unicast (ou seja, broadcast ou multicast) entregues a um protocolo de camada superior. "
ifInDiscards(ifEntry 13): O número de pacotes de entrada que foram escolhidos para serem descartados, mesmo que nenhum erro tenha sido detectado, impede a entrega dos pacotes a um protocolo de camada superior. Uma razão possível para descartar tais pacotes poderia ser para liberar espaço de buffer.
ifInErrors(ifEntry 14): O número de pacotes de entrada que continham erros que impedem seu fornecimento a um protocolo de camada superior.
ifInUnknownProtos(ifEntry 15): O número de pacotes recebidos através da interface que foram descartados por causa de um protocolo desconhecido ou não suportado.
ifOutOctets(ifEntry 16): O número total de octetos transmitidos na interface, incluindo caracteres de enquadramento (framing characters).
ifOutUcastPkts(ifEntry 17): O número total de pacotes que o protocolo de camada superior solicitou que fossem transmitidos, incluindo aqueles que foram descartados ou não enviados.
ifOutNUcastPkts(ifEntry 18): O número total de pacotes não unicast (ou seja, broadcast ou multicast) que o protocolo de camada superior solicitou que fossem transmitidos, incluindo aqueles que foram descartados ou não enviados.
ifOutDiscards(ifEntry 19): O número de pacotes de saída que foram escolhidos para serem descartados, mesmo que nenhum erro tenha sido detectado, impede a transmissão dos pacotes. Uma razão possível para descartar tais pacotes poderia ser para liberar espaço de buffer.
ifOutErrors(ifEntry 20): O número de pacotes de saída que não puderam ser transmitidos devido a erros.
ifOutQLen(ifEntry 21): O comprimento da fila de saída de pacotes (em pacotes).
ifSpecific(ifEntry 22): Uma referência a definições MIB específicos para uma mídia em particular, sendo usado para realizar a interface com o objeto. Por exemplo, se a interface é realizado por uma ethernet, então o valor deste objeto refere-se a um documento que define objectos específicos para ethernet. Se esta informação não é presente, seu valor deve ser definido como OBJECT IDENTIFIER { 0 0 }, que é uma sintaxe válida para identificador de objeto, e estará em conformidade com qualquer implementação de ASN.1 e BER que devera ser capaz de gerar e reconhecer esse valor.
Grupo at (Address Translation) - Mapeamento de endereços IP em endereços físicos.
Descrição textual: iso.org.dod.internet.mgmt.mib-2.at
OID: 1.3.6.1.2.1.3
Componentes:
atTable(1): As tabelas de tradução de endereços, devem conter o endereço de rede para seu endereço físico equivalente.
Algumas interfaces não usam tabelas de conversão para determinar equivalências endereço (por exemplo, DDN-X.25 tem um método algorítmico), se todas as interfaces são deste tipo, então a tabela Address Translation está vazia, ou seja, tem zero entradas.
atEntry(atTable 1): Cada entrada contém um endereço de rede para seu endereço físico equivalente.
atIfIndex(atEntry 1): A interface identificada por um determinado valor deste índice é a mesma interface identificada pelo mesmo valor de ifIndex.
atPhysAddress(atEntry 2): Endereço físico da interface.
atNetAddress(atEntry 3): O endereço da rede (por exemplo, o endereço IP).
Grupo ip - Protocolo IP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.ip
OID: 1.3.6.1.2.1.4
Componentes (Apenas Alguns):
ipForwarding(1): (forwarding(1), not-forwarding(2)): Se o IP Forward está ou não habilitado no dispositivo.
ipInReceives(3): O número total de datagramas de entrada recebidos pela interface,incluindo aqueles recebidos com erro.
ipInAddrErrors(5): O número de datagramas de entrada descartados porque o endereço IP de destino em seu campo de cabeçalho IP não era um endereço válido. Essa contagem inclui endereços inválidos (por exemplo, 0.0.0.0) e os endereços de Classes não suportsadas (por exemplo, Classe E).
ipInUnknownProtos(7): O número de datagramas recebido com sucesso, mas descartados por causa de um protocolo desconhecido ou não suportado.
ipOutDiscards(11): O número de datagramas IP de saída para os quais não foram encontrados problemas para impedir a sua transmissão ao seu destino, mas que foram descartados (por exemplo, por falta de espaço de buffer).
ipOutNoRoutes(12): O número de datagramas IP descartados, porque nenhuma rota podia ser encontrada para transmiti-los aos seus destinos.
ipAddrTable(20): Tabela de endereçamento IP.
ipAdEntReasmMaxSize(ipAddrEntry 5): O tamanho do maior datagrama IP que esta entidade pode re-montar a partir dos datagramas IP fragmentados recebidos por esta interface.
ipRouteTable(21): Tabela de roteamento IP.
ipRouteDest(ipRouteEntry 1): Endereço IP do destino da rota. Uma entrada com valor 0.0.0.0 é considerada uma rota padrão.
ipRouteMetric1(ipRouteEntry 3): A métrica de roteamento primário para esta rota. A semântica desta métrica é determinada pelo protocolo de roteamento especificado na rota do valor ipRouteProto. Se essa métrica não é utilizada, seu valor deve ser definido como -1.
ipRouteNextHop(ipRouteEntry 7): O endereço IP do próximo salto da rota. (No caso de uma rota ligada a uma interface que se realiza através de uma mídia de broadcast, o valor deste campo é o endereço IP do agente daquela interface.)
Grupo icmp – Protocolo ICMP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.icmp
OID: 1.3.6.1.2.1.5
Componentes (Apenas Alguns):
icmpInMsgs(icmp 1): O número total de mensagens ICMP que a entidade recebeu. Note que a contagem inclui todos os contadores de icmpInErrors.
icmpInErrors(icmp 2): O número de mensagens ICMP que a entidade recebeu, mas determinada por erros ICMP específicos (ICMP checksums com erro, erro no tamanho, etc.)
icmpInDestUnreachs(icmp 3): O número de mensagens ICMP recebidas com destino inacessível.
icmpInTimeExcds(icmp 4): O número de mensagens ICMP recebidas com tempo excedido.
Grupo TCP – Protocolos TCP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.tcp
OID: 1.3.6.1.2.1.6
Componentes (Apenas Alguns):
tcpConnTable(13): Uma tabela contendo informações de conexão TCP específicas.
tcpConnState(tcpConnEntry 1): O estado da conexão TCP.
tcpConnLocalAddress(tcpConnEntry 2): O endereço IP local para esta conexão TCP. No caso de uma conexão no estado ouvindo disposta a aceitar conexões para qualquer interface IP associado ao nó, o valor 0.0.0.0 é usado.
tcpConnRemAddress(tcpConnEntry 4): O endereço IP remoto para essa conexão TCP.
tcpConnRemPort(tcpConnEntry 5): O número da porta remota para esta conexão TCP.
Grupo UDP – Protocolos UDP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.udp
OID: 1.3.6.1.2.1.7
Componentes:
udpInDatagrams(1): O número total de datagramas UDP entregues aos usuários UDP.
udpNoPorts(2): O número total de datagramas UDP recebidos para os quais não houve aplicação na porta de destino.
udpInErrors(3): O número de datagramas UDP recebidos que não puderam ser entregues por outras razões que a falta de uma aplicação na porta de destino.
udpOutDatagrams(4): O número total de datagramas UDP enviados a partir desta entidade.
udpTable(5): Uma tabela contendo informações sobre os ouvintes UDP.
udpEntry(udpTable 1): Informações sobre um determinado ouvinte UDP.
udpLocalAddress(udpEntry 1): O endereço IP local para este ouvinte UDP. No caso de um ouvinte UDP que está disposto a aceitar datagramas para qualquer interface IP associado com o nó, o valor 0.0.0.0 é usado.
udpLocalPort(udpEntry 2): O número da porta local para este ouvinte UDP.
Grupo EGP – Protocolo EGP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.egp
OID: 1.3.6.1.2.1.8
Componentes (Apenas Alguns):
egpInMsgs(1): O número de mensagens EGP recebidas sem erro.
egpInErrors(2): O número de mensagens EGP recebidas com erro.
egpOutMsgs(3): O número total de mensagens EGP gerados localmente.
egpOutErros(4): O número de mensagens EGP gerados localmente não enviadas devido a limitações de recursos dentro de uma entidade EGP.
egpNeighTable(5): A tabela de vizinhos EGP.
Grupo cmot – Protocolo CMOT
Descrição textual: iso.org.dod.internet.mgmt.mib-2.cmot
OID: 1.3.6.1.2.1.9
Histórico (alguns dizem histérico)
Grupo Transmission – Meios de Transmissões
Descrição textual: iso.org.dod.internet.mgmt.mib-2.transmission
OID: 1.3.6.1.2.1.10
Histórico (alguns dizem histérico)
Grupo SNMP – Protocolo SNMP
Descrição textual: iso.org.dod.internet.mgmt.mib-2.snmp
OID: 1.3.6.1.2.1.11
Componentes:
snmpInPkts(1): O número total de mensagens entregues à entidade SNMP pelo serviço de transporte.
snmpOutPkts(2): O número total de mensagens SNMP que foram passados da entidade protocolo SNMP para o serviço de transporte.
snmpInBadVersions(3): O número total de mensagens SNMP que foram entregues à entidade protocolo SNMP, mas eram de uma versão SNMP não suportada.
snmpInBadCommunityNames(4): O número total de mensagens SNMP entregues à entidade protocolo SNMP, mas que usaram um nome da comunidade SNMP desconhecida pela entidade.
snmpInBadCommunityUses(5): O número total de mensagens SNMP entregues à entidade protocolo SNMP que representaram uma operação SNMP que não era permitido pela comunidade SNMP nomeada na mensagem.
snmpInASNParseErrs(6): O número total de erros ASN.1 ou BER encontrados pela entidade protocolo SNMP quando decodificou as Mensagens SNMP recebidas.
-- (7): Não é usado
snmpInTooBigs(8): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `tooBig '.
SnmpInNoSuchNames(9): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `noSuchName '.
SnmpInBadValues(10): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `badValue '.
snmpInReadOnlys(11): O número total válido de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é 'readOnly'. Note-se que é um erro de protocolo para gerar um PDU SNMP que contém o valor `readOnly ' no campo erro de status, como tal este objeto é fornecido como um meio de detectar implementações incorretas do SNMP.
snmpInGenErrs(12): O número total de PDUs SNMP que foram entregues à entidade protocolo SNMP e para os quais o valor do campo status de erro é `genErr'.
snmpInTotalReqVars(13): O número total de objetos MIB que foram recuperados com sucesso pela entidade protocolo SNMP como o resultado de receber PDUs SNMP Get-Request e Get-Next válidos.
snmpInTotalSetVars(14): O número total de objetos MIB que foram alterados com sucesso pela entidade protocolo SNMP como o resultado de receber PDUs SNMP Set-Request válidos.
snmpInGetRequests(15): O número total de PDUs SNMP Get-Request que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInGetNexts(16): O número total de PDUs SNMP Get-Next que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInSetRequests(17): O número total de PDUs SNMP Set-Request que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInGetResponses(18): O número total de PDUs SNMP Get-Response que foram aceitas e processadas pela entidade protocolo SNMP.
snmpInTraps(19): O número total de PDUs SNMP Trap que foram aceitas e processadas pela entidade protocolo SNMP.
snmpOutTooBigs(20): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é `tooBig '.
snmpOutNoSuchNames(21): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` noSuchName '.
snmpOutBadValues(22): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` badValue '.
-- (23): Não é usado
snmpOutGenErrs(24): O número total de PDUs SNMP que foram gerados pela entidade protocolo SNMP e para os quais o valor do campo status de erro é ` genErr '.
snmpOutGetRequests(25): O número total de PDUs SNMP Get-Request que foram gerados pela entidade protocolo SNMP.
snmpOutGetNexts(26): O número total de PDUs SNMP Get-Next que foram gerados pela entidade protocolo SNMP.
snmpOutSetRequests(27): O número total de PDUs SNMP Set-Request que foram gerados pela entidade protocolo SNMP.
snmpOutGetResponses(28): O número total de PDUs SNMP Get-Response que foram gerados pela entidade protocolo SNMP.
snmpOutTraps(29): O número total de PDUs SNMP Trap que foram gerados pela entidade protocolo SNMP.
snmpEnableAuthenTraps(30): (enabled(1), disabled(2)): Indica se o processo do agente SNMP esta configurado para gerar traps de falha de autenticação. O valor deste objeto substitui qualquer informação de configuração, como tal, fornece um meio pelo qual todos os traps de falha de autenticação possam ser desabilitados.
Note que é altamente recomendável que esse objeto seja armazenados em memória não-volátil para que ele permaneça constante entre as reinicializações do sistema de gerencia de rede.
Referências:
RFC1213
Pessoal o material usado como base para a criação destes textos, veio de amigos, listas de distribuição e pesquisas na internet, portanto não possuo referências sobre os mesmos, mas se você identificar algum material de sua autoria, por favor entre em contato que os devidos créditos serão atribuídos.
Assinar:
Postagens (Atom)