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;
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
make install
- 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).
Olá,
ResponderExcluirEstou 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?
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 ..
ResponderExcluirObrigado