Testes de Performance com JMeter, InfluxDB e Grafana

Eduardo Pacheco Celeste
beyondTest
Published in
8 min readOct 19, 2020

Executando testes de performance e visualizando os resultados em real-time

Até pouco tempo atrás quando executávamos testes de stress, carga ou performance (caso queiram saber mais detalhes sobre cada um destes tipos de teste, este outro artigo explica de maneira detalhada as diferenças entre cada um deles) um dos trabalhos mais árduos era na hora de compilar os resultados finais para assim entregar o relatório da execução para o nosso cliente. Por ser uma tarefa manual havia sempre a probabilidade de acontecerem erros durante este processo.

A ideia deste artigo é de mostrar uma abordagem não tão nova mas que vem com o intuito de mitigar o problema citado acima.

Mas antes vamos conhecer de maneira resumida os responsáveis por esta stack:

Apache JMeter

JMeter é uma aplicação gratuita, open source, multiplataforma e escrita em Java, sendo um projeto da Apache Software Foundation. Ela foi desenvolvida inicialmente para testes em aplicações web, mas hoje é possível utilizá-lo para testes em recursos variados, como banco de dados, servidores de e-mail, requisições HTTP, FTP, TCP, SOAP e outros.

Fonte: https://www.treinaweb.com.br/blog/o-que-e-jmeter/

InfluxDB

É um banco de dados de código aberto designado para lidar com um alto volume de consultas e escritas por segundo sem causar muito impacto no sistema operacional.

Fonte: https://serverdo.in/influxdb/

Grafana

O Grafana é uma plataforma para visualizar e analisar métricas por meio de gráficos. Ele tem suporte para diversos tipos de bancos de dados — tanto gratuitos quanto pagos — , e pode ser instalado em qualquer sistema operacional.

Fonte: https://www.opservices.com.br/grafana/

Como a ideia é a de ser um artigo hands-on a explicação foi bem simplista, porém eu deixo o link para mais informações sobre cada uma das ferramentas caso queiram saber mais sobre.

Pré-Requisitos

Para conseguir seguir todas as etapas descritas nesse tutorial é necessário ter as seguintes ferramentas configuradas:

  • Docker
  • Java 8+
  • Node + NPM (Obrigatório caso queiram subir uma API REST Fake (mais detalhes na seção Executando os Testes))

Caso você não esteja familiarizado com o Docker segue este outro tutorial que logo no segundo parágrafo direciona no entendimento do que é o Docker e como instalá-lo, independente de qual seja o seu sistema operacional.

Quanto ao Java, para baixar clique neste link. Após isto é necessário configurá-lo em seu ambiente e para isto siga este tutorial.

Setup inicial

A primeira etapa é a de instalarmos tanto o InfluxDB quanto o Grafana e iremos fazer isso através do Docker. Uma vez que o Docker esteja funcionando, vamos lá..

Observação:Os comandos a seguir mostram a instalação seguindo um passo a passo. Caso queira executar de forma automatizada e pular todas as etapas abaixo, basta clonar o seguinte repositório:https://github.com/eduardopc/jmeter-script-sampleE executar o seguinte comando:> npm run start
  1. Primeira etapa é baixar a imagem do InfluxDB:
> docker pull influxdb

2. Uma vez que a imagem tenha sido baixada, vamos criar um volume para que assim as informações não se percam caso, por exemplo, precisemos reiniciar a nossa máquina ou o container tenha algum tipo de problema.

> docker volume create influxdb

3. E agora iremos inicializar a imagem através do seguinte comando:

> docker run -d -p 8086:8086 -v influxdb:/var/lib/influxdb --name influxdb influxdb

4. Pra finalizarmos a parte do InfluxDB, vamos acessar o container Docker através do comando:

> docker exec -it influxdb influx

5. E por fim criamos uma nova database:

> create database testinfluxdb> use testinfluxdb

O output no seu terminal deverá ser algo parecido com o abaixo:

Caso queira validar se a imagem esta respondendo conforme esperado, basta irmos até o nosso terminal e executarmos o seguinte comando:> curl -i localhost:8086/pingO esperado é receber uma resposta com status code igual a 204.

6. Agora vamos baixar outra imagem, dessa vez a do Grafana:

> docker pull grafana/grafana

7. Assim como para o InfluxDB, vamos criar um volume para a imagem do Grafana:

> docker volume create grafana

8. E agora basta iniciarmos a imagem:

> docker run -d -p 3000:3000 -v grafana:/var/lib/grafana grafana/grafana

Parametrizando o nosso Dashboard

Uma vez que todos os comandos acima foram executados com sucesso, vamos acessar o nosso dashboard do Grafana e realizarmos algumas configurações. Para isto vá até o seu navegador e acesse o endereço http://localhost:3000. O esperado é sermos direcionado para a tela de boas vindas do Grafana. O dashboard pode ser acessado através do usuário/senha padrão admin/admin (A senha poderá ser alterada posteriormente).

Assim que for efetuado o login na aplicação, vamos configurar o nosso InfluxDB como a fonte de dados que irá alimentar o Grafana. Para isso, logo na home, clicar na opção Add your first data source e selecionar a opção InfluxDB.

Agora basta parametrizarmos os dados para ambos se comunicarem, conforme podemos ver nas imagens abaixo:

Observações:1. Se atente ao nome do banco de dados definido no passo 5 ao setar o valor do campo Database.2. No campo URL tente se conectar através do IP http://localhost:8086 porém caso não funcione será necessário setar o IP interno da máquina conforme mostrado na primeira imagem abaixo (Neste link: https://www.tp-link.com/us/support/faq/838/ há um passo a passo para descobrir seu IP).
Primeira parte do setup
Segunda parte do setup

Após todas as parametrizações clicar no botão 'Save & Test'. Caso o Grafana consiga se comunicar com o InfluxDB uma mensagem como a mostrada acima (em verde) deverá ser apresentada. Caso contrário uma mensagem em vermelho será mostrada com uma breve descrição do erro.

Executando os Testes

A próxima etapa é a de executarmos nossos testes pelo JMeter e o resultado destes testes serem enviados para o InfluxDB. Para isso o primeiro passo é o de baixarmos o JMeter. Uma vez que o baixarmos, vamos abri-lo através do nosso terminal:

Windows: Para abrir o JMeter no Windows vá até a basta bin e digite o seguinte comando: jmeter.batUNIX: Para abrir o JMeter nas distribuições UNIX, vá até a basta bin e digite o seguinte comando: ./jmeter.sh

Como o intuito principal do artigo é apenas de realizar a integração entre as ferramentas, não iremos nos ater ao script do JMeter. Porém caso queiram baixar o mesmo script que será utilizado na sequência do artigo, basta realizar o download a partir do repositório (Pasta jmeter).

Observação:Pular esta etapa de criar a API REST Fake caso tenha seguido o processo automatizado descrito no início da seção 2 deste artigo. Para validar se esta funcionando conforme o esperado basta acessar em seu navegador a url: http://localhost:3356/movies e uma lista de filmes deverá ser apresentada.

Para fins educacionais, o script do JMeter será executado a partir de uma API REST Fake. O passo a passo de como criar essa API pode ser visto através desse outro artigo: Criando uma REST API Fake com JSON Server.

Uma vez que baixarmos/importarmos o script (ou caso queiram criar um novo projeto do zero), o que temos que fazer agora é configurar um Listener para que os dados sejam coletados e enviados para o InfluxDB em tempo de execução. Para isso basta dentro da Thread Group procurarmos por Backend Listener:

E neste configurarmos os dados para que assim o JMeter se comunique com o InfluxDB:

Backend Listener
Observações:1. Lembre de substituir no campo influxdbUrl o valor de host_to_change para o IP da máquina na qual o InfluxDB está sendo executado.2. Também para o campo influxdbUrl é necessário setar o nome da Database criada previamente.

Agora basta rodarmos o script (Windows: CTRL+R / UNIX: Command+R) e todos os dados serão coletados e enviados para o InfluxDB :)

Criando os Dashboards no Grafana

A última parte do tutorial é o de vermos os dados dentro do Grafana e para isto precisamos criar um Dashboard (ou importarmos templates já existentes).

Para criar um dashboard do zero é simples, basta estarmos dentro da página inicial do Grafana, acessarmos a opção Dashboard no menu lateral esquerdo e após isto clicarmos na opção 'Add new panel'.

Esta opção é simples mas requer um esforço em configurarmos o Dashboard do zero! Por isso o recomendável é o de utilizar templates já criados pela comunidade. Para isto o próprio Grafana disponibiliza uma série de Dashboards criados pelos usuários através do seu portal. No nosso caso, iremos utilizar o seguinte Dashboard: Download Dashboard.

Agora basta realizarmos o download do template através da opção Download JSON:

E na página inicial do Grafana realizarmos a sua importação (Menu lateral > + > Import). Uma tela como a mostrado abaixo deverá ser apresentada:

Importing Dashboard Template
1. Onde o parâmetro 'DB Name' foi o configurado anteriormente (Seção Parametrizando o nosso Dashboard deste artigo)2. Já o parâmetro 'Measurement name' foi o definido na configuração do Listener lá no script do JMeter (Seção Executando os Testes)

Se tudo deu certo até aqui ao clicarmos em 'Import' teremos um Dashboard como esse:

--

--