Do que se trata o artigo:

Nesse artigo abordaremos aspectos de monitoramento de ativos de redes utilizando as principais ferramentas open source. Perceberemos que estas ferramentas são ricas em recursos, possuindo diferentes abordagens que garantem o total controle da infraestrutura de redes.

Em que situação o tema útil:

Esse artigo é interessante para todas as empresas que utilizam infraestrutura de TI. Com o conteúdo aqui exposto consegue-se garantir que a infraestrutura de redes esteja funcional. Veremos que através das abordagens apresentadas neste artigo o administrador poderá controlar o crescimento da utilização da infraestrutura e prever seu crescimento antes da ocorrência de problemas.

Resumo DevMan:

Neste artigo discutiremos o monitoramento de ativos de redes utilizando o protocolo SNMP e abordaremos alguns aspectos em servidores Linux como, por exemplo, instalar módulos através do CPAN e gerenciar pacotes RPM. Explicaremos como funciona o monitoramento de uma infraestrutura de redes e demonstraremos algumas configurações. Para isso, utilizaremos pacotes do Linux para simular os equipamentos de rede e criaremos o monitoramento baseado em Nagios.

Em uma infraestrutura de TI, a função dos equipamentos de rede é imprescindível para o correto funcionamento dos outros componentes. Se a comunicação de rede não estiver funcionando corretamente, os serviços podem se comportar de maneira inesperada e com certeza gerarão problemas.

Neste artigo abordaremos como monitorar os equipamentos de rede de forma abrangente para que o administrador possa agir antes do problema acontecer.

Para monitorar equipamentos de rede podemos fazer uso de recursos disponíveis nos próprios equipamentos. Mas para que você consiga monitorar o equipamento é preciso que o mesmo tenha suporte ao protocolo SNMP (Simple Network Management Protocol). Atualmente, a grande maioria dos equipamentos já possui esta funcionalidade. No entanto, é importante citar que a grande maioria dos equipamentos não possui as configurações necessárias para o monitoramento definidas como padrão, então consulte o administrador de rede ou veja no manual do equipamento como habilitar tais configurações.

O SNMP é um protocolo exclusivo para gerenciar ativos de rede. Ele é quem gerencia as informações do equipamento, ou seja, o protocolo é responsável pela coleta e disponibilização dos valores. Com o protocolo SNMP você pode ler e gravar informações. Porém, para fins de monitoramento, utiliza-se apenas o recurso de leitura das informações, pois quem coleta e grava os valores é o próprio sistema do equipamento. Neste artigo, utilizaremos a versão 3 do protocolo SNMP, que exige autenticação por usuário e senha. Portanto, certifique-se que exista um usuário específico para o monitoramento e apenas com permissão de leitura.

Para que o protocolo saiba o que coletar e onde ele deve gravar cada valor, disponibiliza-se a MIB (Management Information Base). Esta base de dados fornecerá vários identificadores de objetos (OID) que nos dirão a quem pertence aquele valor. Por exemplo: o identificador de objeto 1.3.6.1.4.1.789.1.2.1.4 se refere ao valor de CPU idle (ociosa) de alguns switches Cisco. Certifique-se que esta base de informações foi carregada no equipamento que se quer monitorar. Como cada equipamento possui sua própria MIB, deve vir junto com o equipamento ou estar disponível no site do fabricante.

A MIB de estatísticas de utilização da rede é a mais comum entre todos os ativos de rede. Ela é organizada através de índices chamados ifIndex. Durante o monitoramento, cada porta do seu ativo de rede receberá um ID sequencial para que você consiga localizar a informação de cada porta separadamente.

A forma ativa de monitoramento do SNMP é feita através de requisições que podem ser GetRequest, GetNextRequest ou GetBulkRequest. Para minimizar o impacto gerado pelo monitoramento, utilize o GetRequest, pois se utilizadas muitas requisições GetNextRequest ou poucas requisições GetBulkRequest, você consumirá muito recurso do ativo de rede e isto não é bom.

Além da forma ativa de monitoramento, o SNMP também disponibiliza o SNMPTrap. Um trap consiste no envio de um identificador (OID) quando ocorrer determinado evento no equipamento. Por exemplo: para o evento de queda de conectividade (link down) e restabelecimento de conectividade (link up), é enviado um identificador X para o servidor de monitoramento. Dado esta informação, entende-se que o servidor de monitoramento precisará de um sistema que entenda o que significa este identificador e envie a mensagem para o sistema de monitoramento.

SNMP Trap Translator

O SNMP Trap Translator ou SNMPTT é um projeto de código aberto para integrar o daemon snmptrapd com o sistema de monitoramento Nagios (explicado mais adiante).

O projeto consiste em diversos scripts Perl (ler Nota DevMan 1) para realizar diversas tarefas, entre elas a de ser o traphandle, ou seja, quem recebe a saída do daemon snmptrapd e as traduz para o Nagios. O daemon snmptrapd é um binário do pacote net-snmp do Linux.

Nota DevMan 1. Perl

Conforme definido no portal www.perl.org.br, Perl é uma linguagem de programação estável e multiplataforma, usada em aplicações de missão crítica em todos os setores, e tem sido bastante usada para desenvolver aplicações web de todos os tipos.

Nagios

O Nagios é definido como sendo um conjunto de projetos para monitoramento de infraestrutura de TI. Estes projetos são: Nagios core, Nagios plug-ins, Nagios Frontends e Nagios Config Tools. Por se tratar de quatro projetos, percebe-se que o Nagios é um grande e completo sistema de monitoramento, além de ser totalmente open source. Existe também uma versão do Nagios paga chamada Nagios XI. Porém, não iremos considerar esta versão neste artigo.

Nagios Core

O Nagios core é o projeto inicial do Nagios e consiste no sistema de monitoramento em si, ou seja, o sistema responsável por todas as funções de monitorar. Como exemplos de atividades desempenhadas pelo Nagios Core, temos: gerenciar a agenda de monitoramento, realizar o monitoramento ativo, gerar alertas, etc.

Existem diversas formas de se implementar o Nagios, tudo vai depender de quantos servidores serão monitorados e qual o nível de detalhamento de monitoramento que você quer. Se você tiver até 100 servidores, você pode utilizar o NRPE (Nagios Remote Plugin Executor) e fazer o monitoramento ativo no mesmo servidor que gera os alarmes. Porém, se sua infraestrutura for maior que isso ou tiver probabilidade de crescer, recomenda-se que você utilize o collectd para coletar os valores nos servidores monitorados, crie um serviço no Nagios para ler os valores do collectd e gere os alarmes. É importante também separar a função de acompanhar a situação da rede da função de realizar o monitoramento ativo. Assim, recomenda-se ter servidores Nagios específicos para fazer o monitoramento ativo, pois com o aumento da quantidade de servidores, a concorrência entre os serviços de monitoramento poderá trazer problemas.

Hands on

A partir de agora, trabalharemos em um estudo de caso considerando o monitoramento de ativos de rede nas formas ativa e passiva.

O sistema operacional que utilizaremos será o Mac OS X 10.6.8 e o Parallels Desktop para criar a máquina virtual do laboratório. Durante a instalação, escolha o tipo minimal, ou seja, não será personalizado nenhum pacote do sistema operacional.

Na seção de downloads da Infra Magazine disponibilizamos dois arquivos para instalação do sistema operacional. Se o usuário possuir o software kickstart, deve utilizar o arquivo anaconda-ks.cfg, senão deve usar o rpm-qa.txt. Se o usuário seguir esses passos, é importante que o sistema operacional tenha os mesmos pacotes instalados conforme o arquivo rpm-qa.txt.

A Tabela 1 apresenta as informações para instalação e configuração do servidor.

Nome

Sistema operacional

Proc

Mem

Endereço IP

Máscara de rede

Nagios01

CentOS 6.3 x86_64

1

1G

10.211.55.11

255.255.255.240

Tabela 1. Informação da máquina virtual.

Banco de dados

Para este estudo de caso, utilizaremos um banco de dados para algumas funcionalidades. Assim, instale um banco de dados no nagios01. Ambas as ferramentas de monitoramento que faremos uso suportam o MySQL e o PostgreSQL. Para instalar o banco de dados MySQL, execute o comando yum install -y mysql-server, e para instalar o PostgreSQL, execute o comando yum install -y postgresql84-server postgresql84-plperl.

SELinux

O SELinux é uma facilidade de segurança disponível no CentOS. Recomenda-se que você deixe-o habilitado. Para que tudo funcione corretamente com o SELinux, você deve ativá-lo conforme os passos descritos na Listagem 1.

Caso você tenha problemas para utilizar o SELinux, desabilite-o com o comando setenforce 0.

Listagem 1. Habilitando o módulo SELinux.

module mypol 1.0;
   
  require {
      type snmpd_t;
      type var_spool_t;
      class dir { write add_name };
      class file { write ioctl create open getattr };
  }
   
  #============= snmpd_t ==============
  #!!!! This avc is allowed in the current policy
   
  allow snmpd_t var_spool_t:dir { write add_name };
  allow snmpd_t var_spool_t:file { ioctl getattr };
  #!!!! This avc is allowed in the current policy
   
  allow snmpd_t var_spool_t:file { write create open };

Nagios

Como o foco deste estudo de caso não é a instalação do Nagios (mas seu uso), utilizaremos um RPM (RPM Package Manager) fornecido pelo repositório do Fedora (distribuição Linux para a comunidade da Red Hat). Recomenda-se que o Nagios seja compilado pelo próprio administrador.

Para proceder com a instalação do Nagios, execute a sequência de comandos apresentados na Listagem 2.

Listagem 2. Comandos para instalação do Nagios.

  # rpm -ihv http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
  # yum install -y httpd
  # chkconfig httpd on
  # iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  # service iptables save
  # yum install -y nagios nagios-plugins-all
  # htpasswd -c /etc/nagios/htpasswd.users nagiosadmin
  # chkconfig nagios on

O comando rpm é utilizado para gerenciar pacotes RPM. Neste caso, instala-se o pacote do EPEL que adicionará o repositório do Fedora às configurações do YUM. Perceba que o pacote não está hospedado no servidor local, o rpm utiliza o protocolo HTTP para baixar o arquivo e depois segue o procedimento de instalação.

O comando yum é utilizado para gerenciar os pacotes do sistema operacional. Na Listagem 2, o empregamos para instalar o Apache HTTPD, Nagios e Nagios Plugins.

Na sequência, utilizamos o comando iptables para liberar a regra de firewall da porta 80 (HTTP). Em nosso exemplo não utilizaremos HTTPS. Portanto, não foi realizada a regra para a porta 443. Se você pretende usar SSL, crie a regra também para a porta 443, conforme o parâmetro --dport do comando iptables.

Já o comando chkconfig é utilizado para gerenciar os serviços que são iniciados no processo de inicialização do sistema operacional. O aproveitamos em nosso estudo para indicar que o Apache deve ser iniciado nos run levels padrões.

O script de inicialização do Nagios fornecido pelo pacote RPM utiliza o sh como Shell. Em nosso estudo, alteramos para ele adotar o bash. Para isso, informamos o comando sed.

Por fim, o comando htpasswd é um binário que foi instalado no pacote httpd. Com ele foi criada a autenticação do usuário nagiosadmin para o Apache (htpasswd.users).

Monitoramento passivo

O monitoramento passivo de equipamentos de rede é feito através de traps. Trap é o resultado de um evento gerado no equipamento, sendo o mais conhecido o de perda e restabelecimento de conectividade da porta de rede. Quando conectamos o cabo de rede, o estado da porta é alterado de down para up. Este evento gera um trap com OID correspondente ao evento de link up. Quando desconectamos o cabo, o procedimento é o mesmo, mas trocam-se os estados.

NetSNMP

O snmptrapd é o serviço que recebe os traps dos ativos de rede e realiza um pipe para o script do SNMPTT. Para utilizá-lo, execute a sequência de comandos da Listagem 3 para instalar o pacote Net-SNMP com suporte ao Perl, pois conforme dito anteriormente, nossos plugins utilizam-se da linguagem de programação Perl.

Listagem 3. Comandos para instalação do NetSNMP.

  # yum install -y net-snmp net-snmp-perl net-snmp-utils
  # chkconfig snmptrapd on
  # echo 'OPTIONS="-On -Oa -Lsd -p /var/run/snmptrapd.pid"' >> /etc/sysconfig/snmptrapd
  # service snmptrapd start

SNMPTT

O SNMPTT é o script que iniciará o tratamento do trap e enviará os dados coletados ao sistema de monitoramento Nagios. Como os scripts são escritos na linguagem Perl, precisamos instalar alguns plugins, e para isto faremos uso do CPAN. Sendo assim, execute o comando cpan e responda no para a pergunta “Are you ready for manual configuration? [yes]”. Em seguida, no shell do CPAN, digite quit. Feito isso, execute o comando cpan para que sejam realizadas as configurações iniciais do acesso ao CPAN. As configurações são muitas e não abordaremos neste artigo, pois não são necessárias para este exemplo.

Agora execute a sequência de comandos da Listagem 4, para instalar os módulos Perl necessários. Estes módulos são as bibliotecas necessárias para que os scripts funcionem.

Listagem 4. Instalando módulos Perl.

  # yum install -y perl-CPAN perl-Time-HiRes make
  # perl -MCPAN -e 'install Perl::OSType, ExtUtils::MakeMaker'
  # perl -MCPAN -e 'install Module::Build::Compat, Config::IniFiles'

Responda yes para confirmar a instalação dos módulos dependentes. Basta apertar a tecla Enter, pois já é a resposta padrão.

Nosso próximo passo é instalar o SNMPTT. Para isso, execute a sequência de comandos da Listagem 5. O comando groupadd é utilizado para criar grupos e o comando useradd para criar usuários. Perceba que criamos o grupo snmptt e o usuário snmptt dentro desse grupo.

Após isso, utilizamos o sed para alterar os arquivos de inicialização do SNMPTT. Na sequência, o comando mkdir é especificado para criar diretórios. Criamos os diretórios para armazenar os logs e o spool do SNMPTT.

Em seguida, criamos os arquivos de logs em branco a partir do comando touch. Por fim, com o comando chown, alteramos o proprietário dos arquivos e diretórios. Perceba que definimos também o tempo de vida do log e a inicialização automática do serviço. Com isso, todas as configurações necessárias para o serviço do SNMPTT estão finalizadas.

Listagem 5. Comandos para instalação do SNMPTT.

  # yum install -y wget
  # wget http://downloads.sourceforge.net/project/snmptt/snmptt/snmptt_1.3/snmptt_1.3.tgz
  # tar xzvf snmptt_1.3.tgz
  # cd snmptt_1.3
  # cp snmptt.logrotate /etc/logrotate.d/snmptt
  # cp snmptt-init.d /etc/init.d/snmptt 
  # cp snmptthandler /usr/sbin
  # cp snmptt /usr/sbin
  # cp snmpttconvert /usr/sbin
  # cp snmpttconvertmib /usr/sbin
  # cp snmptt.ini /etc/snmp/snmptt.ini
  # chkconfig --add snmptt
  # chkconfig snmptt on
  # groupadd snmptt
  # adduser -g snmptt snmptt
  # sed -i "s/^\/etc\/snmp\/snmptt.conf/\/etc\/snmp\/snmptt.conf.if-mib/g" /etc/snmp/snmptt.ini
  # sed -i "s/log_system_enable = 0/log_system_enable = 1/g" /etc/snmp/snmptt.ini
  # sed -i "s/^net_snmp_perl_enable = 0/net_snmp_perl_enable = 1/g" /etc/snmp/snmptt.ini
  # mkdir /var/spool/snmptt/
  # mkdir /var/log/snmptt/
  # chown -R snmptt: /var/spool/snmptt/ /var/log/snmptt /etc/snmp/snmptt.ini
  # chcon system_u:object_r:var_spool_t:s0 /var/spool/snmptt

Para finalizar a configuração do monitoramento via traps, devemos criar o arquivo de tradução da MIB para o SNMPTT utilizando o script snmpttconvertmib. Este é responsável por ler o arquivo MIB e gerar o arquivo de configuração do SNMPTT. O parâmetro out é onde o arquivo do SNMPTT será gerado, e o parâmetro exec é o script que envia o resultado ao Nagios. O script do parâmetro exec (submit_check_result) é provido pelo pacote do Nagios.

# snmpttconvertmib --in=/usr/share/snmp/mibs/IF-MIB.txt --out=/etc/snmp/snmptt.conf.if-mib --exec='/usr/lib64/nagios/plugins/eventhandlers/submit_check_result $r TRAP 2'

Para facilitar o uso, cada plugin do Nagios trabalha com códigos de saída. Se o código de saída for 0, significa que o plugin foi executado e o serviço está normal; se for 1, significa que você deve ficar alerta (WARNING); se for 2, significa que existe um problema no ambiente; e se for 3, significa que ocorreu algum erro na execução do plugin.

O número 2 após a palavra TRAP é o código de saída para o Nagios. Em nosso estudo de caso, estamos utilizando apenas o Trap de perda de conectividade, portanto o código de saída será 2, que significa CRITICAL. Quando um link perde a conectividade, significa que existe um problema no ambiente, portanto o código de retorno deve ser 2.

SNMPTrapd

O snmptrapd é o daemon que recebe o trap do ativo de rede e o envia para que o SNMPTT faça a tradução e depois a envie ao Nagios. Na seção de downloads da revista você encontrará o arquivo snmptrapd.conf. Copie-o para a pasta /etc/snmp. Já o arquivo TRAP-TEST-MIB.txt deve ser copiado para o diretório das MIBs (/usr/share/snmp/mibs/). Por último, copie o script submit_check_result para /usr/lib64/nagios/plugins/eventhandlers/ e execute o comando chmod +x /usr/lib64/nagios/plug-ins/eventhandlers/submit_check_result.

O comando a seguir adiciona uma linha no arquivo de configuração do Nagios para criar o serviço do Trap:

# echo 'cfg_file=/etc/nagios/objects/snmp.cfg' >> /etc/nagios/nagios.cfg

Na seção de downloads da Infra Magazine você também encontrará o arquivo snmp.cfg. Copie-o para o diretório /etc/nagios/objects/. Este arquivo de configuração representa a configuração do serviço do Nagios para receber os traps.

comando a seguir adiciona a configuração do serviço do Trap no servidor localhost. Com isto, o Nagios passa a monitorar o serviço de traps para o servidor localhost.

# echo -e "define service{\n\tuse\t\tsnmptrap-service\n\thost_name\tlocalhost\n\t}" >> /etc/nagios/objects/localhost.cfg

Agora execute a sequência de comandos da Listagem 6 para iniciar os serviços configurados.

Listagem 6. Iniciando os serviços configurados.

  # service snmptt start
  # service snmptrapd start
  # service nagios start
  # service httpd start

Com os serviços rodando, todas as configurações e dependências estão prontas. Agora execute o próximo comando para enviar um trap idêntico ao que o ativo de rede enviará, a fim de verificarmos o funcionamento do monitoramento.

# snmptrap -v 1 -c public localhost TRAP-TEST-MIB::demotraps localhost 2 0 '' IF-MIB::ifIndex i 1

Atenção: a resolução de nome precisa estar idêntica a localhost. Portanto, a linha dos hosts para localhost deve estar conforme o trecho:

127.0.0.1       localhost       localhost.localdomain

Após a execução desse comando, o snmptrapd receberá um trap que será encaminhado para o script snmptraphandler. O script fará a tradução e utilizará o script submit_check_result para enviar o resultado para o nagios.cmd. Após a escrita do resultado no nagios.cmd, o alarme surgirá no monitoramento.

Prosseguindo com a configuração dos nossos serviços de monitoramento, destacaremos um item muito importante e que muitas vezes não é considerado: a porta do switch ou roteador. É muito importante que se monitore o tráfego da porta de rede além do seu status de conectividade, ou seja, não basta saber se a porta está UP ou DOWN, precisamos verificar também qual é o tamanho do tráfego. A recomendação é que o tráfego fique entre 60% e 70% da capacidade da porta.

Para esta etapa de nosso estudo de caso, faremos uso do memcached. Este é um banco de dados não relacional volátil, ou seja, é um banco de dados baseado em chave e valor armazenado em memória. Assim, execute o comando a seguir para instalar o memcached:

# yum install -y memcached

Para facilitar a configuração de nosso exemplo, utilizaremos o daemon SNMPD para representar o papel do ativo de rede. Como o daemon possui a mesma MIB do ativo de rede, aplicam-se as mesmas configurações. Deste modo, execute o comando a seguir para criar um acesso apenas de leitura para o service:

# echo 'rocommunity public' > /etc/snmp/snmpd.conf

Feito isso, execute os comandos a seguir para iniciar o serviço e testá-lo:

# service snmpd start
  # snmpwalk -v 1 -c public localhost system

No arquivo snmp.cfg baixado anteriormente, existe a configuração do serviço para monitorar se a porta está Up ou Down via SNMP com ifIndex 1. Agora, você precisa configurar um service para cada porta. Portanto, execute o comando abaixo para configurar o monitoramento da porta 1 para o host localhost:

# echo -e "define service{\n\tuse\tlink-status-1\n\thost_name\tlocalhost\n\t}" >> /etc/nagios/objects/localhost.cfg

Para completar o monitoramento, é preciso monitorar o tráfego das portas dos ativos de redes. Para isso, novamente na seção de downloads da Infra Magazine, disponibiliza-se um script para coletar os dados e disponibilizá-los no memcached que configuramos anteriormente. O nome do arquivo é get_bandwidth.pl. Grave-o no diretório /opt/.

O arquivo de configuração para o script get_bandwidth.pl deve ser criado pelo administrador em /etc/get_bandwidth.conf. O conteúdo deste arquivo é separado por “;”, sendo o primeiro campo o nome do servidor ou endereço IP, o segundo a community SNMP e os próximos campos são os índices das portas a coletar. Exemplo: localhost;public;1;2;3.

Como apresentado no comando a seguir, nota-se que o script precisa da permissão de execução e da lib do Perl para o memcached:

  # chmod +x /opt/get_bandwidth.pl
  # yum install -y perl-Cache-Memcached

Para finalizar, colocamos o script no cron para coletar os valores a cada minuto:

  # echo '*/1 * * * * /opt/get_bandwidth.pl' >> /var/spool/cron/root
  # service crond restart

Conclusão

O monitoramento de redes é essencial para a infraestrutura de TI. Deste modo, visando segurança e confiabilidade, deve-se aplicar o monitoramento ativo e passivo para garantir o seu correto funcionamento.

Baseado em soluções open source, mostramos neste artigo como é possível monitorar de forma eficiente e eficaz toda a infraestrutura da rede, garantindo assim o bom funcionamento de todos os outros componentes.

Agora seu ambiente já está pronto para receber as notificações de perda e reestabelecimento de conectividade, além de qualquer outro trap enviado pelo ativo de rede. Com as configurações efetuadas, também é possível monitorar ativamente o status de cada porta.

Links

Site do Collectd
http://collectd.org

Wiki do Collectd
http://collectd.org/wiki/index.php/Main_Page

Documentação do Nagios
http://library.nagios.com/library/products/nagioscore/manuals/

Site do CPAN
http://www.cpan.org