Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

qryn k6 tests running in github actions

NotificationsYou must be signed in to change notification settings

metrico/qryn-bench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

k6 for qryn

Test and Bencharmking setup forqryn usingk6

Pre-requisites

Download the latestk6 binary with built-in Prometheus and Loki support:

wget -O k6 https://github.com/metrico/qryn-bench/releases/download/latest/k6chmod +x k6

Test Scripts

This repository provides scripts to test qryn's ownLoki,Prometheus andTempo APIs

Prometheus

Theprometheus/qryn-loadtest.js script can be configured using the following environment variables:

Environment variableRequiredDefault valueDescription
K6_WRITE_HOSTNAMEYesqryn hostname to connect to on the write path.
K6_READ_HOSTNAMEYesqryn hostname to connect to on the read path.
K6_SCHEMEhttpThe protocol scheme used for requests.
K6_USERNAME''qryn username to use for HTTP bearer authentication.
K6_WRITE_TOKEN''Authentication token to use for HTTP bearer authentication on requests to write path.
K6_READ_TOKEN''Authentication token to use for HTTP bearer authentication on requests to read path.
K6_WRITE_REQUEST_RATE1Number of remote write requests to send everyK6_SCRAPE_INTERVAL_SECONDS.
K6_WRITE_SERIES_PER_REQUEST1000Number of series per remote write request.
K6_READ_REQUEST_RATE1Number of query requests per second.
K6_DURATION_MIN720Duration of the load test in minutes (including ramp up and down).
K6_RAMP_UP_MIN0Duration of the ramp up period in minutes.
K6_RAMP_DOWN_MIN0Duration of the ramp down period in minutes.
K6_SCRAPE_INTERVAL_SECONDS20Simulated Prometheus scrape interval in seconds.
K6_HA_REPLICAS1Number of HA replicas to simulate (use 1 for no HA).
K6_HA_CLUSTERS1Number of HA clusters to simulate.
K6_TENANT_ID''Tenant ID used for load test to read metrics from and write metrics to.

For example, if qryn is running onlocalhost:3100 you can run a small scale Prometheus test with this command:

./k6 run prometheus/qryn-loadtest.js \    -e K6_WRITE_HOSTNAME="localhost:3100" \    -e K6_READ_HOSTNAME="localhost:3100" \    -e K6_DURATION_MIN="1"
✓ write worked █ instant query low cardinality   ✓ expected request status to equal 200   ✓ has valid json body   ✓ expected status field to equal 'success'   ✓ expected data.resultType field to equal 'vector' █ instant query high cardinality   ✓ expected request status to equal 200   ✓ has valid json body   ✓ expected status field to equal 'success'   ✓ expected data.resultType field to equal 'vector' █ range query   ✓ expected request status to equal 200   ✓ has valid json body   ✓ expected status field is 'success' to equal 'success'   ✓ expected resultType is 'matrix' to equal 'matrix' checks.....................................................: 100.00% ✓ 730      ✗ 0    ✓ { type:read }............................................: 0.00%   ✓ 0        ✗ 0    ✓ { type:write }...........................................: 100.00% ✓ 2        ✗ 0    data_received..............................................: 50 kB   828 B/s data_sent..................................................: 52 kB   868 B/s group_duration.............................................: avg=44.47ms min=17.98ms med=38.09ms max=118.21ms p(90)=79.44ms  p(95)=85.7ms   http_req_blocked...........................................: avg=36.54s min=1.9s   med=4.2s   max=478.51s p(90)=194.95s p(95)=211.74s http_req_connecting........................................: avg=22.36s min=0s      med=0s      max=413.4s  p(90)=134.06s p(95)=147.41s http_req_duration..........................................: avg=41.04ms min=13.99ms med=34.49ms max=113.76ms p(90)=75.81ms  p(95)=86.35ms    { expected_response:true }...............................: avg=40.45ms min=13.99ms med=34.36ms max=113.76ms p(90)=75.32ms  p(95)=81.19ms  ✓ { type:read }............................................: avg=40.45ms min=13.99ms med=34.36ms max=113.76ms p(90)=75.32ms  p(95)=81.19ms  ✓ { url:http://localhost:3100/api/v1/prom/remote/write }...: avg=0s      min=0s      med=0s      max=0s       p(90)=0s       p(95)=0s       http_req_failed............................................: 0.00%    ✓ 0        ✗ 184  http_req_receiving.........................................: avg=67.15s min=22.35s med=63.78s max=823.99s p(90)=94.96s  p(95)=105.85s http_req_sending...........................................: avg=26.83s min=8.84s  med=21.15s max=95.77s  p(90)=44.87s  p(95)=67.64s  http_req_tls_handshaking...................................: avg=0s      min=0s      med=0s      max=0s       p(90)=0s       p(95)=0s       http_req_waiting...........................................: avg=40.95ms min=13.88ms med=34.42ms max=113.65ms p(90)=75.75ms  p(95)=86.29ms  http_reqs..................................................: 184     3.065262/s iteration_duration.........................................: avg=45.23ms min=18.14ms med=38.63ms max=118.48ms p(90)=80.37ms  p(95)=88.63ms  iterations.................................................: 184     3.065262/s vus........................................................: 0       min=0      max=0  vus_max....................................................: 26      min=26     max=26

Assuming qryn is scaled up appropriately and you have enough k6 workers capacity, you can load test qryn with 1 billion active series running this command:

./k6 run lprometheus/qryn-loadtest.js \    -e K6_WRITE_HOSTNAME="localhost:3100" \    -e K6_READ_HOSTNAME="localhost:3100" \    -e K6_WRITE_REQUEST_RATE="50000" \    -e K6_WRITE_SERIES_PER_REQUEST="20000" \    -e K6_READ_REQUEST_RATE="200" \    -e RAMP_UP_MIN="2"


Loki

Theloki/qryn-loki-loadtest.js script can be configured using the following environment variables:

Environment variableRequiredDefault valueDescription
K6_LOKI_HOSTNAMENohttp://localhost:3100Hostname for the qryn instance or other logql API endpoint.
K6_BYTESNo1024Size in Bytes for each request.
K6_VUSNo10Number of users to simulate
K6_ITERACTIONSNo10Number of user interactions to simulate

If qryn is running onlocalhost:3100 you can run a small Loki scale test with this command:

./k6 run loki/qryn-loki-loadtest.js \    -e K6_LOKI_HOSTNAME="http://localhost:3100"
✓ successful write ✓ successful instant query ✓ successful range query checks............................: 100.00% ✓ 300          ✗ 0    data_received.....................: 23 MB   727 kB/s data_sent.........................: 66 MB   2.1 MB/s http_req_blocked..................: avg=1.23ms   min=1.7s   med=3.9s    max=80.93ms  p(90)=7s      p(95)=8.75s  http_req_connecting...............: avg=1.04ms   min=0s      med=0s       max=78.74ms  p(90)=0s       p(95)=0s      http_req_duration.................: avg=498.42ms min=43.55ms med=426.13ms max=1.68s    p(90)=971.43ms p(95)=1.1s      { expected_response:true }......: avg=498.42ms min=43.55ms med=426.13ms max=1.68s    p(90)=971.43ms p(95)=1.1s    http_req_failed...................: 0.00%   ✓ 0            ✗ 300  http_req_receiving................: avg=14.53ms  min=17.9s  med=2.3ms    max=202.33ms p(90)=47.75ms  p(95)=72.78ms http_req_sending..................: avg=3.49ms   min=9.29s  med=21.05s  max=97.67ms  p(90)=9ms      p(95)=20.08ms http_req_tls_handshaking..........: avg=0s       min=0s      med=0s       max=0s       p(90)=0s       p(95)=0s      http_req_waiting..................: avg=480.39ms min=34.73ms med=406.13ms max=1.68s    p(90)=963.47ms p(95)=1.1s    http_reqs.........................: 300     9.628512/s iteration_duration................: avg=3.02s    min=1.39s   med=3.12s    max=4.68s    p(90)=4.33s    p(95)=4.43s   iterations........................: 100     3.209504/s loki_bytes_processed_per_second...: avg=0 B      min=0 B     med=0 B      max=0 B      p(90)=0 B      p(95)=0 B     loki_bytes_processed_total........: 0 B     0 B/s loki_client_lines.................: 925068  29690.093291/s loki_client_uncompressed_bytes....: 158 MB  5.1 MB/s loki_lines_processed_per_second...: avg=0        min=0       med=0        max=0        p(90)=0        p(95)=0       loki_lines_processed_total........: 0       0/s vus...............................: 2       min=2          max=10 vus_max...........................: 10      min=10         max=10


Tempo

Thetempo/qryn-tempo-template.js script can be configured using the following environment variables:

Environment variableRequiredDefault valueDescription
K6_TEMPO_HOSTNAMENohttp://localhost:3100Hostname for the qryn instance or other Tempo API endpoint.
K6_DURATION_MINUTESNo1Test duration in minutes
K6_VUSNo10Number of users to simulate
K6_ITERACTIONSNo10Number of user interactions to simulate

If qryn is running onlocalhost:3100 you can run a small scale Tempo test with this command:

./k6-tracing run tempo/qryn-tempo-template.js \    -e K6_TEMPO_ENDPOINT="http://localhost:3100"
 █ tempo_query   ✓ expected request status to equal 200   ✓ has valid json body   ✓ expected count results 10 to be above 0 █ teardown checks.........................: 100.00% ✓ 30      ✗ 0   data_received..................: 17 kB   738 B/s data_sent......................: 1.7 kB  73 B/s group_duration.................: avg=23.17ms  min=17.98ms med=24.06ms max=26.4ms   p(90)=25.44ms  p(95)=25.92ms  http_req_blocked...............: avg=78.53s  min=4.2s   med=5.85s  max=733.26s p(90)=79.62s  p(95)=406.44s http_req_connecting............: avg=50.96s  min=0s      med=0s      max=509.64s p(90)=50.96s  p(95)=280.3s  http_req_duration..............: avg=18.11ms  min=13.87ms med=18.21ms max=21.98ms  p(90)=20.94ms  p(95)=21.46ms    { expected_response:true }...: avg=18.11ms  min=13.87ms med=18.21ms max=21.98ms  p(90)=20.94ms  p(95)=21.46ms  http_req_failed................: 0.00%   ✓ 0       ✗ 10  http_req_receiving.............: avg=110.65s min=67.2s  med=90.55s max=219.62s p(90)=191.08s p(95)=205.35s http_req_sending...............: avg=39.24s  min=30.5s  med=36.5s  max=65.1s   p(90)=43.68s  p(95)=54.39s  http_req_tls_handshaking.......: avg=0s       min=0s      med=0s      max=0s       p(90)=0s       p(95)=0s       http_req_waiting...............: avg=17.96ms  min=13.74ms med=18.03ms max=21.87ms  p(90)=20.81ms  p(95)=21.34ms  http_reqs......................: 10      0.43013/s iteration_duration.............: avg=2.11s    min=23.3s  med=1.02s   max=5.02s    p(90)=4.02s    p(95)=4.52s    iterations.....................: 10      0.43013/s vus............................: 1       min=1     max=1 vus_max........................: 1       min=1     max=1


[8]ページ先頭

©2009-2025 Movatter.jp