JMeter (InfluxDB + Grafana)
Tabela de conteúdos
avançado - This article is part of a series.
O que é InfluxDB ? #
InfluxDB é um serviço de base de dados em série temporais, ideal para armazenar resultados numéricos ou reais em tempo real. A sucesso de InfluxDB reside na sua implementação em Go, que o torna mais performático do que outras bases de dados em série temporais time series DBMS. Podemos implementar a solução deste artigo com Graphite ( https://graphiteapp.org/), mas creio que seria recomendável apenas se você precisasse comparar resultados ou realizar “benchmarking”.
A administração, escrita e/ou leitura de dados em InfluxDB pode ser feita através do seu serviço API, que recebe solicitações via protocolo HTTP e executa operações no idioma InfluxQL (semelhante a SQL) em nossa base de dados. A ingestão pode ser tanto unidireta ou batchada, o que significa que pode enviar uma solicitação HTTP com um ou mais medidos simultaneamente. Também é possível realizar ingestão em lotes ou em formato CSV brutto, mas isso ficaria fora do nosso escopo. Recomendo visitar este artigo para jogar com InfluxDB. Por fim, mas não menos importante, InfluxDB é um projeto aberto-source.
O que é Grafana?
Grafana é um ferramenta para visualizar painéis e gráficos que são alimentados por dados de métricas provenientes de bases de dados de série temporais. Isso se limita a uma abordagem implícita ou temporal, o que significa apenas que o painel pode ser escopo a um período específico de tempo. De forma semelhante, tanto Grafana quanto InfluxDB são projetos GoLanguage e também são projetos abertos.
Este ferramenta nos permite entender e/ou analisar comportamentos ou padrões modificando janelas de tempo, recalculando valores em uma nova janela após as alterações serem feitas. Podemos facilmente ver o comportamento do CPU ou da memória de um ou mais servidores por dia, semana, mês ou ano. Com esta informação, entendemos as hábitos atuais de consumo e prevemos os comportamentos futuros.
Como a integração de InfluxDB e Grafana funciona com o JMeter? #
A integração é relativamente simples e popular, tanto que existe uma componente nativa em JMeter para essa integração chamada de Listener Backend. Este listener recebe solicitações do JMeter via chamadas assíncronas HTTP a InfluxDB. Os resultados obtidos pelo JMeter através das bloques podem ser armazenados em InfluxDB, que pode então ser lido ou gráfico na dashboard Grafana para visualização.
O receptor enviará todos os resultados descritos aqui para o InfluxDB, seja em nível de escuta backend dentro do plano de teste ou dentro de uma grupo específico de thread. Os resultados serão enviados ao InfluxDB em um máximo de 5000 linhas, cada linha pode conter múltiplas medidas. De fato, isso não significaria muito esforço para o InfluxDB. A dados é transmitido via requisições HTTP POST para a API do InfluxDB, seria bom ter uma única pessoa para escrever e outra para ler (para segurança). Após você validar que os dados está entrando corretamente, podemos construir um dashboard em Grafana para exibir os resultados do teste de JMeter. Não se preocupe se não sabe como fazer; há muitas dashboards pré-definidos disponíveis no comunidade de Grafana para visualizar os resultados do teste de JMeter.
O que precisamos? #
Precisamos de uma base de dados em InfluxDB ( www.influxdata.com). InfluxData fornece um período de teste de 15 dias com instâncias de até 4 núcleos de processamento e 16 GB de RAM, o que é suficiente para este teste. Você também pode baixar e instalar InfluxDB em seu computador ou usar um servidor dedicado. Se você não quiser instalar, pode baixar e executar a versão Docker ( https://hub.docker.com/_/influxdb).
Precisamos de uma instância Grafana. Quando você abrir sua conta no grafana.com, pode gerar uma instância Grafana Cloud. Esta instância seria suficiente para este teste. Você também pode baixar e instalar Grafana em seu computador ou usar o mesmo servidor InfluxDB. Se você não quiser instalá-lo, também pode optar pelo Docker.
Crie um banco de dados no InfluxDB e crie um usuário para leitura e escrita (o mesmo usuário pode ser usado para ambas as tarefas).
Adicione o escutador de backend ao script do JMeter e configúre-o com as informações da etapa #1.
Verifique se a informação está disponível no InfluxDB.
Crie suas próprias dashboards ou use os existentes para exibir as gráficos dos resultados.
Receita para cozinhar #
1.- Versão do InfluxDB e criação de uma base de dados #
Utilizaremos a versão testemundam do InfluxDB, conforme pode ser visto nas imagens. Obtemos um URL onde está localizado nosso serviço API https://hillvalley-1cf3ad8f.influxcloud.net:8086. Quando iniciamos Chronograf, selecionamos a opção para administração do InfluxDB para gerar nossa base de dados, que será chamada InfluxDataBase. Também criamos o usuário listener e sua senha. Para facilitar a interação com este usuário, ele pode ler e escrever dados, com o objetivo de ser usado por JMeter e Grafana.
2.- Configurar o Receptor Back-end #
Necessitamos adicionar e configurar o escutador de Backend com os dados da etapa #1, como mencionamos anteriormente que a URL é https://hillvalley-1cf3ad8f.influxcloud.net:8086, mas também precisamos especificar o banco de dados para onde queremos escrever os resultados e também autenticar o usuário e senha com que vamos interagir. Felizmente, esses valores podem ser enviados como parâmetros na seguinte URL: https://hillvalley-1cf3ad8f.influxcloud.net:8086/write?db=InfluxDataBase&u=listener&p=password, onde db é o banco de dados InfluxDataBase, u é o usuário listener e p é a senha password. Após configurar isso, faremos um pequeno teste com alguns usuários concurrentes.
3. Valide as conexões da API do DB #
1.- curl -G ‘ https://hillvalley-1cf3ad8f.influxcloud.net:8086/query?db=InfluxDataBase&u=listener&p=password&pretty=true' –data-urlencode “q=SHOW MEASUREMENTS”
2.- curl -G ‘ https://hillvalley-1cf3ad8f.influxcloud.net:8086/query?db=InfluxDataBase&u=listener&p=password&pretty=true' –data-urlencode “q=SELECT * from jmeter limit 2”
4.- Dashboard de Grafana #
Você precisa construir o dashboard em Grafana para poder gráfico os dados que foram enviados ao InfluxDB. A maneira mais fácil é usar dashboards pré-definidos criados por usuários do Grafana da comunidade, que estão disponíveis no link aqui. Para este exemplo, estamos usando o dashboard com a número #5496, que você pode simplesmente copiar e colar no Grafana. No entanto, antes de configurar a conexão de fonte de dados entre Grafana e InfluxDB, você precisa primeiro definir a conexão.
Conclusão #
Para este artigo eu baseei parte da minha publicação de 2018 e você pode consultar aqui. A publicação está em inglês e utiliza dois receptor JSR223 com linguagem de programação Groovy, com uma lógica muito semelhante à usada pelo Listener Back-end, entretanto há algumas diferenças quanto ao formato e dados enviados para InfluxDB. Também as tabelas do Grafana foram especialmente projetadas para aquele formato, então não são compatíveis com este artigo. Não cubri esse material porque minha intenção é fornecer uma solução simples. Quando você sentir mais avançado, por favor use ou modifique o código da publicação mencionada.
Este solução funcionou para milhares de usuários concurrentes porque é muito fácil horizontalmente escalar InfluxDB, enquanto Grafana, mesmo com a instância em nuvem, está suficiente. Se eles tiverem mais experiência, convido você a criar suas próprias tabelas no Grafana ou modificar as existentes, é bastante simples e muito útil. Pois também pode enviar contadores de CPU, Memória, Disco e Bandeira dos seus generadores de carga ou servidores alvo usando telegraf ou a solução compartilhada por Delvis neste monitório, com o objetivo de quantificar e correlacionar níveis de carga com consumos de recursos, assim podemos medir a performance dos servidores envolvidos.
Bem-vindo à monitorização em tempo real de seus resultados e níveis de consumo. Lembre-se que esta informação também está disponível no site oficial do JMeter, na seguinte link. Boa sorte!