Skip to content

scrabblett/k6-prometheus-example

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k6 + Prometheus + Grafana для Swagger PetStore

Минимальный пример нагрузочного теста на публичный API PetStore Swagger с отправкой метрик из k6 в Prometheus и просмотром в Grafana.

В метрики также добавляются пользовательские теги запуска, чтобы можно было разделять прогоны в Grafana:

  • release_tag
  • run_date
  • test_suite
  • node_id

Что внутри

  • tests/petstore.js — сценарий k6 с фиксированным общим 10 RPS (по 5 RPS на каждый GET):
    • GET /pet/findByStatus?status=available
    • GET /store/inventory
  • docker-compose.yml — поднимает Prometheus и Grafana
  • prometheus/prometheus.yml — базовый конфиг Prometheus
  • grafana/provisioning/... — автоматическое подключение datasource и стартового dashboard
  • grafana/dashboards/k6-overview.json — адаптированная версия dashboard 21825 под Prometheus

Требования

  • установленный Docker / Docker Desktop
  • установленный k6

Если k6 еще не установлен:

brew install k6

Запуск

  1. Поднять Prometheus и Grafana:
docker compose up -d
  1. Запустить тест и отправлять метрики в Prometheus:
RELEASE_TAG=release-1.2.3 \
RUN_DATE=11.04 \
TEST_SUITE=petstore-smoke \
NODE_ID=node-1 \
K6_PROMETHEUS_RW_TREND_STATS=count,min,max,avg,med,p(25),p(50),p(75),p(80),p(85),p(90),p(95),p(99) \
k6 run \
  --out experimental-prometheus-rw=http://localhost:9090/api/v1/write \
  tests/petstore.js
  1. Открыть интерфейсы:
  • Prometheus: http://localhost:9090
  • Grafana: http://localhost:3000
  • логин / пароль Grafana: admin / admin

Что смотреть в Grafana

После старта контейнеров и запуска теста будет автоматически доступен dashboard k6 Load Testing Results Simple filters (Prometheus).

Вверху dashboard появятся фильтры:

  • Release
  • Run Date
  • Suite
  • Node

Это значения из тегов k6, которые приходят в Prometheus как labels.

Дополнительно доступны фильтры, повторяющие оригинальный dashboard 21825:

  • Measurement
  • scenario
  • URL
  • name

Важно: для этого dashboard нужен расширенный K6_PROMETHEUS_RW_TREND_STATS, иначе панели с avg, med, p95, p99 и другими percentiles будут пустыми.

Если нужно дополнительно смотреть метрики руками в Explore:

sum(rate(k6_http_reqs_total{release_tag="release-1.2.3",run_date="11.04"}[1m]))
sum(k6_vus{release_tag="release-1.2.3",run_date="11.04"})
k6_http_req_failed_rate

Полезные замечания

  • Публичный petstore.swagger.io — это демо-сервис, он может отвечать нестабильно.
  • Если нужен полностью детерминированный пример, следующий шаг — поднять локальный mock PetStore и гонять k6 в него.
  • Если RUN_DATE не передать явно, скрипт сам проставит значение в формате MM.DD.
  • Базовый URL можно переопределить:
PETSTORE_BASE_URL=https://petstore.swagger.io/v2 \
RELEASE_TAG=release-1.2.3 \
RUN_DATE=11.04 \
TEST_SUITE=petstore-smoke \
NODE_ID=node-1 \
K6_PROMETHEUS_RW_TREND_STATS=count,min,max,avg,med,p(25),p(50),p(75),p(80),p(85),p(90),p(95),p(99) \
k6 run --out experimental-prometheus-rw=http://localhost:9090/api/v1/write tests/petstore.js

Distributed execution (2 контейнера)

Для распределенного запуска добавлены 2 сервиса k6 (k6-node-1, k6-node-2) с разными NODE_ID и сегментами выполнения:

  • k6-node-1 -> --execution-segment 0:1/2
  • k6-node-2 -> --execution-segment 1/2:1

Сейчас тест настроен на фиксированный общий 10 RPS (два сценария по 5 RPS). При запуске в 2 контейнера через execution segments нагрузка делится между нодами (в среднем около 5 RPS на ноду).

Запуск:

docker compose up -d prometheus grafana
docker compose --profile load up --abort-on-container-exit k6-node-1 k6-node-2

После прогона в Grafana можно фильтровать метрики по переменной Node (node_id) и смотреть вклад каждой ноды отдельно.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors