Tiago Tartari, Microsoft MVP, SRE, Executivo e Especialista em Tecnologia
Qualidade

K6.io, Grafana e InfluxDb é a melhor stack para stress test

publicado em 02 de março de 2022
Tiago Tartari - Microsoft MVP

Para quem só sabe usar o martelo, todo problema é prego

Resumo
Plataformas digitais estão sendo lançadas cada vez mais em produção, entender o comportamento da aplicação é primordial pensando na boa experiência do cliente. Para isso, um bom stress test pode dar a visão se está de fato pronto ou ajustes ainda precisarão ser feitos. A stack K6, Grafana e InfluxDb contribui para atender atributos de qualidade que seu software tanto necessita, resiliency, scalability, security e observability são os atributos de qualidade mais comuns ao observar em um stress test.

Conteúdo

K6.io, Grafana e InfluxDb é a melhor stack para stress test

A stack, K6.io, Grafana e InfluxDb, nos possibilita ter uma ótima experiência quando o assunto é stress test. Por ser uma stack open source ela possibilita aos times de engenharia mais velocidade com o menor esforço ao criar um teste de carga.

Empresas demoram até duas horas para descobrir problemas em produção

Empresas demoram mais de duas horas para descobrir problemas em produção, segundo o report DoraDevops. Dessa forma, considerando que um software bem-feito deve atender aos atributos de qualidade, esse conjunto de ferramentas para stress test pode ajudar a compreender o comportamento do seu software. Além disso, ao adotar um stress test vamos colaborar para boa experiência do cliente.

Resiliency, Scalability, Security e Observability são os atributos de qualidade mais comuns ao observar em um stress test, entretanto outros também podem entrar nessa lista.

K6 é a stack perfeita para te ajudar nessa tarefa.

O esforço de implementação da stack é mínimo se comparado com os ganhos e resultados obtidos

version: '3.4'

services:

  influxdb:
    image: influxdb:1.8
    ports:
      - 8086:8086
    environment:
      - INFLUXDB_DB=k6
    restart: always      
    volumes:
      - ./influxdb:/var/lib/influxdb 
    networks:
      - grafana

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - TZ=America/Sao_Paulo    
      - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
      - GF_AUTH_ANONYMOUS_ENABLED=true
      - GF_AUTH_BASIC_ENABLED=false
    volumes:
      - ./grafana/data:/var/lib/grafana
    networks:
      - grafana      

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

let delta = 1;

export let options = {

    stages: [
        { duration: "10s", target: (delta * 1) },
        { duration: "5s", target: (delta * 1) },

        { duration: "10s", target: (delta * 2) },
        { duration: "5s", target: (delta * 2) },

        { duration: "10s", target: (delta * 3) },
        { duration: "5s", target: (delta * 3) },

        { duration: "10s", target: (delta * 4) },
        { duration: "5s", target: (delta * 4) },

        { duration: "10s", target: (delta * 5) },
        { duration: "5s", target: (delta * 5) },

        { duration: "10s", target: (delta * 6) },
        { duration: "5s", target: (delta * 6) },

        { duration: "10s", target: (delta * 7) },
        { duration: "5s", target: (delta * 7) },

        { duration: "10s", target: (delta * 8) },
        { duration: "5s", target: (delta * 8) },

        { duration: "10s", target: (delta * 9) },
        { duration: "5s", target: (delta * 9) },

        { duration: "10s", target: (delta * 10) },
        { duration: "5s", target: (delta * 10) },

        { duration: "2s", target: (delta * 10) },
        { duration: "2s", target: (delta * 9) },
        { duration: "2s", target: (delta * 8) },
        { duration: "2s", target: (delta * 7) },
        { duration: "2s", target: (delta * 6) },
        { duration: "2s", target: (delta * 5) },
        { duration: "2s", target: (delta * 4) },
        { duration: "2s", target: (delta * 3) },
        { duration: "2s", target: (delta * 2) },
        { duration: "2s", target: (delta * 1) },
        { duration: "2s", target: (delta * 0) }
    ]
};

export default function () {

    let url = `http://localhost:5021/`
    let response = http.get(url);

    check(response, {
        'Hello World': (r) => r.status === 200
    });

    sleep(1);
};
k6 run -o influxdb=http://localhost:8086/k6 .\script.js

Conclusão

Ter qualidade no software que desenvolvemos não é um opcional, portanto, aderir ao stress test, load test é fundamental para manter a confiabilidade de nossas aplicações, além disso com a adoção do K6.io, Grafana e InfluxDb como sua stack para stress test, você cria oportunidades de melhorar ainda mais a confiabilidade adotando, por exemplo, a engenharia do caos.

Gostou? Me ajude a impactar outras pessoas compartilhando esse post.
Tiago Tartari
Tiago Tartari

Ajudo executivos, times de negócios e especialistas técnicos a resolver problemas complexos utilizando a tecnologia como meio para potencializar resultados.