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).

Share this:

,

COMENTÁRIOS

1 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