Skip to content

RHQ enviando Notificações para o Nagios

Novembro 8, 2011

Fala galera.

Muitos usuários têm adotado o RHQ (JON/JOPR) como ferramenta de monitoramento, não só de instâncias JBoss, como também de outros recursos como: sistema operacional, banco de dados, servidores Web, etc.Entretanto, muitos querem centralizar a visibilidade dos alertas gerados pelo RHQ com os alertas de outras ferramentas de monitoramento. Normalmente, essa centralização acontece através do Nagios, com sua interface sendo visualizada em uma TV gigante.
Diante desta necessidade, vou demonstrar, nesse post, como integrar os alertas gerados pelo RHQ com o Nagios

A arquitetura

Para ajudar o entendimento da arquitetura desta integração, temos a figura 1 abaixo.
Figura 1 - Arquitetura da integração

Figura 1 - Arquitetura da integração

Resumidamente, o RHQ enviará uma notificação na forma de TRAP SNMP para a máquina onde o Nagios estiver presente. Nesta mesma máquina, estará executando a ferramenta que fica esperando pelo TRAP, o SNMPTRAPD. Porém, o TRAP recebido pelo SNMPTRAPD possui uma forma, digamos, “ilegível” para o Nagios. É neste ponto que entra a ferramenta SNMPTT. Esta será a tradutora do TRAP recebido, enviando para o Nagios uma mensagem “legível” através de um plugin do próprio Nagios, o submit_check_result.
Após esta breve explicação do fluxo responsável pela integração, vamos à descrição dos passos para obter a “coisa funcionando”

O Nagios
Para a instalação do Nagios, segui a documentação oficial do produto. No meu caso, como instalei em um Fedora 15, segui o link [1].

Logo após a instalação, é necessário realizar uma configuração para que o Nagios defina o serviço que será responsável pelos TRAPS do RHQ. Para tanto, basta definir um novo Service em /usr/local/nagios/etc/objects/localhost.cfg. No meu exemplo, adicionei o trecho da listagem 1 no fim do arquivo.

# Define a service to check RHQ alerts
define service{
use local-service
name TRAP
check_period 24x7
max_check_attempts 3
normal_check_interval 15
retry_check_interval 5
active_checks_enabled 1
passive_checks_enabled 0
parallelize_check 1
obsess_over_service 0
check_freshness 0
event_handler_enabled 0
flap_detection_enabled 0
process_perf_data 1
retain_status_information 1
retain_nonstatus_information 1
notification_interval 60
notification_period 24x7
notification_options w,u,c,r
notifications_enabled 1
service_description RHQ
is_volatile 1
check_command check-host-alive
max_check_attempts 1
normal_check_interval 1
retry_check_interval 1
passive_checks_enabled 1
check_period none
notification_interval 31536000
host_name localhost
}

Listagem 1 – Serviço do Nágios referente ao RHQ

O destaque aqui vai para o atributo service_descrition (em negrito). O valor deste atributo é quem faz a ponte (a mágica) entre o SNMPTT e o Nagios. Quando o SNMPTT for chamar o Nagios, será esse valor (RHQ) que será informado (veremos isso na próxima sessão).
Após esta configuração, basta inciar o Nagios, bem como o serviço httpd, para que possamos acessar sua interface Web. Ao acessar o menu Current Status -> Service, deverá surgir o serviço RHQ na lista de serviços, como na figura 2.

Figura 2 - Nagios configurado com serviço para TRAP do RHQ

Uma última coisa para ser feita a nível de Nagios, é copiar alguns plugins do Nagios para o diretório de instalação do mesmo. Como já mencionado anteriormente, isto é necessário porque a comunicação entre o SNMPTT e Nagios é realizada através de um dos plugins do Nágio, o submit_check_result. Para isso, a partir do diretório onde foram extraidos os arquivos de instalação do Nagios, realize o comando da listagem 2

mkdir /usr/local/nagios/libexec/eventhandlers
cp -r contrib/eventhandlers/* /usr/local/nagios/libexec/eventhandlers/

Listagem 2 – Cópia dos plugins do Nagios

Ok, temos o Nagios prontinho esperando pelos TRAPS do RHQ. Agora vamos pra configuração das duas ferramentas necessários para essa “ponte” entre o RHQ e o Nagios.

O SNMPTT
Seguindo a ordem inversa do fluxo (RHQ -> SNMPTRAPD -> SNMPTT -> Nagios), vamos agora para a instalação e configuração do SNMPTT. Esta ferramenta é a responsável por tratar o TRAP enviado pelo RHQ (que virá do SNMPTRAPD) e, após traduzi-lo, enviar as informações do mesmo para o Nagios.

Para a instalação desta ferramenta, faça o download em [2] e instale através do passo a passo de [3]. A instalação, neste caso, é a stand-alone (ir até o passo 5 de instalação), pois a ferramenta não executará como um daemon. Ela será inicializada pelo SNMPTRAD toda vez que chegar um novo TRAP. Fica fora do escopo deste post os detalhes da instalação do SNMPTT, uma porque tornaria o texto muito verboso, e em segundo lugar para valorizar o ótimo documento de instalação que a ferramenta já possui.

Uma única configuração que não vi no tutotial [3] foi a cópia do script snmpttconvertmib para o diretório /usr/sbin. Acho legal comentar isso, pois caso contrário, no próximo passo o leitor pode estranhar a origem de tal script. Faça a cópia se o arquivo ainda não estiver lá.

Ainda, para o devido funcionamento dos scripts do snmptt, baseados em perl, alguns pacotes do net-snmp são necessários no sistema operacional. Abaixo, na figura 3, segue a lista dos pacotes que tive de instalar no meu Fedora 15.

Figura 3 - Pacotes a serem instalados

Tendo realizada a instalação básica, passemos às configurações necessárias para o cenário proposto. A configuração é realizada apenas com a alteração do arquivo /etc/snmp/snmptt.ini (gerado após a instalação). Neste arquivo, remova a primeira linha destacada na listagem 3 e edite a segunda linha destacada.

[General]
mode = standalone
multiple_event = 1
dns_enable = 1
strip_domain = 1
strip_domain_list = <<END
your.domain
END
[...]
resolve_value_ip_addresses = 0
net_snmp_perl_enable = 1
net_snmp_perl_best_guess = 0
translate_log_trap_oid = 0
translate_value_oids = 1
translate_enterprise_oid_format = 1
translate_trap_oid_format = 1

Listagem 3 – Configuração do SNMPTT

Feito isso, chegou a hora de o SNMPTT “ficar por dentro” do TRAP que será enviado pelo RHQ. Isto é realizado através do reconhecimento da MIB que o RHQ distribui, localizada em $RHQ_HOME/etc/RHQ-mib.txt.

Para tanto, basta executar o comando do MIB Converter. Este comando converte a MIB do RHQ para um arquivo de configuração no formato do SNMPTT. O comando em questão pode ser visualizado na listagem 4.

snmpttconvertmib --in=$RHQ_HOME/etc/RHQ-mib.txt --out=/etc/snmp/snmptt.conf.rhq --exec='/usr/local/nagios/libexec/eventhandlers/submit_check_result $r RHQ 2'
Listagem 4 – Conversão da MIB do RHQ

Explicando o comando: em –in é informada a MIB do JON; em –out é informado o arquivo de saída onde ficará a definição da MIB no formato SNMPTT; em –exec é informado o comando que será invocado quando algum TRAP referente a MIB de entrada for recebido. Este comando é um comando externo do Nagios, que permite com que recursos levem uma notificação ao Nagios, e não fiquem esperando pela coleta do Nagios, que é o “padrão” utilizado. Esta ação também é conhecida como check permissivo.

Por fim, ao executar o comando da listagem 4, o leitor receberá uma mensagem não muito bacana, como a listada abaixo.

Done
Total translations: 0
Successful translations: 0
Failed translations: 0
The MIB file did not contain any TRAP-TYPE or NOTIFICATION-TYPE definitions,
so no translations occured. Try another MIB file.

Este foi o maior entrave pelo qual passei ao tentar implementar a integração. O SNMPTT, como premissa, necessita que a MIB passada como parâmetro de entrada possua a definição de um TRAP-TYPE ou um NOTIFICATION-TYPE. Já a MIB que vem com o RHQ não possui tais definições. Sendo assim, após uma série de tentativas e erros, alterei a MIB do RHQ, adicionando as linhas em destaque da listagem 5

trapGroup NOTIFICATION-GROUP
NOTIFICATIONS { coldStart }
STATUS current
DESCRIPTION "A collection of notifications for alerts"
::= { snmpMIBGroups 2 }
rhqTrapAlert TRAP-TYPE
STATUS current
ENTERPRISE jboss
DESCRIPTION "RHQ Notification: "
::= 1
END

Listagem 5 – Linhas adicionadas à MIB do RHQ

Após salvar as alterações, execute novamente o comando da listagem 4. Com isso, uma mensagem de sucesso deve ser perceptível, como a mensagem abaixo:

TRAP-TYPE: rhqTrapAlert
Looking up via snmptranslate: RHQ-MIB::rhqTrapAlert
OID: .1.3.6.1.4.1.18016.0.1
Done
Total translations: 1
Successful translations: 1
Failed translations: 0

A mensagem nos diz que foi criada a definição do TRAP no arquivo de saída (/etc/snmp/snmptt.conf.rhq), e que a definição está vinculada ao OID .1.3.6.1.4.1.18016.0.1 , que será o OID enviado pelo RHQ. Explico mais tarde o significado deste número.

Para finalizar a configuração do SNMPTT, deve ser adicionado esse novo arquivo (/etc/snmp/snmptt.conf.rhq) para a lista dos arquivos de configuração. Para isso, edite o arquivo /etc/snmp/snmptt.ini, e adicione a linha destacada em negrito na llistagem 6.

[...]
[TrapFiles]
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf.rhq
END

Listagem 6 – Adição do arquivo de configuração do RHQ

Pronto, temos também o SNMPTT pronto para que a arquitetura da figura 1 funcione. Agora, seguindo a ordem inversa, vamos para a instalação e configuração do SNMPTRAPD.

O SNMPTRAPD
Esta ferramenta é o passo inicial para o recebimento do TRAP enviado pelo RHQ. É ela quem inicia um daemon que fica esperando pela chegada dos TRAPS. Normalmente, o SNMPTRAPD já vem instalado por default, como no meu caso no Fedora 15. Caso não seja a realidade do leitor, instale a ferramenta da forma padrão no seu S.O.

Fora a instalação, dois passos são necessários para configurar a ferramenta no cenário proposto da figura 1. Primeiramente, são adicionados os parâmetros da listagem 7 no arquivo /etc/snmp/snmptrapd.conf.

# envia o trap recebido para que o snmptt traduza-o
traphandle default /usr/sbin/snmptt
# desabilita autorização
disableAuthorization yes
# não loga os traps recebidos, deixa tudo com o snmptt
donotlogtraps yes

Listagem 7 – Configuração do snmptrapd

Já no segundo passo, é configurado que o SNMPTRAPD não deve traduzir o OID do TRAP, deixando-o no formato digital, e fazendo com que o SNMPTT realize o serviço. Para tanto, basta editar o arquivo /etc/rc.d/init.d/snmptrapd e adicionar a opção -On no parâmetro OPTION, como segue na listagem 8.

OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid"
Listagem 8 – Acerto no script de serviço

Realizados os passos supramencionados, basta inicializar o serviço do SNMPTRAPD, que deve estar em /etc/init.d./snmptrapd. Entretanto, como sugestão, recomendo, inicialmente, que o snmptrapd seja inicializado no prṍprio terminal, podendo assim acompanhar os logs no caso de algum problema acontecer. O comando para iniciar é o da listagem 9:

/usr/sbin/snmptrapd -f -Lo 127.0.0.1 -On -Lsd -p /var/run/snmptrapd.pid
Listagem 9 – Comando para inicializar o snmptrapd

Com isso, temos o lado do Nagios totalmente preparado para receber os TRAPS do RHQ. Sendo assim, vamos para a configuração do próprio RHQ para o envio do TRAP.

O RHQ
Também fica fora do escopo deste post os passos da instalação básica do RHQ, visto que assume-se que o leitor interessado nesta integração já possua o conhecimento básico de ambas as ferramentas (RHQ e Nagios).

Assim, vamos direto a configuração do envio dos TRAPS. Primeiramente, vamos realizar as configurações básicas do RHQ para envio de TRAPS. Para tanto, basta acessar Administration -> System configuration -> Plugins, escolher a aba Server Plugins, clicar em Alert:SNMP e, na sequência, clicar em Configure Alert:SNMP.

Com isso, surgirá uma interface de configuração do Plugin do SNMP. Para este cenário, utilizei as configurações da figura 4.

Figura 4 - Configurações do SNMP

Aqui vai a explicação dos parâmetros que acho que valem a pena ser explicados: Agent Address é o endereço da máquina onde estiver rodando o SNMPTRAPD (no meu caso na mesma máquina =b ); Enterprise Oid é o OID que fará o macth no OID configurado na MIB do RHQ; Specific Id, é o id específico desta instância RHQ, fará o match com o trecho da MIB representado na listagem 10.

rhqTrapAlert TRAP-TYPE
STATUS current
ENTERPRISE jboss
DESCRIPTION "RHQ Notification: "
::= 1

Listagem 10 – Trecho do OID do TRAP

Muitos devem estar curioso sobre o porque do número 1.3.6.1.4.1.18016. Este número é o representativo da MIB do grupo JBoss, não sendo um n;umero aleatório qualquer. Existe um padrão estabelecido para estes números, sendo que as empresas/organizações “adquirem” determinadas sequências para seus produtos. Estes números são regulados pela IANA [4], e a sequência inicial, 1.3.6.1.4.1, representa que o OID é de alguma MIB privada, conforme nos mostra [5]. Já a sequência 18016, é um número adquirido pelo “grupo” JBoss, conforme nos mostra [6] (procure por JBoss no CTRL+F).

Tendo feita a configuração genérica do SNMP, vamos à configuração específica do alerta. Crie um alerta qualquer. No meu exemplo criei um alerta em cima do recurso de File System /tmp. Defini como condição do alerta que o Free Space seja maior que 10MB. Como essa condição é sempre verdadeira na minha máquina, e defini o intervalo de monitoramento em 1 minuto, o alerta será disparado todo minuto. Na figura 5 está a definição do alerta.

Figura 5 - Configurações do Alerta

Para este alerta, criei uma notificação que envia um SNMPTRAP, tendo a configuração descrita na figura 6.

Figura 6 - Configurações da Notificação SNMP

Explicando os parâmetros configurados: Host e Port representam o endereço onde o SNMPTRAPD está escutando (no meu caso, na mesma máquina). O Oid é a sequência de números que a MIB descreve. A sequência inicial, 1.3.6.1.4.1.18016, já expliquei anteriormente. Já a concatenação da sequência 2.1 serve para o envio do TRAP contendo todas as informações do alerta. Com um estudo mais aprofundado na especificação das MIB’s, perceberemos a seguinte sequência da MIB do RHQ. (listagem 11)

[...]
jboss OBJECT IDENTIFIER ::= {enterprises 18016 }
rhq OBJECT IDENTIFIER ::= {jboss 2 }
alert OBJECT IDENTIFIER ::= {rhq 1 }
alertName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The name of the alert definition for this alert"
::= { alert 1 }
alertResourceName OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255))
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The name of the resource that triggered the alert"
::= { alert 2 }
[...]

Listagem 11 – Trecho da MIB do RHQ

Repare que ela define “jboss” como o padrão de números do “enterprise” (que é importado de uma MIB padrão) mais o valor 18016 (valor do grupo JBoss que comentei anteriormente). Como resultado, temos a sequência 1.3.6.1.4.1.18016. Depois, é declarado um objeto “rhq”, concatenando o resultado anterior ao valor 2. Logo após é declarado o objeto “alert”, que é o resultado anterior concatenado com o valor 1 (Pronto, valor 2.1 após o 18016 explicado). Assim, chegamos ao valor 1.3.6.1.4.1.18016.2.1 que foi informado em Oid. Repare que na MIB, debaixo do objeto “alert”, são definidos diversos objetos que fazem referência aos dados do alerta (alertName, alertURl, alertResourceName, etc). Estes serão os valores que irão ser enviados para o Nagios via TRAP.

Pronto, a partir de então temos tudo configurado. Se o agente do RHQ estiver em execução, os alertas serão lançados, as notificações farão o disparo do TRAP, o SNMPTRAPD receberá o TRAP, enviará o mesmo para a tradução do SNMPTT, que, por sua vez, enviará os dados do TRAP para o Nagios. Como resultados, teremos o Nagios acusando o TRAP recebido, como na figura 7.

Figura 7 - Nagios acusando o alerta do RHQ

Como último comentário, em uma das máquinas onde eu realizei esses passos, o snmptrapd acusou o seguinte erro quando na tentativa de enviar o TRAP para o snmptt:

Can't locate Config/IniFiles.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/snmptt line 4026.
BEGIN failed--compilation aborted at /usr/sbin/snmptt line 4026

Este problema acontece pela falta de alguns módulos perl, base dos scripts snmptt. No meu caso tive de instalar, em primeiro lugar, o pacote do perl-Module-Build, que possui os módulos CPAN. Logo após, instalei manualmente o tal Config/IniFiles.pm através do comando:

perl -MCPAN -e 'install Config::IniFiles'

Segui estes passos em duas instalações distintas e obtive sucesso. Qualquer dúvida estou a disposição.
[]’s

Referências
[1] http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html
[2] http://sourceforge.net/projects/snmptt/files/snmptt/snmptt_1.3/
[3] http://snmptt.sourceforge.net/docs/snmptt.shtml#Installation-Overview
[4] http://www.iana.org/
[5] http://www.alvestrand.no/objectid/1.3.6.1.4.1.html
[6] http://www.iana.org/assignments/enterprise-numbers

About these ads

From → Uncategorized

5 Comentários
  1. Fernanda permalink

    “SNMPTRAPD” …. que medo!!!!!

  2. ehauehaueahu olha o comentário da Fer!! ehuaehuaehau

    Ae Chies, achei o post bem legal e útil! O SMNP TRAP é uma maneira bem interessante de um serviço enviar uma mensagem de “socorro” ao Nagios, por exemplo. Porém é complicado de fazer funcionar né!!?

    Abraço,

  3. Estou tentando configurar e não estou tendo êxito. Tem como dar um help. Esse howto é para integrar no Nagios com RHQ né?

  4. rafaeltuelho permalink

    Grande Chies!
    Firmeza na represa mano? heheheheh :-p

    Esse mundo dá voltas né cara!? Depois de todo esse tempo estou aqui mexendo com JON/RHQ novamente. E adivinha o que o cliente me pediu? “É possível integrar o JON com o Nagios?” /o\

    Lembrei deste teu post… Na verdade acho que este post é o único howto disponível em toda a Internet sobre o assunto :-)

    Fiz o procedimento no RHEL 6.3 e aparentemente funfou o/
    Só um detalhe. No meu caso tive que instalar o pacote ‘perl-YAML.noarch’ aqui no RHEL 6 para poder compilar o pacote Perl (Config::IniFiles).

    Trabalheira heim mano!?

    Parabéns pelo trabalho árduo e principalmente compartilhar com a comunidade!

    Sucesso pra vc!

    []s

    __
    Tuelho

Deixar uma resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

WordPress.com Logo

Está a comentar usando a sua conta WordPress.com Log Out / Modificar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Log Out / Modificar )

Facebook photo

Está a comentar usando a sua conta Facebook Log Out / Modificar )

Google+ photo

Está a comentar usando a sua conta Google+ Log Out / Modificar )

Connecting to %s

Coding Horror

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

InfoQ

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBoss Developer Recent Posts

Um prato de informações tecnológicas com uma pitada de conhecimento aleatório.

JBossDivers

Mergulhando no Mundo JBoss

Seguir

Get every new post delivered to your Inbox.

%d bloggers like this: