Descubra como monitorar sua JVM com Prometheus e Grafana
Saiba o que ocorre com a sua JVM!
O monitoramento e a visibilidade do ambiente de TI sempre foram de grande importância para seus gestores e administradores, seja para avaliação de performance, correção de falhas e principalmente para evitar que os problemas venham de fato a ocorrer. Atualmente ferramentas open source como o Prometheus podem coletar métricas tanto de máquinas, como de serviços para nos auxiliar nessas questões e o Grafana pode nos ajuda a ter uma visibilidade mais analítica dessas métricas com a criação de dashboards e gráficos intuitivos.
Porém sempre foi um desafio muito grande realizar o monitoramento de uma JVM (Java Virtual Machine). Neste post veremos como realizar a coleta de métricas de uma JVM Wildfly com Prometheus e Grafana utilizando um exporter do Prometheus.
As novas versões de Wildfly (a partir da 15), já possuem um subsystem que gera uma página de métricas e que pode ser acessada normalmente pelo browser, assim não se faz necessário a utilização do exporter do Prometheus. Para nosso laboratório iremos demonstrar justamente como realizar a coleta em versões anteriores a 15, pois estas não possuem o subsystem e são um desafio e tanto para qualquer SysAdmin obter métricas e visibilidade da JVM.
Pré-requisitos:
- Utilizar um SO Linux
- GIT (https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- Docker e Docker Compose (https://docs.docker.com/install/linux/docker-ce/ubuntu/ | https://docs.docker.com/compose/install/)
- Wildfly 14 ou anterior (https://wildfly.org/downloads/)
Download do Projeto
Todos os arquivos necessários para a execução do nosso laboratório estão em um repositório do GitHub, assim, com o git instalado em sua máquina, escolha um diretório para ser o seu workspace e realize o clone do projeto com o seguinte comando:
git clone https://github.com/CaeirOps/wildfly-exporter.git
Habilitando as Métricas
Após o clone do repositório iremos então começar a configurar nosso Wildfly para exportar as métricas que serão coletadas pelo Prometheus. O exporter que iremos utilizar é mantido pela comunidade e pode ser encontrado no repositório “https://github.com/nlighten/wildfly_exporter“. Para iniciar a configuração iremos executar os seguintes passos:
- Copie o arquivo ‘wildfly_exporter_module-0.0.5.jar’, que foi baixado do repositório, no diretório “$JBOSS_HOME/modules/” da sua instância do Wildfly. A variável $JBOSS_HOME indica o diretório do seu Wildfly, para realizar a cópia coloque o caminho relativo ou absoluto no comando da cópia, ex:
cp wildfly-exporter/wildfly_exporter_module-0.0.5.jar /opt/wildfly/modules/
- Acesse o diretório “$JBOSS_HOME/modules/” e extraia o arquivo JAR com o comando:
jar -xvf wildfly_exporter_module-0.0.5.jar
- Após extrair os arquivos, vamos deletar os seguintes itens que não serão utilizados:
rm -rf META-INF ; rm -f wildfly_exporter_module-0.0.5.jar
- Agora precisamos adicionar os seguintes parâmetros no arquivo de configuração xml utilizado, por exemplo, no modo standalone com perfil default altere o arquivo de configuração em “JBOSS_HOME/standalone/configuration/standalone.xml”, adicionando os seguintes parâmetros:
Este parâmetro irá definir que o módulo que extraímos anteriormente seja carregado e deve estar dentro da chave ‘subsystem xmlns=”urn:jboss:domain:ee:4.0’, provavelmente você não terá em sua configuração a chave “global-modules” então será necessário inserir como no exemplo:
(linha do arquivo: 167)
<subsystem xmlns="urn:jboss:domain:ee:4.0">
<global-modules>
<module name="nl.nlighten.prometheus.wildfly" services="true" meta-inf="true"/>
</global-modules>
Este parâmetro servirá para habilitarmos as estatísticas em nosso subsystem undertow, provavelmente você irá encontrar esses parâmetros todos configurados, adicione então somente o “ statistics-enabled=“true” ” como no exemplo:
(linha do arquivo: 465)
<subsystem xmlns="urn:jboss:domain:undertow:7.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other" statistics-enabled="true">
Aqui é uma situação muito parecida com a anterior, estes parâmetros já estarão configurados no arquivo, adicione somente o “statistics-enabled=“true””, e caso você tenha mais de um data-source será necessário adicionar em todos eles, ou apenas nos que você deseja coletar métricas:
(linha do arquivo: 148)
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true" statistics-enabled="true">
- Feito isso, precisamos agora realizar o deploy de nossa aplicação que irá disponibilizar as métricas para o Prometheus. Copie o arquivo “metrics.war” do repositório para o diretório “JBOSS_HOME/standlone/deployments/”, como no exemplo:
cp wildfly-exporter/metrics.war /opt/wildfly/standalone/deployments/
- Realize o start da sua instância, importante lembrar que deve ser feito o bind da JVM para uma interface que possa receber conexão do Prometheus depois, pode-se utilizar a opção “-b” na inicialização para informar a interface. Após isso a página “métrics” já deve estar acessível para a visualização das métricas geradas da JVM:
Exemplo de inicialização com o processo da JVM em listening em qualquer interface e executando em background:
/opt/wildfly/bin/standalone.sh -b 0.0.0.0 -c standalone.xml > /dev/null 2>&1 &
Prometheus + Grafana + Docker
Para provisionar nossos servidores Prometheus e Grafana de forma simples e ágil, iremos utilizar containers Docker. Partimos do ponto que você já possua Docker e Docker Compose instalados na sua máquina. O arquivo compose que será utilizado também foi baixado do repositório anteriormente com o git clone, atente-se que a versão do compose file é 3.3 assim é necessário uma engine atualizada do Docker e do Compose. As imagens utilizadas são as oficiais do Docker Hub.
Para iniciarmos nossos serviços devemos seguir os passos:
- Dentro do diretório do repositório, edite o arquivo “./configs/prometheus.yml” adicionando os endereços IPs:Portas das instâncias como no exemplo:
- job_name: 'wildfly-exporter'
metrics_path: /metrics
static_configs:
- targets:
- 192.168.0.50:8080
- Executar os comandos:
docker swarm init ; docker-compose up -d
(O PROMETHEUS USARÁ A PORTA 9090 E O GRAFANA A PORTA 3000, PODE SER ALTERADO NO ARQUIVO DO COMPOSE)
Após isso já podemos acessar o nosso Prometheus e verificar na opção de “Status>Targets” a conexão com a nossa JVM:
Agora é a hora de acessarmos o Grafana para configurar os dashboards. O usuário e senha definidos para o Grafana estão no compose file e são respectivamente “admin/password”. Após o login na primeira tela selecione a opção “Datasource”:
Após isso será aberto uma tela para escolher qual será a fonte de dados que alimentará os nossos dashboards, assim podemos escolher o Prometheus:
Na tela seguinte configure a url de acesso como a da imagem, isso fará com que o container do Grafana se conecte através dessa URL no container do Prometheus para ler os dados, salve e teste no final da página:
Ao lado esquerdo da tela terá um ícone de soma, ali poderemos adicionar o nosso dashboard:
Após clicar em dashboard nos será dado a opção de “New Dashboard”, clique nessa opção e logo em seguida do lado direito clique em “Import Dashboard”:
Nesta tela veremos a opção de importar um template JSON, clique nessa opção e selecione o arquivo “wildfly_stats.json” que foi baixado do repositório:
Ajuste as opções como a da imagem e finalize a importação:
Após isso já poderemos visualizar as métricas coletadas através de gráficos no Grafana.
Esta foi apenas uma pequena demonstração sobre o monitoramento de nossas queridas JVMs, pode ser feito muito mais e iremos explorar isso nos próximos posts, fique ligado! Também como foi dito no início as novas versões de Wildfly já vem com o subsystem de métricas embarcado, não sendo necessário o deploy da app “metrics”, sinta-se à vontade para utilizar esses containers para testar também.
Até a próxima!
Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:
About author
Você pode gostar também
Entenda as diferenças entre MySQL Community, MySQL Enterprise, Percona e MariaDB
Nesta publicação quero explicar algumas diferenças interessantes entre o MySQL Community, MySQL Enterprise, Percona e MariaDB. Normalmente sempre abordamos algumas coisas em nosso curso de MySQL, mas o tempo sempre
Proteja seu e-mail contra spam e vírus com ferramentas open source
Um dos maiores ou até mesmo o maior problema quando falamos de e-mail é o recebimento de spam e vírus, um incomodo enorme tanto para o cliente final como a
Harmonizando DevOps e Metodologia Agile com o C.A.M.S.
A rápida evolução tecnológica do mundo atual é crucial para o sucesso das empresas e seus projetos. Para as áreas de desenvolvimento e operações, DevOps, a metodologia Agile tem proporcionado