5 Java gateway

Visão geral

O Zabbix 2.0 inovou com o suporte nativo ao monitoramento de aplicações Java através de JMX, este suporte foi adicionado através do componente "Zabbix Java Gateway". Ele é um processo de background (daemon) escrito em Java. Quando o Zabbix Server precisa coletar um item (dado) através de um contador JMX em um host, ele solicita ao Zabbix Java Gateway, que utiliza a API de gerência JMX para requisitar da aplicação o dado de interesse. A aplicação não precisa de softwares adicionais, apenas necessita ter sido iniciada com a opção -Dcom.sun.management.jmxremote no momento de sua inicialização (linha de comando).

O Zabbix Java Gateway aceita conexões oriundas do Zabbix Server e do Zabbix Proxy e só pode ser utilizado como um "proxy passivo". Ao contrário do que ocorre com um Zabbix Proxy o Zabbix Java Gateway pode estar atrás de outro proxy (um Zabbix Proxy). O acesso a cada Zabbix Java Gateway é configurado diretamente no arquivo de configuração do Zabbix Server ou do Zabbix Proxy e só pode existir um Zabbix Java Gateway por Zabbix Server ou Zabbix Proxy. Se você precisar de ter mais de um Zabbix Java Gateway em um mesmo ambiente da solução Zabbix você precisará configurar um novo Zabbix Proxy para cada Zabbix Java Gateway. Se um host possuir itens do tipo JMX agent e itens de outros tipos, apenas os itens do tipo JMX agent serão solicitados ao Zabbix Java Gateway.

O Zabbix Java Gateway não faz cache de nenhum valor coletado.

O Zabbix Server ou Zabbix Proxy tem um processo específico para se conectar ao Zabbix Java Gateway, controlado pela opção StartJavaPollers. Internamente o Zabbix Java Gateway inicia múltiplas threads, controladas pela opção START_POLLERS. No lado do servidor, se a conexão demorar mais do que o limite em segundos da opção Timeout, a requisição será terminada (abortada), mas o Zabbix Java Gateway continuará aguardando pela coleta do contador JMX. Para resolver isso, desde o Zabbix 2.0.15, Zabbix 2.2.10 e Zabbix 2.4.5 foi adicionada a opção TIMEOUT no Zabbix Java Gateway que permite definir o tempo máximo para as operações remotas do JMX.

O Zabbix Server ou o Zabbix Proxy irá agrupar as requisições em uma única requisição JMX, sempre que possível (é afetado pelos intervalos entre coletas), e enviar para o Zabbix Java Gateway em uma única conexão visando obter melhor performance.

É recomendável configurar a opção StartJavaPollers com valor menor ou igual à opção START_POLLERS, de outra forma existirão situações onde não existirão trheads disponíveis para atender às requisições.

A sessão abaixo descreve como obter e como executar o Zabbix Java Gateway, como configurar o Zabbix Server (ou Zabbix Proxy) para usar o Zabbix Java Gateway para monitoração JMX, e como configurar os itens do Zabbix em sua interface web para coletar um contador JMX específico.

5.1 Obtendo o Zabbix Java Gateway

Existem duas formas de se obter o Zabbix Java Gateway. A primeira forma é adquirir o pacote do Zabbix Java Gateway package do site da Zabbix e a segunda é compilar a partir de seu código fonte.

5.1.1 Adquirir do site da Zabbix

Os pacotes do Zabbix Java Gateway (RHEL, Debian, Ubuntu) estão disponíveis para download em http://www.zabbix.com/download.php.

5.1.2 Compilando a partir do código fonte

Para compilar o Zabbix Java Gateway, primeiramente execute o script ./configure com o parâmetro --enable-java. É aconselhável que você especifique também o parâmetro --prefix para utilizar outro caminho que não o padrão (/usr/local), o Zabbix Java Gateway irá criar toda a árvore de diretórios, não somente o executável.

$ ./configure --enable-java --prefix=$PREFIX

Para compilar e empacotar o Zabbix Java Gateway em um arquivo JAR, execute o make. Observe que para este passo você precisará dos executáveis javac e jar em seu path.

$ make

Após a execução do make será criado o arquivo zabbix-java-gateway-$VERSION.jar em src/zabbix_java/bin. Se você preferir poderá ajustar o Zabbix Java Gateway para funcionamento a partir de src/zabbix_java no diretório da distribução, para tanto, precisará seguir as instruções de configuração e execução do Zabbix Java Gateway. Caso contrário, se você possuir privilégios suficientes, execute make install.

$ make install

5.2 Visão geral dos arquivos na da distribuição do Zabbix Java Gateway

Independentemente da forma de obtenção do Zabbix Java Gateway, neste momento você possui uma coletânia de scripts para o shell, arquivos JAR e arquivos de configuração localizados em $PREFIX/sbin/zabbix_java. O papel deles é descrito a seguir:

O Zabbix Java Gateway em sí.

bin/zabbix-java-gateway-$VERSION.jar

Dependências do Zabbix Java Gateway: Logback, SLF4J, e Android JSON library.

lib/logback-core-0.9.27.jar
       lib/logback-classic-0.9.27.jar
       lib/slf4j-api-1.6.1.jar
       lib/android-json-4.3_r3.1.jar

Arquivos de configuração de log.

lib/logback.xml  
       lib/logback-console.xml

Scripts para inicialização e finalização do Zabbix Java Gateway.

shutdown.sh  
       startup.sh

Arquivo de configuração dos scripts anteriores.

settings.sh

5.3 Configurando e executando o Zabbix Java gateway

Por padrão o Zabbix Java Gateway escuta a porta 10052. Se você planeja executa-lo em outra porta é possível a configuração usando o script settings.sh. Veja a descrição do arquivo de configuração do Zabbix Java Gateway para melhor entendimento de suas opções.

A porta 10052 não é registrada no IANA.

Uma vez que as configurações estejam conforme sua necessidade, você poderá inicia-lo através do script de inicialização:

$ ./startup.sh

Por outro lado, se você necessita de parar o serviço, execute o script de finalização:

$ ./shutdown.sh

Diferentemente do Zabbix Server e do Zabbix Proxy o Zabbix Java Gateway é leve e não necessita de um banco de dados.

5.4 Configurando o Zabbix Server para uso em conjunto com o Zabbix Jav Gateway Java gateway

Neste momento o Zabbix Java Gateway está apto para execução e você pode configurar o Zabbix Server para que ele saiba localiza-lo. Esta tarefa pode ser concluída especificando os parâmetros JavaGateway e JavaGatewayPort no arquivo de configuração do Zabbix Server. Se o host com a aplicação JMX em execução for monitorado através de um Zabbix Porxy, você deverá definir tais parâmetros no arquivo de configuração do proxy.

JavaGateway=192.168.3.14
       JavaGatewayPort=10052

Por padrão o Zabbix Server não inicia nenhum processo relacionado à monitoração JMX. Se você necessita deste tipo de monitoração deverá especificar uma quantidade de processos de pooler Java a serem pré-alocados. Esta configuração é feita no mesmo arquivo através do parâmetro a seguir:

StartJavaPollers=5

Não se esqueça de reiniciar o Zabbix Server ou Zabbix Proxy após alterar suas configurações.

5.5 Debugando o Zabbix Java Gateway

Caso ocorram problemas com o Zabbix Java Gateway ou caso a mensagem de erro apresentada na interface web do Zabbix não seja clara o suficiente, você poderá necessitar analisar o arquivo de log do Zabbix Java Gateway.

Por padrão, as atividades do Zabbix Java Gateway são registradas no arquivo /tmp/zabbix_java.log com o nível de log: "info". Algumas vezes o nível de detalhe da informação lá constante pode não ser suficiente, sendo necessário o incremento da quantidade de informações registradas. Este incremento de nível de log pode ser feito ao modificar o arquivo lib/logback.xml modificando o parâmetro "level" da tag <root> para "debug":

<root level="debug">
         <appender-ref ref="FILE" />
       </root>

Observe que, diferentemente do Zabbix Server ou Zabbix Proxy, não é necessário o reinicio do Zabbix Java Gateway quando o arquivo logback.xml é modificado. Quando você concluir o debug, poderá retornar o nível para "info".

Se você necessitar de registrar o log de outras formas, poderá ajustar o logback.xml conforme suas necessidades. Observe o manual do log para mais detalhes.

Algumas vezes para as ações de debug é útil iniciar o Zabbix Java Gateway é útil inicia-lo como uma aplicação de console (shell) ao invés do modo de background (daemon). Para fazer isso comente a variável PID_FILE em settings.sh. Se a variável PID_FILE estiver ausente, o script startup.sh iniciará o Zabbix Java Gateway como uma aplicação de console e configurará o Logback para o arquivo lib/logback-console.xml, tal configuração não apenas demonstrará as mensagens na console, também irá habilitar o modo de log para "debug".

Finalmente, observe que o Zabbix Java Gateway usa o SLF4J para as atividades de log, você pode substituir o Logback pelo framework de sua escolha ao colocar o arquivo JAR apropriado dentro do diretório lib. Para mais detalhes consulte o manual do SLF4J.