Integrando o Nagios com RRDTool 6


O check_rrd é um plugin que desenvolvi para integrar o Nagios com o RRDTool. Dessa forma teremos um conjunto poderoso de ferramentas, onde será possível obter as mensagens típicas do Nagios (”Ok”, ”Warning”, ”Critical”, ”Unknow”) para as informações armazenadas em arquivos RRD. E o melhor de tudo é que será possível usufruir de toda capacidade de alertas, armazenamento de logs e gerenciamento de problemas que o Nagios possui.

Com o check_rrd é possível analisar qualquer arquivo RRD, contendo dados estatísticos sobre tráfego de uma interface de rede, consumo de disco, ocupação de memória, carga de CPU e tantos outros recursos de um sistema que podem ser coletados por intermédio do protocolo SNMP.

Sobre o check_rrd

Trata-se de um programa desenvolvido em Perl por essa linguagem suportar o formato RRD (Round Robin Database) com o uso da biblioteca librrds-perl. O Perl também proporciona um excelente desempenho e isso é muito importante, pois em muitos casos dezenas de instâncias do check_rrd poderão ser encontradas em execução simultaneamente. A quantidade de instâncias que serão executadas dependerá da quantidade de recursos que são monitorados.

Neste documento vou considerar que o leitor já possua um ambiente com o RRDTool e o Nagios funcionando de forma independente. A idéia básica deste documento é integrar dessas duas poderosas ferramentas com o check_rrd.

A comunidade do Nagios em todo globo já desenvolveu milhares e talvez dezenas de milhares de plugins. Talvez algumas dezenas desses plugins são para analisar o conteúdo de arquivos RRD, mas a grande deficiência que encontrei nesses plugins é que cada um trabalhava apenas um tipo de informação, ou seja, havia um plugin para trabalhar com dados de tráfego de rede, um outro plugin para disco, mais um para CPU, e aí por diante. Isso é muito ruim, pois cada plugin tem sua própria sintaxe, dessa forma é necessário aprender a trabalhar com todos os plugins de forma independente, sem falar que também é necessário mante-los atualizados.

O check_rrd simplifica a análise de qualquer arquivo RRD de num único programa, para isso ele possui um rico conjunto de opções que podem ser facilmente configuradas como veremos adiante neste documento.

Quanto ao desempenho tenho que confessar que fiquei muito satisfeito, pois já configurei Nagios+RRDTool com o plugin check_rrd para monitorar cerca de 300 recursos de uma rede a partir de um computador relativamente ultrapassado (Pentium II 300MHz) e tudo funcionou muito bem. Já existem outros profissionais pelo globo usando o check_rrd e relatando boas notícias sobre este plugin.

Requisitos do sistema

Os requisitos para o check_rrd funcionar são muito simples:

  • Sistema operacional unix like (Linux, Solaris ou alugum-BSD)
  • Nagios 1.2 ou superior
  • RRDTool 1.2 ou superior
  • Perl (testado com versões 5.8.x)
  • Biblioteca Perl librrds-perl

Inicialmente o plug-in foi desenvolvido num Fedora Core 3, mas já está sendo usado com sucesso em diversas versões de Ubuntu, Debian, CentOS, outras distribuições Linux e também no FreeBSD.

Resolvendo dependências

As instruções contidas para resolver as dependências serão baseadas no Ubuntu, pois a maior parte dos usuários check_rrd da atualidade usam Ubuntu ou Debian.

$ sudo apt-get install librrds-perl

Instalação

O procedimento de instalação do check_rrd é muito simples, e se resume em simplesmente fazer download do programa e copia-lo para o diretório de plugins do Nagios, como podemos ver:

$ wget http://pessoa.eti.br/downloads/check_rrd-0.03b.tar.gz
$ tar zxvf check_rrd-0.03b.tgz
$ sudo cp check_rrd-0.03b/check_rrd /usr/lib/nagios/plugins/

É possível que numa instalação customizada do Nagios o diretório de plugin esteja num lugar diferente. Certifique-se do local correto antes de executar o procedimento abaixo.

Fundamentos de funcionamento

É importante realizar um teste inicial antes de configurar o Nagios, esse teste assegura que o programa está funcionando corretamente e que as bibliotecas Perl estão instaladas. Caso haja algum problema certifique-se que a sintaxe usada esteja correta e recorra a sessão “Resolução de problemas freqüentes” no final deste documento.

Opções de linha de comando

A utilização do check_rrd pode parecer num primeiro momento um tanto complicado, mas com a seguinte explicação ficará muito simples de entender:

  • /usr/lib/nagios/plugins/check_rrd: O programa check_rrd (óbvio :-).
  • -f /var/www/rrd/data/firewall-eth1.rrd: Arquivo rrd que será usado.
  • -u “bps”: Identifica a unidade de medida, se fosse percetual de espaço em disco seria “%”. É meramente uma string para tornar mais agradável a saída do programa.
  • -d1 “in”: Especifica o nome da primeira variável.
  • -d2 “out”: Especifica o nome da segunda variável.
  • -m 8: Fator multiplicativo, por padrão num arquivo RRD estatísticas de tráfego são armazenadas em bytes, para tornar a saída mais legível os valores serão multiplicados por 8.
  • -o 5 1000000: Valor esperado para Okay, é o intervalo com os valores de operação normal. Neste exemplo os valores vão de 5 bps até 1 Mbps, iniciei em 5 bps pois não é normal que um link não tenha tráfego algum.
  • -w 5 1500000: Valor esperado para Warning, é o intervalo com valores de operação em nível de alerta.
  • -c 0 2000000: Valor esperado para Critical, trata-se do intervalo com valores que devem ser tratados como um problema sério. Neste caso é constatado um problema tanto se o link estiver com tráfego superior a 1.5 Mbps quanto sem tráfego algum (menor que 5 bps).

Valores retornados

O Nagios não usa as strings exibidas pelos plugins para se orientar quanto ao estado de um recurso, na verdade os plugins precisam retornar números para que o Nagios possa interpreta-los com o stado do recurso obtido pelo plugin, segue os estados compreendidos pelo Nagios.

  • 0: Ok
  • 1: Warning
  • 2: Critical
  • 3: Unknown

Tráfego de rede

Segue um exemplo, onde mostramos como analisar o tráfego de uma interface de rede que está conectada num link Internet de 2Mbps:

$ /usr/lib/nagios/plugins/check_rrd -f /var/www/rrd/data/firewall-eth1.rrd -u "bps" \
-d1 "in" -d2 "out" -m 8 -o 5 1000000 -w 5 1500000 -c 0 2000000

O seguinte resultado será retornado pelo comando acima:

Warning: in = 1.0Mbps, out = 313.8kbps

Adicionalmente será retornado um valor, é esse valor que será tratado pelo Nagios. Em nosso exemplo como o status da checagem foi Warning então foi retornado o número um:

$ echo $?
1

Para facilitar o entendimento, segue a imagem referente ao arquivo RRD usado anteriormente. Perceba que os valores retornados estão de acordo com os exibidos na figura:

CPU

Neste exemplo a monitoração é feita numa CPU de roteador:

O comando usado no check_rrd:

$ ./check_rrd -f /var/www/rrd/data/router-cpu.rrd -u "%" -d1 "CPU" -o 0 50 -w 0 70 -c 0 100

A saída do comando:

Check OK: CPU = 3.0%

O valor retornado:

$ echo $?
0

Espaço em Disco

Neste outro exemplo a monitoração é feita no disco C: de um servidor Windows:

O comando usado no check_rrd:

$ ./check_rrd -f /var/www/rrd/data/ro4.ro-disc_f.rrd -u "%" -d1 "C:" -o 0.1 70 -w 0.1 80 -c 0 100

A saída do comando:

Critical: C: = 96.5%

O valor retornado:

$ echo $?
2

Outros exemplos podem ser obtidos executando o programa check_rrd com a opção -h:

$ /usr/lib/nagios/plugins/check_rrd -h

Configurando o Nagios

Para que a integração do RRDTool com o Nagios proceda plenamente, será necessário configurar os arquivos de definição de objetos do Nagios. Numa instalação padrão, estes arquivos possivelmente estão localizados no diretório /etc/nagios/ (os outros caminhos usados pelas distribuições para armazenamento dos arquivos de configuração são /etc/nagios2, /etc/nagios3, /usr/local/nagios/etc).

Definição de objeto do comando

Abaixo temos três exemplos de definições de comandos customizados que podem configurados no Nagios. Essas configurações podem ser adicionadas ao arquivo de configuração de objetos de comandos, ou em um outro arquivo de configuração de objetos que o usuário preferir.

A seguir um exemplo de definição de comando para checagem de espaço em disco com o check_rrd:

# 'check_discspace' command definition
define command{
command_name check_discspace
command_line /usr/lib/nagios/plugins/check_rrd -f "$ARG1$" -u "%" -d1 "$ARG2$" -o 0.1 70 -w 0.1 80 -c 0 100
}

O próximo exemplo é usado para verificar a utilização de CPU:

# 'check_cpu' command definition
define command{
command_name check_cpu
command_line /usr/lib/nagios/plugins/check_rrd -f "$ARG1$" -u "%" -d1 "CPU" -o 0 50 -w 0 70 -c 0 100
}

Este exemplo mostra como o check_rrd pode ser usado para trabalhar com tráfego de rede.

# 'check_traf' command definition
define command{
command_name check_traf
command_line /usr/lib/nagios/plugins/check_rrd -f "$ARG1$" -u "bps" -m 8 -d1 "In" -d2 "Out" -o $ARG2$ -w $ARG3$ -c $ARG4$
}

Você pode configurar outras definições de comandos, como por exemplo, para checar quantidade de toner de uma impressora, o número de processos em execução em servidores e tudo que sua mente conseguir imaginar.

Configurando o services.cfg

O exemplo abaixo capacita o Nagios para fazer a checagem do tráfego no gateway da rede. O arquivo RRD deve ser apontado corretamente, e os parametros de Okay, Warning e Critical estão preparados para um link de 2Mbps. Usaremos então o alias check_traf configurado no arquivo /etc/nagios/misccommands.cfg anteriormente.

# 'Traffic' service definition
define service{
use generic-service
host_name gw
service_description TRAF
check_command check_traf!/var/www/rrdtool/data/router-ser0.rrd!5 1000000!5 1500000!0 2000000
}

O próximo exemplo será usado para fazer a checagem de CPU, deve ser alterado o nome do servidor espeficicado pela diretriz host_name e também o caminho para o arquivo RRD.

# 'CPU' Service definition
define service{
use generic-service
host_name NOME_DO_SERVIDOR
service_description CPU
check_command check_cpu_smp!/var/www/rrdtool/data/servidor-cpu.rrd!CPU
}

Para checagem de disco podemos usar o exemplo abaixo, deve ser alterado a diretriz host_name e o caminho do arquivo RRD.

# 'Disc' Service definition
define service{
use generic-service
host_name NOME_DO_SERVIDOR
service_description DISC
check_command check_discspace!/var/www/rrdtool/data/servidor-disc.rrd!/
}

Resultados

Como resultado do trabalho teremos a integração completa do RRDTool com o Nagios, onde será possível usufruir de todo poder de geração de relatório e alertas que o Nagios possui.

A imagem abaixo mostra um exemplo de aplicação do check_rrd, onde o Nagios está mostrando um alerta para o estado de Warning da inteface do host gw (gateway). Esse alerta foi emitido porque o tráfego de entrada é maior ou igual a 1 Mbps.

Obviamente neste estágio já é possível configurar o Nagios para tomar alguma ação quando esse recurso (tráfego) chegar neste estado (Warning), então o Nagios poderá enviar um e-mail, um SMS, soar um alarme, etc.

Notas sobre desempenho

Geralmente o arquivo RRD é atualizado a cada 5 minutos, se ocorrer do check_rrd tentar ler o arquivo enquanto ele estiver sendo atualizado pelo RRDTool, não ocorrerá nenhum erro, pois o check_rrd está preparado para suportar essa condição através da implementação de retries e timeout. As configurações destes recursos podem ser feitas através das opções -r e -t respectivamente, mas de um modo geral esses parâmetros não precisam ser alterados.

Em computadores lentos, com muitos processos sendo executados em espacial várias instâncias do check_rrd, talvez seja interessante aumentar o tempo de execução limite da checagem de serviços, para tanto edite a diretriz service_check_timeout do arquivo nagios.cfg. O valor padrão dessa diretriz é 60 (em segundos), recomendo aumentar seu valor para 90 caso haja necessidade.

Resolução de problemas freqüentes

Problema: Quando executo o check_rrd é exibido um erro de permissão:

$ ./check_rrd
bash: ./check_rrd: Permission denied

Resolução: O arquivo está sem premissão de execução, resolva da seguinte forma:

$ chmod +x check_rrd

Problema: Quando executo o check_rrd é exibido o seguinte erro:

./check_rrd
A string name must be especified to d1 option.

Resolução: É necessário especificar o conjunto mínimo de opções para executar o programa, segue um exemplo:

$ ./check_rrd -f disc.rrd -u "%" -d1 "/" -o 0.01 80 -w 0.01 90 -c 0 100

Considerações finais

O check_rrd é um plugin que está sendo muito útil tanto para mim quanto para muitos amigos em atividades de monitoração, por essa razão estou compartilhando com os colegas que aprecisam software livre.

Convido pessoas interessadas para participar do desenvolvimento e aprimoramento do plugin check_rrd. Apesar dele já estar funcional é possível melhora-lo, então mande comentários, códigos de correção, orações, presentes e dinheiro (toda ajuda é bem vinda :-). Obviamente os créditos por colaboração serão explicitos se for do agrado do colaborador.

Referencias

Nagios – Página oficial

RRDtool – Página oficial

Download do plugin check_rrd

Observações

Nagios ® e todas as marcas relacionadas são propriedades da Nagios Enterprises, LLC.

RRDTool ® e todas as marcas relacionadas são propriedades de Tobias Oetiker.

Não é intuito desse documento relacionar a marca Nagios ® com RRDTool ®. As marcas citadas aqui tem o único objetivo de mostrar como compartilhar informações do RRDTool com o Nagios por suas características técnicas.


Leave a Reply

6 thoughts on “Integrando o Nagios com RRDTool