Monitorando JBOSS com Zabbix

Standard

Monitorar um JBoss é muito mais do que verificar se as portas estão funcionando, ou se o serviço está em execução. Precisamos monitorar como está a performance do ambiente, e nesse ponto que o Zabbix com sua interface Java para consultas JMX entra “no jogo”.

jboss_logo[1]

Introdução

Este tutorial detalha o processo de monitoramento da interface JMX nativa do ZABBIX para monitorar o desempenho do servidor de aplicações JBoss.

Por padrão servidores de aplicações Java, como o JBoss, possibilita a monitoria através da utilização de recursos pela ferramenta JConsole, disponível no pacote JDK do Java, ou utilizar ferramentas de linha de comando como o Twiddle.

A utilização do JConsole é, até certo ponto, aceitável de utilizar, porém integrando este tipo de monitoramento com o ZABBIX, você poderá criar triggers e ações de acordo com os problemas que poderão surgir com seu servidor e/ou aplicativos e enviar alertas. Isso sem falar na ajuda dos gráficos, que facilita a analise do ambiente como um todo. No JConsole isso só é possível gravando os dados em um relatório, pois o monitoramento é feito sem armazenar os dados coletados, ou seja, fazer com o Zabbix é muito melhor.

Ambiente

O ambiente utilizado possui duas máquinas, ambas com a distribuição GNU/Linux Debian wheezy.

Uma das máquinas atua como servidor Zabbix, e nela foi instalada os seguintes pacotes:

  • zabbix server 2.4.2
  • zabbix-java-gateway 2.4.2
  • zabbix-agent 2.4.2
  • java 7

Na outra foi instalado o servidor de aplicações web:

  • Jboss 4.2.3
  • java 5.0_22
  • zabbix-agent 2.4.2

Instalação

Nessa documentação não entraremos no detalhe da instalação do servidor Zabbix padrão, vamos apenas detalhar o processo do Zabbix Java Gateway.

O Zabbix Java Gateway é um software escrito em Java e seu funcionamento é bem simples.

Java Gateway ZabbixQuando o servidor ZABBIX deseja obter o valor de um Item em um JBoss, ele faz a requisição ao Zabbix Java Gateway que fica responsável por interagir com a aplicação JBoss, através de uma API de gerenciamento JMX. Por esse motivo, só é possível fazer este tipo de monitoramento no modo passivo.

Para que o monitoramento JMX funcione, o serviço do Zabbix Java Gateway tem que estar em execução apenas no servidor Zabbix, ou seja, nada precisa ser instalado no servidor JBoss, além do zabbix-agent.

Para instalar o gateway java, execute o comando abaixo:

aptitude install zabbix-java-gateway

Execute o comando abaixo para verificar se o serviço está em execução:

systemctl status zabbix-java-gateway

Caso o serviço não esteja ativo, execute o seguinte comando:

systemctl start zabbix-java-gateway

O Zabbix Java Gateway estará escutando na porta 10052, sendo assim digite o comando abaixo para validar isso:

netstat -anp | grep 10052

O resultado deverá ser algo assim:

tcp 0 0 127.0.0.1:37732 127.0.0.1:10052 TIME_WAIT –
tcp6 0 0 :::10052 :::* LISTEN 4217/java

Configuração no servidor Zabbix

Acesse o arquivo /etc/zabbix/zabbix_server.conf e configure os seguintes parâmetros:

JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5

Depois de gravar o arquivo, reinicie o serviço do ZABBIX server e java-gateway:

systemctl restart zabbix-server
systemctl restart zabbix-java-gateway

Configuração no servidor JBoss

Acesse o arquivo $PATH_JBOSS/bin/run.conf e acrescente as linhas abaixo no final do arquivo:

JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote”
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345″
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false”
JAVA_OPTS=”$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false”

Reinicie o serviço do JBoss para que as mudanças tenham efeito.

Configuração via interface web

Abra a configuração do host que deseja fazer o monitoramento do JBoss e insira o IP do servidor e a porta 12345, que foi configurada no arquivo run.conf do JBoss, conforme podemos ver na imagem abaixo:

zabbixhostjmxinterfaceA partir do ZABBIX 2.0 já tem um template pronto com alguns exemplos úteis para utilização, inclusive com gráficos. No menu Configuração >> Templates, procure por Template JMX Generic.

Aplique o template em seu host e aumente o nível de analise do seu ambiente.

 

Autoria

Esse artigo foi criado por Madson Araujo, em seu trabalho como Bolsista de Monitoramento da UFBA, revisado e transformado em artigo de blog por mim.

Fonte

https://www.zabbix.com/documentation

  • Renato S Silva

    Muito bom amigo! Carecemos de bons artigos sobre esse assunto! O seu e realmente muito bom, parabens!

  • Muito legal o blog! Não desanime e continue compartilhando conhecimento! Abraço!

  • Bom dia Madson,
    Fiz a configuração, conforme descreveu, mas no meu caso está dando erro no monitoramento.
    “java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.Co

    Esse erro acima é o que está ocorrendo.

    Além disso, tenho outra dúvida, eu tenho vários jboss instalados com um mesmo IP, eu consigo configurar o Zabbix para monitorar esses jboss separadamente, mudando apenas a porta?

    Att
    Julio

    • Gomex

      Esse erro “java.io.IOException: Failed to retrieve RMIServer stub” você obteve ele em qual arquivo ou saída de erro? Me parece que é uma falha de configuração do seu JBoss.

      Sobre configurar o monitoramento no mesmo IP, com múltiplas portas, é possível sim. Basta configurar cada instância para responder em uma porta distinta da 12345. 🙂

    • Periano Catani cardoso Arantes

      Conseguiu resolver esse problema Julio, q estou com o mesmo?????

  • Parabéns pelo Post Madson.
    Estou precisando monitorar o Perm Gen do Jboss e emitir um alerta quando ele atingir determinado valor… Você sabe como posso fazer isso?

    • Mineo

      Natália, pode monitorar Perm Gen usando esse item.

      jmx[“java.lang:type=MemoryPool,name=Perm Gen”,Usage.used]

  • Daniel

    Boa tarde,
    Obrigado pelo tutorial, ajudou bastante.
    Estou com o seguinte erro, poderia me ajudar por favor?
    Quando paro e starto o serviço do JBOSS:
    /etc/jboss-as/jboss-as.conf: line 21: -Dcom.sun.management.jmxremote”: command not found
    /etc/jboss-as/jboss-as.conf: line 22: -Dcom.sun.management.jmxremote.port=12345″: command not found
    /etc/jboss-as/jboss-as.conf: line 23: -Dcom.sun.management.jmxremote.ssl=false”: command not found
    /etc/jboss-as/jboss-as.conf: line 24: -Dcom.sun.management.jmxremote.authenticate=false”: command not found
    Starting jboss-as: runuser: cannot set groups: Operation not permitted

    Obrigado.
    abs.