DEV Community

Cover image for Visualização de métricas k6 em tempo real com Prometheus remote write
Marlo Henrique
Marlo Henrique

Posted on

Visualização de métricas k6 em tempo real com Prometheus remote write

O ciclo de vida de um teste de performance envolve diversas fases cruciais para garantir o sucesso em cenários de testes de alta complexidade. Essas fases são:

  • Levantamento e Análise de Requisitos
  • Planejamento do Teste
  • Projeto do Teste
  • Configuração do Ambiente de Teste
  • Execução do Teste
  • Monitoramento e Análise
  • Geração de Relatório
  • Resolução de Problemas
  • Reteste

Em testes mais simples, algumas fases tendem a ser ignoradas ou adiadas para outro momento. No entanto, em testes mais complexos, especialmente aqueles de larga escala e maior duração, ignorar algumas das fases mencionadas anteriormente pode levar o ciclo de testes de performance a resultados inesperados.

O tempo dos testes de performance deve sempre ser considerado. Por exemplo, em uma execução simples com o k6, o resultado é fornecido ao usuário apenas ao término do teste ou caso algum limite configurado seja ultrapassado, resultando na interrupção do teste. É nesse contexto que entram as ferramentas de monitoramento em tempo real.

Neste artigo, vamos explorar o Prometheus e como utilizá-lo para a visualização de métricas em tempo real.

Prometheus📚

Prometheus é uma ferramenta de monitoramento e alerta de sistemas de código aberto, originalmente desenvolvida na SoundCloud em 2012. Desde então, muitas empresas e organizações adotaram o Prometheus, que conta com uma comunidade ativa de desenvolvedores e usuários.

Em 2016, o Prometheus tornou-se um projeto independente e foi incorporado à Cloud Native Computing Foundation, destacando-se como o segundo projeto hospedado, após o Kubernetes.

O Prometheus coleta e armazena métricas como séries temporais, ou seja, os dados são registrados com um carimbo de tempo e pares de chave-valor opcionais chamados rótulos. Suas principais características incluem um modelo de dados multidimensional, a linguagem de consulta PromQL, independência de armazenamento distribuído, coleta de séries temporais via modelo pull sobre HTTP, suporte ao push de dados via gateway intermediário, descoberta de alvos via service discovery ou configuração estática, e suporte a vários modos de visualização e dashboarding.

A maioria dos componentes do Prometheus é escrita em Go, o que facilita sua construção e implantação como binários estáticos.

Prometheus com k6👀

Ao acessar o catalogo de extenções do k6, podemos observa alguma soluções referentes ao uso do Prometheus. Uma das mais interresantes, é o modulo Prometheus remote write, que a parti da versão v0.42.0 foi introduzido como um modulo experimental ao core do k6.

O Prometheus remote write é um protocolo que permite a transmissão confiável de dados em tempo real entre um remetente e um receptor, com várias implementações e integrações de armazenamento compatíveis. Por exemplo, ao executar seu teste de performance, e utilizar a saída experimental-prometheus-rw, o k6 pode enviar métricas de resultados de testes diretamente para o endpoint remoto e armazená-las no Prometheus.

Durante a execução do k6, todos os pontos de dados de séries temporais gerados são capturados e convertidos em séries temporais no formato Prometheus, sendo então enviados ao endpoint de escrita remota. As métricas do k6 são mapeadas para tipos de métricas equivalentes no Prometheus, seguindo as melhores práticas de nomenclatura.

Existem inumeras abordagens de utilização do prometheus. Nesse artigo utilizaremos um serviço auto gerenciado da Grafana cloud.

Pré-requisitos📑

  • K6 instalado
  • Conta free Grafana Cloud

Configurando Grafana cloud Prometheus🛠️

Uma vez autenticado na Grafana Cloud, acesse send metrics para o serviço prometheus:

Image description

Copie as informações de remote write endpoint bem como o username/instance ID para sua conta:

Image description

Em seguida você precisa gerar o API token para escrita remota com prometheus. Em password/API token, selecione a opção Generate now:

Image description

Image description

Atribua um nome ao seu token e selecione o botão create token:
Image description

Armazene o seu token gerado, vamos precisar dele posteriomente!

Script utilizado👩‍💻

O script de teste de performance que será utilizado é o seguinte:

import http from 'k6/http';
import {sleep, check} from 'k6';

export const options = {
    stages: [
        { duration: '10s', target: 10 }, 
        { duration: '10s', target: 10 },
        { duration: '10s', target: 0 } 
    ],
    thresholds: {
        checks: ['rate > 0.95'],
        http_req_duration: ['p(95) < 500']
    }
}

export default function(){

    const BASE_URL = 'https://test-api.k6.io/public/crocodiles';
    const res = http.get(BASE_URL)

    check(res,{
        'status 200': (r) => r.status === 200
    });
    sleep(1);
}
Enter fullscreen mode Exit fullscreen mode

Nenhuma modificação será necessaria nas fases de inicialização, configuração, execução ou desmontagem do script. A utilização do prometheus remote write necessita apenas de flags no comando da sua CLI.

Executando nosso script📈

O processo de execução do nosso script não necessita de autenticação no grafana cloud k6 via CLI.

Basicamente precisamos fornece três informações que obtivemos anteriomente: K6_PROMETHEUS_RW_USERNAME sendo o valor que obtivemos do campo username/instance_ID, K6_PROMETHEUS_RW_PASSWORD sendo o token que geramos e oK6_PROMETHEUS_RW_SERVER_URL que é nossa URL de escrita remota.

Na CLI precisaremos tambem utilizar a flag -o para especificar um output para nosso teste, sendo nesse exemplo o experimental-prometheus-rw.

Nosso comando apos forncer todas essa informações será o seguinte:

K6_PROMETHEUS_RW_USERNAME=USERNAME \
K6_PROMETHEUS_RW_PASSWORD=API_KEY \
K6_PROMETHEUS_RW_SERVER_URL=REMOTE_WRITE_ENDPOINT \
k6 run -o experimental-prometheus-rw script.js
Enter fullscreen mode Exit fullscreen mode

Na CLI podemos observar que o resultando de saida já aponta para nosso endpoint de escrita remota:
Image description

Se acessarmos o explorer da nossa conta grafana cloud, podemos observar que todas as metricas k6 foram enviadas e armazenadas no prometheus:

Image description

Conclusão❤️

O uso de bancos de séries temporais, como o Prometheus, facilita a integração com ferramentas de visualização, especialmente o Grafana.

O Grafana Cloud permite, com poucos cliques, criar dashboards que obtêm dados de fontes como o Prometheus, oferecendo novas possibilidades para visualizar métricas de forma eficiente.

Gostou do conteúdo e quer saber mais sobre testes de performance com K6? Confira meu curso na Udemy!

Top comments (0)