Pular para o conteúdo principal

Monitorando JBoss 7 no Zabbix

Quem frequenta o meu blog já deve ter lido o meu post sobre monitoramento de JBoss no Zabbix. Naquela oportunidade eu trabalhava com administração de servidores JBoss, porém a versão era a 5.1 GA. Já conseguia fazer o monitoramento do JBoss utilizando UserParameter antes do lançamento da versão 2.0 do Zabbix, que trouxe monitoramento nativo de JMX, o que tornou as coisas mais fáceis para efetuar o monitoramento do JBoss e outros servidores de aplicações.

Em dezembro surgiu uma demanda para eu administrar alguns servidores JBoss com a versão 7 AS. Depois de algumas pesquisas na Web, verifiquei que a partir da versão 6 do JBoss o método de busca de dados JMX utilizado até a versão 5 foi modificado. Estudando um pouco mais e buscando por monitoramento JMX na versão 7. Até a versão 5, a consulta por dados JMX era realizada via RMI. Nas versões posteriores, o método utilizado é o remoting-JMX, que utiliza as próprias bibliotecas do JBoss para comunicação remota. E é aqui eu surge o nosso problema para monitorar o JBoss 6 e 7 no Zabbix.



Foi então que eu encontrei essa ZABBIX FEATURE REQUESTS com uma solução excepicional do Dennis Kanbier. Ele sugere fazer uma alteração no código-fonte do JMXItemChecker.java do Zabbix Java Gateway para habilitar o uso do recurso remoting-JMX e, assim, conseguir fazer o monitoramento do JBoss 6 e 7 pelo Zabbix. Portanto, quem estiver lendo esse post e achar útil, peço encarecidamente que votem para que essa requisição seja incluída nas próximas versões do Zabbix, assim, você não precisará modificar o código-fonte para conseguir fazer esse monitoramento. Mas, enquanto isso não acontece, vamos alterar o código e compilar, conforme as informações preciosas do Dennis Kanbier.

O Dennis fez os testes dele usando o JBoss EAP 6 da Red Hat. Nos meus testes eu utilizei a versão 7 AS, mas especificamente a versão 7.1.1.

As versões dos softwares que eu utilizei para os meus testes foram as seguintes:

  • Zabbix 2.2.0
  • JBoss AS 7.1.1
  • Java SE 1.7.0_51 Oracle
Atualização: 11/02/2014 - testado também com o OpenJDK 1.7.0

Observação: Para os serviços do Zabbix, incluindo o Zabbix Java Gateway e este estiver em execução.

Alterando o código do arquivo JMXItemChecker.java

Esse arquivo encontra-se na pasta src/zabbix_java/src/com/zabbix/gateway após você descompactar o código-fonte.

Edite o arquiv JMXItemChecker.java e altere o trecho seguinte:

String conn = request.getString(JSON_TAG_CONN);
int port = request.getInt(JSON_TAG_PORT);
 
url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi");
jmxc = null;
mbsc = null;

por este.

String conn = request.getString(JSON_TAG_CONN);
int port = request.getInt(JSON_TAG_PORT);
 
//Dirty solution for ZBXNEXT-1274
Integer remoting = new Integer("9999");
int retval = remoting.compareTo(port);
 
if (retval == 0)
{
        url = new JMXServiceURL("service:jmx:remoting-jmx://" + conn + ":" + port);
}
else
{
        url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + conn + ":" + port + "/jmxrmi");
}
jmxc = null;
mbsc = null;

Observe que no código modificado eu informei a porta 9999, que é a porta padrão aberta pelo JBoss para monitoramento JMX. Essa porta é a mesma que deverá ser informada na interface JMX do host a ser monitorado pelo Zabbix. Portanto, se você desejar alterar essa porta, tenha em mente que não basta fazer a alteração no código e na interface Web do Zabbix, mas sim, nas configurações do JBoss.

Outra informação importante é que o Dennis modificou o código deixando a opção para monitorar servidores de aplicação que utilizam o RMI. Portanto, essa solução contempla o monitoramento tanto do JBoss 5 como as versões posteriores.

Agora podemos compilar o Zabbix com suas opções prefenrencias, inclusive com a opção --enable-java. Um exemplo seria:

./configure --prefix=/opt/zabbix/ --enable-server --enable-agent --enable-java --with-mysql --with-libxml2 --with-libcurl --with-net-snmp --with-openipmi --with-jabber --with-ssh2

e depois:

make install

Configure o arquivo zabbix_server.conf alterando os parâmetros:

  • JavaGateway
  • StartJavaPollers
  • JavaGatewayPort
Qualquer dúvida na configuração desses parâmetros, acesso o meu post anterior sobre monitoramento de JBoss.

Adicionar as bibliotecas necessárias para o Zabbix Java Gateway:

Antes de iniciarmos o Zabbix Java Gateway, precisamos incluir as bibliotecas para a comunicação remoting-JMX, pois caso contrário a alteração no código não terá o efeito desejado. Essas bibliotecas são encontradas no diretório de instalação do JBoss a partir do sub-diretório /opt/jboss-as/modules/org/

Os seguintes arquivos deverão ser copiados para o diretório /opt/zabbix/sbin/zabbix_java/lib:


/opt/jboss-as/modules/org/jboss/as/remoting/main/jboss-as-remoting-7.1.1.Final.jar
/opt/jboss-as/modules/org/jboss/logging/main/jboss-logging-3.1.0.GA.jar
/opt/jboss-as/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar
/opt/jboss-as/modules/org/jboss/marshalling/main/jboss-marshalling-1.3.11.GA.jar
/opt/jboss-as/modules/org/jboss/marshalling/river/main/jboss-marshalling-river-1.3.11.GA.jar
/opt/jboss-as/modules/org/jboss/remoting3/main/jboss-remoting-3.2.3.GA.jar
/opt/jboss-as/modules/org/jboss/sasl/main/jboss-sasl-1.0.0.Final.jar
/opt/jboss-as/modules/org/slf4j/jcl-over-slf4j/main/jcl-over-slf4j-1.6.1.jar
/opt/jboss-as/modules/org/jboss/logging/jul-to-slf4j-stub/main/jul-to-slf4j-stub-1.0.0.Final.jar
/opt/jboss-as/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar
/opt/jboss-as/modules/org/jboss/as/remoting/main/jboss-as-remoting-7.1.1.Final.jar
/opt/jboss-as/modules/org/slf4j/ext/main/slf4j-ext-1.6.1.jar
/opt/jboss-as/modules/org/jboss/xnio/main/xnio-api-3.0.3.GA.jar
/opt/jboss-as/modules/org/jboss/xnio/nio/main/xnio-nio-3.0.3.GA.jar

Lembre-se de verificar os diretórios da sua instalação. No meu caso, o Zabbix está em /opt/zabbix e o JBoss em /opt-jboss-as. Os arquivos listados acima são os da versão 7.1.1. Os nomes podem alternar de acordo com a versão. Na versão EAP, os nomes dos arquivos podem conter redhat, como por exemplo jboss-as-remoting-7.2.1.Final-redhat-10.jar.

A partir dessa etapa podemos iniciar os serviços Zabbix Server, Zabbix Agentd e Zabbix Java Gateway.

Observação: Ao contrário do JBoss 5, não é necessário fazer alterações no script de inicialização do serviços.

Para testar o monitoramento, configure a interfacer JMX para o seu host e associe a template Template JMX Generic. Com essa template você conseguirá obter vários detalhes do seu servidor JBoss.

Última observação: Esse monitoramento foi testado com os servidores em execução no mesmo host. Não foi objetivo do post informar como você habilita o servidor JBoss para permitir monitoramento remoto, ou seja, a partir de outro host (tipíco cenário onde o servidor JBoss roda em host separado do servidor Zabbix).

Comentários

  1. Olá,
    Estou com a seguinte situação.
    Servidor Zabbix Ver. 2.4.2 com o arquivo JMXItemChecker.java alterado, recompilado a instalação e com os devidos .jar no diretório $ZABBIX_HOME/sbin/zabbix_java/lib/.
    Porém estou tentando monitorar um host remoto com o Jboss Ver. 7.1.1 e está retornando o erro abaixo:
    "java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.CommunicationException [Root exception is java.rmi.ConnectI"

    Alguém já passou por essa situação?

    ResponderExcluir
  2. Preciso muito de ajudar urgente para um prazo curto e tenho um cliente que precisa que eu mostre um monitoramento da aplicação JBoss .. já lê seu artigo mas com minha esperieexpe no assunto .... Preciso de um empiremp passo a passo ..

    Obrigado

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Integração Zabbix + GLPI

Versão atualizada Essa atualização é em consequência de pedidos vindo dos gringos e também a pedido da Zabbix SIA por ser o 4.º conteúdo mais popular no recém criado  https://share.zabbix.com/  e o 1.º entre os brasileiros.   Para conferir a lista dos mais populares, acesse  https://share.zabbix.com/popular Há um tempo que eu queria desenvolver algo para integrar o Zabbix a algum outro sistema. Esse ano surgiu uma oportunidade de implementação de alguns sistemas de inventário e gerenciamento de chamados. Logo pensei em fazer uma integração para abertura e fechamento automático dos tickets quando ocorresse algum problema que o Zabbix identificasse. Porém, o meu entusiasmo foi logo caindo quando eu percebi que não era uma coisa tão trivial de se fazer. Pesquisei várias fontes em busca de informações a respeito dessa integração, porém não passavam de tutoriais ensinando como abrir tickets no GLPI enviando um e-mail. Estudando mais um pouco o GLPI, percebi que não era possível

Primeiros passos com API do Zabbix

Bom galera, Faz tempo que não posto nada sobre Zabbix. Então, quis presentear vocês com um conteúdo mais avançado. Espero que ao menos 1 vez por mês coloco mais assuntos como esse no blog. Vou mostrar para vocês como utilizar a API do Zabbix. Antes vou explicar de forma básica o que API para os que não sabem do que se trata. Programadores tem a obrigação de saber.  :P - API  - Application Programming Interface  - é um conjunto de rotinas e padrões estabelecidos por um software. Isso permite que aplicações de terceiros utilizem as funcionalidades oferecidas pelo software.

Usando LSOF para verificar porta usada por determinado processo

Outro dia fui realizar alguns testes em aplicações rodando no JBoss e verifiquei que nenhuma aplicação estava funcionando. Verifiquei no log do JBoss que o serviço iniciava e ocorria vários erros, informando que não conseguia fazer o deploy das aplicações. Mesmo parando o serviço do JBoss, verifiquei com a ferramenta nmap que a porta 8080 continuava aberta.