Por que eu devo ler este artigo:Este artigo aborda o monitoramento de ativos de rede utilizando o Cacti. Explica-se o que ele é, como é seu funcionamento, como foi escrito, como adicionar devices e criar gráficos. Além disso, explica-se como configurar o Cacti a partir de uma instalação mínima do CentOS 6, instalar e configurar o servidor web e o banco de dados.

Em que situação o tema útil
Este artigo é útil para todos que tenham interesse no monitoramento de ativos de rede. Em particular, para aqueles interessados na configuração de um ambiente de monitoramento.

Monitoramento com o Cacti
Este artigo é destinado a todos que ainda não conhecem ou conhecem pouco sobre o Cacti. Aqui você entenderá como ele funciona, quais são as tecnologias envolvidas e como ele pode ser configurado. Descreve-se como instalar e configurar componentes do famoso LAMP (Linux, Apache, MySQL e PHP) e como o Cacti faz uso dessas tecnologias.

O Cacti é uma solução PHP e MySQL que utiliza a engine RRDtool (base de dados desenvolvida para armazenar séries de dados numéricos sobre o estado de redes de computadores) para gerar gráficos. Ela possui uma interface gráfica para gerenciamento bastante amigável onde se podem realizar todas as configurações como, por exemplo: de devices monitorados, grupos, templates, formas de coleta, formas de armazenamento, formas de exibição, etc.

Neste artigo iremos explicar as principais características da ferramenta, como ela funciona e o que se pode fazer para ajudar o administrador de redes a solucionar problemas que possam ocorrer na infraestrutura.

A instalação padrão já possui diversas configurações prontas. Veremos no estudo de caso, um pouco mais à frente, que para monitorar o uso da banda de um switch ou roteador via SNMP são necessárias pouquíssimas configurações. Se você deseja saber mais sobre como o protocolo SNMP funciona, veja o artigo monitorando ativos de rede referenciado na seção Links deste artigo.

Com o Cacti é possível monitorar tanto servidores quanto ativos de rede. Porém, recomenda-se que o administrador utilize o Cacti apenas para os ativos de rede. Caso você tenha um ambiente grande de servidores, utilize o Collectd. Neste artigo abordaremos como monitorar os equipamentos de rede de forma abrangente para que se possa agir antes do problema acontecer.

Estrutura do Cacti

Para entender como o Cacti funciona, podemos dividi-lo em três partes: coleta de informações, forma de armazenamento dos dados no RRD e como esses dados serão exibidos. Todas as partes precisam estar funcionais e integradas, do contrário você terá problemas.

Caso você tenha algum problema com seu gráfico, antes de tudo veja os logs do sistema. O Cacti possui um modo de DEBUG para seu log bastante eficaz. Consegue-se resolver boa parte dos problemas fazendo análise do mesmo. Caso o administrador não consiga entender o problema pelo log, analise primeiro se os dados estão sendo coletados, se eles estão sendo armazenados no RRD e, por último, se a configuração de exibição está coerente com o que está gravado no RRD.

Coleta

Na instalação padrão do sistema, existem algumas formas padrão de coleta que são suficientes para gerar os gráficos dos roteadores e switches. Porém, caso você tenha uma situação específica e quiser criar um gráfico disso, é possível. Por exemplo, você pode gerar um gráfico de conexões TCP na porta 80 do servidor local.

Apesar do Cacti ter sido escrito na linguagem de programação PHP, os scripts podem ser escritos em qualquer linguagem desde que seja executável e a saída seja definida de acordo com o formato esperado. Os scripts são chamados de Data Input Method e estão localizados em LOCAL_INSTALACAO/scripts/. O Cacti disponibiliza, por padrão, scripts para gerar gráficos do servidor local, ou seja, com esses scripts você não conseguirá gerar gráficos de computadores remotos.

Outra forma de coleta é por meio de SNMP DATA QUERY. Este método consiste em um arquivo XML (ExtensibleMarkupLanguage) que contém as OIDs dos gráficos que serão gerados. As configurações para gerar gráficos de estatísticas de interface de rede e utilização de CPU de alguns equipamentos de rede estão prontas e localizadas em LOCAL_INSTALACAO/resource/snmp_queries/.

Armazenamento

A forma de armazenamento das informações no RRD são definidas através de um Data Template. Nele, informa-se qual o método de coleta, quais serão os tipos de mídias disponíveis (RRA), o tipo do dado e suas características.

Um RRD é composto por algumas camadas. Observe na Figura 1 cada uma delas:

  • PDP (Primary Data Point): É o ponto inicial de um RRD, ou seja, os valores que estão sendo coletados no momento e que serão utilizados para gerar os valores atuais, sendo eles mínimo, máximo e a média;
  • CF (Consolidation Function): Consolida vários PDPs gerando média, mínimo e máximo;
  • CDP (Consolidated Data Point): Após terem sido consolidados os últimos valores coletados e gerado a média, valor mínimo e valor máximo, gera-se um item que será armazenado como histórico, o CDP;
  • RRA (Round-Robin Archive): Armazena uma quantidade fixa de CDPs para gerar o histórico;
  • RRD (Round-Robin-Database): Representa o resultado final, que é composto por vários RRAs.
RRD Engine (Adaptada de
//www.loriotpro.com)
Figura 1. RRD Engine (Adaptada de http://www.loriotpro.com).

Exibição

Para exibir um gráfico, o administrador deve associar um Device (o nome do servidor) a um Data Template. Essa associação gerará um Data Source (que é o RRD em si), ou seja, o local onde o Cacti buscará os dados.

Por último, configura-se o Graph Template. Nele informa-se o Data Source, quais informações serão exibidas e as características do gráfico.

Graph Templates

Para facilitar a vida do administrador, o Cacti permite que criemos templates. Assim, ao invés de ter que associar vários gráficos a cada novo device, criamos um Host Template e depois associamos diversos gráficos a um Host Template e cada novo device apenas ao Host Template.

O Cacti já disponibiliza alguns Host Templates de exemplo que podemos utilizar para criação de nossos próprios Host Templates. Durante o estudo de caso faremos uso de um deles.

Hands on

Agora iremos instalar, configurar o Cacti e gerar alguns gráficos de exemplo. O sistema operacional onde a máquina virtual foi criada é o Mac OS X 10.6.8 e teremos o Parallels Desktop como hypervisor. Durante a instalação do CentOS na máquina virtual, escolha o tipo minimal. Assim não será personalizado nenhum pacote durante a instalação.

A Tabela 1 apresenta as informações para instalação e configuração da máquina virtual onde iremos instalar o Cacti.

Informações da máquina virtual
Tabela 1. Informações da máquina virtual.

Instando o Cacti

O Cacti é uma ferramenta simples de instalar e configurar. Basta fazer o download do código fonte, descompactá-lo e instalar o PHP. Para tal, execute a sequência de comandos da Listagem 1.

Listagem 1. Instalando o Cacti a partir do código fonte.


  # yum install –y php php-cli php-snmp php-mysql php-pdo rrdtool net-snmp-utils
  # yum install -y wget && wget http://www.cacti.net/downloads/cacti-0.8.8a.tar.gz
  # tar xzvf cacti-0.8.8a.tar.gz -C /usr/share/
  # ln -s /usr/share/cacti-0.8.8a /usr/share/cacti

Apache

Como estamos criando gráficos, é natural que precisemos de um servidor web para que o gráfico esteja disponível remotamente. O httpd já foi instalado como parte dos pacotes anteriores. O processo httpd é um servidor web que será utilizado para possibilitar a visualização dos gráficos. Para configurar este serviço, execute a sequência de comandos da Listagem 2. Com estes comandos alteramos o dono dos arquivos do sistema para o usuário que o processo roda, ou seja, apache.

Feito isso, agora estamos prontos para instalar o banco de dados.

Listagem 2. Configurando o Apache.


  # chown -R apache: /usr/share/cacti*
  # cat > /etc/httpd/conf.d/cacti.conf << EOF
  > Alias /cacti    /usr/share/cacti
  > <Directory /usr/share/cacti/>
  >     Options Indexes FollowSymLinks
  >     AllowOverride None
  >     Order allow,deny
  >     Allow from all
  > </Directory>
  > EOF
  # chkconfig httpd on && service httpd start

Instalando o MySQL

O Cacti necessita de um banco de dados para armazenar suas configurações e algumas informações. Para isto, devemos instalar o MySQL. Sendo assim, execute a sequência de comandos da Listagem 3 para instalar e configurar o banco de dados.

Listagem 3. Instalando o MySQL Server.


  # yum install -y mysql-server
  # chkconfig mysqld on && service mysqld start
  # /usr/bin/mysqladmin -u root password 'SENHA'

Lembre-se de substituir a palavra SENHA pela senha de root que você deseja. É importante que no servidor de produção a senha seja complexa, ou seja, contenha caracteres minúsculos, maiúsculos, especiais e numéricos.

Em seguida, execute o comando mysql_secure_installation para configurar o banco. Neste instante serão feitas algumas perguntas no prompt, responda conforme a Listagem 4.

Listagem 4. Script de configurações de segurança do MySQL.


  Enter current password for root (enter for none): 
  Change the root password? [Y/n] n
  Remove anonymous users? [Y/n] Y
  Disallow root login remotely? [Y/n] Y
  Remove test database and access to it? [Y/n] Y
  Reload privilege tables now? [Y/n] Y

Na primeira resposta digita-se a senha definida anteriormente na Listagem 3. Por ser um campo de senha, ele não é exibido. Em seguida, responde-se n para não trocarmos a senha de root, pois ela já foi definida. A terceira resposta, Y, remove o acesso anônimo ao banco de dados. A quarta resposta, também Y, é um requisito de segurança, pois não permite que o root efetue login remotamente no banco de dados. Se este acesso for necessário, utilize o comando GRANT posteriormente. A penúltima resposta é Y para apagar o database test e, por fim, efetua-se o reload dos novos privilégios do banco. Neste caso, a remoção do login remoto do root.

Por fim, criamos o banco de dados do Cacti, liberamos o acesso e criamos as tabelas com as informações iniciais. Para isso, execute a sequência de comandos da Listagem 5.

Listagem 5. Criar o banco de dados e importar os dados inicias.


  # mysqladmin -p -u root create cacti
  # echo "GRANT ALL ON cacti.* TO cactiuser@localhost IDENTIFIED BY \"cactiuser\";" | mysql -p -u root
  # echo "FLUSH PRIVILEGES;" | mysql -p -u root
  # mysql -pcactiuser -u cactiuser -D cacti < /usr/share/cacti/cacti.sql

O comando mysqladmin cria o database cacti. Em seguida, utiliza-se o comando echo para escrever uma query no MySQL. Por fim, executa-se o script para criar as tabelas do database cacti e inserir os dados iniciais.

SELinux

O SELinux é uma facilidade de segurança disponível nas distribuições baseadas em RPM. Ele é uma camada a mais de segurança para acesso ao sistema operacional, ou seja, ele controla se o software tem permissão para acessar o arquivo. O RPM é um gerenciador de pacotes, ou seja, ele controla todos os pacotes instalados e suas dependências. Recomenda-se que o SELinux permaneça habilitado, pois isto trará maior segurança ao seu sistema.

Para que o Cacti funcione corretamente com o SELinux, execute a sequência de comandos da Listagem 6.

Listagem 6. Configurando o módulo de segurança SELinux.


  # setsebool httpd_read_user_content=1
  # setsebool httpd_tty_comm=1
  # setsebool httpd_can_network_connect=1
  # setsebool httpd_builtin_scripting=1
  # setsebool httpd_enable_homedirs=1
  # setsebool httpd_enable_cgi=1
  # setsebool httpd_can_network_connect=1

Esses comandos são booleanos, ou seja, são flags que se habilitadas permitem que determinados processos possam executar determinada tarefa. Para o sistema operacional Linux, conexões são arquivos, como também os devices, portanto a permissão de acesso também é controlada pelo SELinux.

Caso você tenha problemas para utilizar o SELinux, desabilite-o com o comando setenforce 0. Porém, recomenda-se que ele esteja habilitado, pois este é um módulo de segurança para o sistema operacional.

Firewall

Para que você consiga acessar os gráficos, é necessário liberar a porta 80 com o comando iptables -I INPUT -p tcp --dport 80 -j ACCEPT e, em seguida, salvar as regras com o comando service iptables save. Você pode também desabilitar o firewall com o comando > /etc/syscconfig/iptables e, em seguida, service iptables restart. O firewall estar habilitado ou não é uma questão peculiar a cada ambiente. Se você for desabilitá-lo, certifique-se que existe um firewall, na rede ou sub-rede, filtrando os acessos aos servidores.

Instalação e configuração gráfica do Cacti

Para finalizar a instalação do Cacti, acesse pelo browser o endereço http://10.211.55.11/cacti/ e clique no botão Next na tela inicial da instalação. Feito isso, deverá ser informado se o que estamos fazendo é uma nova instalação ou atualização de versão. Deixe a opção New Install selecionada e clique no botão Next.

No próximo passo perceberemos que o Cacti tentou identificar se todos os binários necessários para seu funcionamento estão instalados. Observe na Figura 2 que todos já foram instalados e clique em Finish.

Caminhos para binários do
sistema
Figura 2.Caminhos para binários do sistema.

O arquivo cacti.sql inseriu no banco de dados o usuário admin com a senha admin. Será solicitado que você troque a senha nesse primeiro acesso.

Antes de começar a coletar informações e gerar gráficos, devemos configurar o Cacti. Para isso, após acessar o Cacti, no menu esquerdo o administrador encontrará a opção Settings. Clique nela e serão exibidas todas as abas de configurações do Cacti.

A primeira aba que será exibida é a aba General. Nela encontra-se informação sobre os logs e configurações globais de SNMP conforme exibido na Figura 3. Não altere nada aqui, mas é importante que você conheça os campos Poller Logging Level e o quadro SNMP Defaults.

Aba General
Figura 3. Aba General.

No primeiro campo você informa qual o nível de detalhamento do log. Quanto maior o nível, mais informações o Cacti irá gerar. No ambiente de produção que não esteja passando por problemas, recomendamos manter a opção LOW. Caso você esteja passando por problemas, altere para DEBUG ou DEVEL.

Já no quadro SNMP Defaults, você define as informações globais de SNMP como, por exemplo: versão e porta. Esta configuração poderá ser sobrescrita quando o administrador adicionar um novo device.

Na aba Paths não alteramos nada, pois acabamos de sair da instalação e já garantimos que está tudo configurado. Contudo, é importante conhecer esta aba, pois se algum dia precisarmos mudar algum binário do pacote net-snmp-utils, o administrador provavelmente a utilizará. Observe na Figura 4 as configurações atuais.

Aba Paths
Figura 4. Aba Paths.

Agora conheceremos a aba Poller. Poller é o nome dado ao processo de coleta e armazenamento de dados. Esta é a aba mais importante, pois nela estão as configurações que indicam como o Cacti irá utilizar os recursos do seu servidor. Observe na Figura 5 as configurações iniciais do Cacti.

Aba Poller
Figura 5. Aba Poller.

Para saber o valor de cada um desses campos, verifique as regras a seguir que explicam como configurá-los:

  • Maximum Concurrent Poller Processes: Quantidade de processos PHP que irão rodar para o Poller. Recomenda-se que o valor seja a quantidade de núcleos de CPU menos um. Isto quer dizer que ficará um núcleo de CPU para o sistema operacional e os outros núcleos serão utilizados pelo Cacti;
  • Poller Interval e Cron Interval: Informa o tempo de coleta e o intervalo entre elas. Geralmente são iguais e com valor de cinco minutos;
  • Maximum Number of Threads per Process: Define a quantidade máxima de threads. Este valor vai depender da capacidade do seu processador. Comece com o valor 10, acompanhe o uso da CPU e o tempo total de coleta. Se o tempo de coleta for muito grande e houver recurso de CPU sobrando, aumente a quantidade de Threads.

Aba Visual

Nesta aba estão as configurações de fontes, cores, etc. conforme apresentadas na Figura 6. O administrador deve configurar conforme sua preferência. Caso não queira alterar nada, as configurações padrões são suficientes.

Aba Visual
Figura 6. Aba Visual.

Cron

O processo de Poller foi configurado na ferramenta e precisa ser executado no sistema operacional conforme desejado. Para esta tarefa utiliza-se o cron. Este é o agendador de tarefas do Linux, ou seja, é ele quem irá executar o script de Poller do Cacti. Para instalar e configurar o serviço, execute a sequência de comandos da Listagem 7.

Listagem 7. Instalando e configurando o agendador de tarefas Cron.

# yum install -y cronie-noanacron
  # echo "*/5 * * * * apache php /usr/share/cacti/poller.php > /dev/null 2>\&1" > /etc/cron.d/cacti
  # service crond start

Nesta listagem, configuramos a coleta (poller) para ser realizada a cada cinco minutos.

Monitorando o consumo da porta de rede

Para simular um roteador ou switch em nosso servidor, utilizaremos o serviço snmpd do Linux. Nos artigos anteriores, explicamos detalhadamente sobre ele. O pacote net-snmp-utils foi instalado anteriormente, no comando yum install da Listagem 1. Portanto, execute a sequência de comandos da Listagem 8 para configurar o serviço.

Listagem 8. Configurando serviço SNMPD.

# echo 'rocommunity public' > /etc/snmp/snmpd.conf
  # chkconfig snmpd on
  # service snmpd start

Além da interface gráfica, o Cacti também possui uma interface de linha de comando, denominada CLI. Nela é possível realizar diversas ações, sendo inclusive muito útil para atividades em massa.

Para trabalhar com o CLI, execute o comando cd /usr/share/cacti/cli e, em seguida, utilize o ls para listar todas as ações disponíveis via CLI. Os nomes são bastante intuitivos.

Iremos abordar o script add_device para que você entenda como funciona o CLI do Cacti. Existe um Host Template padrão que coleta estatísticas das interfaces de rede, então vamos adicionar o novo device já neste template. Para isso, execute o comando php add_device.php --list-host-templates. Este retornará todos os templates disponíveis. Utilizaremos o template “1 Generic SNMP-enabled Host”, pois este realiza a coleta via SNMP das estatísticas de rede.

Conhecido o id do template, execute o comando a seguir:

# php add_device.php
--description=switch1 --ip=localhost.localdomain --avail=pingsnmp
--ping_method=udp --ping_port=53 --template=1

Os parâmetros do script são:

  • --description – informa o nome dado ao device;
  • --ip – informa o endereço do device (em uma situação real, substitui-se o localhost.localdomain pelo FQDN ou endereço IP);
  • --avail – é a forma de verificar se o servidor está respondendo ou não. Utiliza-se pingsnmp para que o Cacti faça um teste de ping e outro teste via SNMP;
  • --ping_method – informa o protocolo para o ping;
  • --ping_port – informa a porta para o ping;
  • --template – informa o ID do Host Template.

O comando executado irá retornar algo como:

Success
- new device-id: (2)

Estude com calma cada um dos scripts. No começo eles podem parecer complicados, mas também podem ser bastante úteis. Realizar tarefas em massa pela interface gráfica é muito mais complicado. Pela interface de linha de comando isto é muito mais simples.

Criando gráficos

Conforme mencionado anteriormente, precisamos associar o device criado ao Data Template. Deste modo, acesse a interface, no menu Devices, clique em switch1 e depois em Create Graphs for this host.

Na próxima tela criamos os gráficos que serão gerados. Para criar o gráfico de tráfego (IN/OUT), selecione o combo da interface que você deseja, informe o graph type In/Out Bits with 95th Percentile e clique no botão Create, conforme Figura 7.

Criar gráfico de consumo
de banda
Figura 7. Criar gráfico de consumo de banda.

Outro gráfico bastante interessante apresentado na Figura 8 é o In/Out Bits. Este modelo de medição de uso de banda é bastante utilizado no mercado para cobrar o consumo de link de internet. Para criá-lo, selecione o combo da interface que você deseja, informe o graph type In/Out Bits (64-bit Counters) e clique no botão Create.

Criar gráfico 95th
percentile
Figura 8. Criar gráfico 95th percentile.

Primeira coleta

Para a coleta começar a ser realizada, é preciso criar a tabela de Poller. Para isto, execute o comando php /usr/share/cacti/cli/rebuild_poller_cache.php.

Depois de criado o cache do Poller com a execução do script anterior (rebuild_poller_cache.php), as coletas serão executadas conforme configurado. Por padrão, os gráficos do servidor do Cacti (chamado localhost) já estão configurados. Para saber se tudo foi feito corretamente, verifique o log do processo de Poller através do comando tail -f /usr/share/cacti/log/cacti.log. O resultado deverá ser parecido com:

09/02/2012 02:50:02 PM - SYSTEM STATS: Time:1.0234 Method:cmd.php Processes:1 Threads:N/A Hosts:2 HostsPerProcess:2 DataSources:5 RRDsProcessed:5

Para que as informações comecem a aparecer no gráfico, devido ao cálculo de média que é feito, o RRD precisa de, no mínimo, três coletas. Portanto, aguarde três coletas e depois acesse o endereço http://10.211.55.22/cacti/graph_view.php?action=preview pelo browser para visualizar os gráficos. As Figuras 9 e 10 ilustram os gráficos gerados para as configurações que fizemos para os itens Bandwidth In/Out e 95th percentile.

Bandwidth In/Out
Figura 9. Bandwidth In/Out.
Bandwidth In/Out 95th percentile
Figura 10. Bandwidth In/Out 95th percentile.

Conclusão

Feito todo o trabalho de configuração, o Cacti já estará coletando as informações e armazenando-as. Portanto, aguarde o tempo de três coletas (se você deixou o tempo padrão, aguarde 15 minutos) e acesse pelo navegador o endereço http://10.211.55.22/cacti/graph_view.php?action=preview.

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 gerar gráficos dos seus equipamentos de rede.

Links