No results for

Powered byAlgolia

Esta sección cubre el importante aspecto de la gestión de métricas en k6. Cómo y qué tipo de métricas monitoriza k6 automáticamente (métricas incorporadas), y qué métricas personalizadas puede hacer que k6 monitorize.

Métricas incorporadas

Las métricas incorporadas son las que puedes ver en la salida stdout cuando ejecutas la prueba k6 más simple posible, por ejemplo, k6 run github.com/k6io/k6/samples/http_get.js que mostrará algo como lo siguiente:

output-to-stdout

Todas las líneas http_req_... y las otras que siguen después son métricas incorporadas que se escriben en stdout al final de una prueba.

Las siguientes métricas incorporadas siempre serán recogidas por k6:

Nombre de la métricaTipoDescripción
vusGaugeNúmero actual de usuarios virtuales activos
vus_maxGaugeNúmero máximo posible de usuarios virtuales (los recursos de la VU están preasignados, para garantizar que el rendimiento no se vea afectado al aumentar el nivel de carga)
iterationsCounterEl número agregado de veces que las VUs en la prueba han ejecutado el script JS (la función default)
iteration_durationTrendEl tiempo que se tarda en completar una iteración completa de la función default/main.
dropped_iterationsCounterIntroducido en k6 v0.27.0, el número de iteraciones que no pudieron iniciarse debido a la falta de VUs (para los ejecutores de tasa de llegada) o a la falta de tiempo (debido a la duración máxima expirada en los ejecutores basados en la iteración)
data_receivedCounterLa cantidad de datos recibidos. Lea este ejemplo para monitorizar los datos de una URL individual.
data_sentCounterLa cantidad de datos enviados. Lea este ejemplo para monitorizar los datos de una URL individual.
checksRateEl porcentaje de Checks exitosos.

Métricas integradas específicas de HTTP

Las métricas incorporadas sólo se generarán cuando/si se realizan peticiones HTTP:

Nombre de la métricaTipoDescripción
http_reqsCounterCuántas peticiones HTTP ha generado k6, en total.
http_req_blockedTrendTiempo de bloqueo (espera de una ranura de conexión TCP libre) antes de iniciar la solicitud. float
http_req_connectingTrendTiempo de establecimiento de la conexión TCP con el host remoto. float
http_req_tls_handshakingTrendTiempo de la sesión TLS de handshaking con el host remoto.
http_req_sendingTrendTiempo de envío de datos al host remoto. float
http_req_waitingTrendTiempo de espera de la respuesta del host remoto (también conocido como "tiempo hasta el primer byte", o "TTFB\"). float
http_req_receivingTrendTiempo de recepción de datos de respuesta del host remoto. float
http_req_durationTrendTiempo total de la solicitud. Es igual a http_req_sending + http_req_waiting + http_req_receiving (es decir, cuánto tiempo ha tardado el servidor remoto en procesar la solicitud y responder, sin los tiempos de búsqueda/conexión de DNS iniciales). float
http_req_failed (≥ v0.31)RateLa tasa de peticiones erróneas acorde a setResponseCallback.

Acceso a los tiempos de HTTP desde un script

Si desea acceder a la información de tiempo de una solicitud HTTP individual, las métricas de tiempo HTTP incorporadas también están disponibles en el objeto HTTP Response:

timings.js
1import http from 'k6/http';
2export default function () {
3 var res = http.get('http://httpbin.org');
4 console.log('Response time was ' + String(res.timings.duration) + ' ms');
5}

En el fragmento anterior, res es un objeto HTTP Response que contiene:

PropiedadDescripción
res.bodystring que contiene el cuerpo de la respuesta HTTP
res.headersobject que contiene pares de nombres de cabecera/valores de cabecera
res.statusinteger que contiene el código de respuesta HTTP recibido del servidor
res.timingsobject que contiene información de tiempo HTTP para la solicitud en ms
res.timings.blocked= http_req_blocked
res.timings.connecting= http_req_connecting
res.timings.tls_handshaking= http_req_tls_handshaking
res.timings.sending= http_req_sending
res.timings.waiting= http_req_waiting
res.timings.receiving= http_req_receiving
res.timings.duration= http_req_duration

Métricas personalizadas

También puede crear sus propias métricas, que se reportan al final de una prueba de carga, al igual que los tiempos HTTP:

trend.js
1import http from 'k6/http';
2import { Trend } from 'k6/metrics';
3
4let myTrend = new Trend('waiting_time');
5
6export default function () {
7 let r = http.get('https://httpbin.org');
8 myTrend.add(r.timings.waiting);
9}

El código anterior creará una métrica de tendencia llamada "waiting_time" y se referirá a ella en el código utilizando el nombre de variable myTrend. Las métricas personalizadas serán reportadas al final de una prueba. Así es como podría verse la salida:

custom metrics

Tipos de métricas

Todas las métricas (tanto las incorporadas como las personalizadas) tienen un tipo. Los cuatro tipos de métricas diferentes en k6 son:

Metric typeDescription
CounterUna métrica que suma los valores añadidos de forma acumulativa.
GaugeUna métrica que almacena los valores mínimos, máximos y últimos añadidos.
RateUna métrica que registra el porcentaje de valores añadidos que son distintos de cero.
TrendUna métrica que permite calcular estadísticas sobre los valores añadidos (mínimo, máximo, media y percentiles)..

All values added to a custom metric can optionally be tagged which can be useful when analysing the test results.

Todos los valores añadidos a una métrica personalizada pueden ser opcionalmente etiquetados (tags), lo que puede ser útil al analizar los resultados de las pruebas.

Counter (métrica acumulativa)

counter.js
1import { Counter } from 'k6/metrics';
2
3let myCounter = new Counter('my_counter');
4
5export default function () {
6 myCounter.add(1);
7 myCounter.add(2);
8}

El código anterior generará la siguiente salida:

counter output

El valor de my_counter será 3 (si se ejecuta una sola iteración, es decir, sin especificar --iterations o --duration).

Tenga en cuenta que actualmente no hay forma de acceder al valor de ninguna métrica personalizada desde JavaScript. Tenga en cuenta también que los contadores que tienen valor cero (0) al final de una prueba son un caso especial - NO se imprimirán en el resumen del stdout.

Gauge (mantenga sólo el último valor)

gauge.js
1import { Gauge } from 'k6/metrics';
2
3let myGauge = new Gauge('my_gauge');
4
5export default function () {
6 myGauge.add(3);
7 myGauge.add(1);
8 myGauge.add(2);
9}

El código anterior dará como resultado una salida como ésta:

gauge output

El valor de my_gauge será 2 al final de la prueba. Al igual que con la métrica Counter anterior, un Gauge con valor cero (0) NO se imprimirá en el resumen stdout al final de la prueba.

Trend (recolecta las estadísticas de la tendencia (mín/máx/avg/percentiles) para una serie de valores)

trend.js
1import { Trend } from 'k6/metrics';
2
3let myTrend = new Trend('my_trend');
4
5export default function () {
6 myTrend.add(1);
7 myTrend.add(2);
8}

El código anterior hará que k6 imprima una salida como esta:

trend output

Una métrica de tendencia es un contenedor que contiene un conjunto de valores de muestra, y al que podemos pedirle que imprima estadísticas (mínimo, máximo, media, mediana o percentiles) sobre esas muestras. Por defecto, k6 imprimirá la media, el mínimo, el máximo, la mediana, el percentil 90 y el percentil 95.

Rate (realiza el tracking de la cuenta del porcentaje de valores de una serie que son distintos de cero)

rate.js
1import { Rate } from 'k6/metrics';
2
3let myRate = new Rate('my_rate');
4
5export default function () {
6 myRate.add(true);
7 myRate.add(false);
8 myRate.add(1);
9 myRate.add(0);
10}

El código anterior hará que k6 imprima una salida como esta:

rate output

El valor de my_rate al final de la prueba será del 50%, lo que indica que la mitad de los valores añadidos a la métrica eran distintos de cero.

Notas

  • las métricas personalizadas sólo se recogen de los hilos de la VU al final de una iteración de la VU, lo que significa que para los scripts de larga duración, es posible que no vea ninguna métrica personalizada hasta que haya pasado un tiempo de la prueba.

Gráficos métricos en k6 Resultados de la nube

Si utiliza k6 Cloud, tendrá acceso a todas las métricas de las pruebas en la pestaña Analysis. Puede utilizar esta pestaña para analizar y comparar más a fondo los datos de los resultados de las pruebas, para buscar correlaciones significativas en sus datos.

k6 Cloud Analysis Tab