콘텐츠로 이동

K6


K6는 API 및 시스템 부하 테스트를 위한 명령줄 도구입니다. 이 통합은 K6의 experimental-prometheus-rw 출력을 사용하여 부하 테스트 메트릭을 DataKit의 Prometheus Remote Write 엔드포인트에 기록한 다음 Guance에 보고합니다. K6는 상시 실행 서비스가 필요하지 않으며, 부하 생성 머신에서 DataKit에 접근할 수 있으면 됩니다.

설정

사전 요구 사항

  • K6를 설치하고 k6 version이 정상적으로 실행되는지 확인합니다.
  • DataKit을 설치하고 부하 생성 머신에서 DataKit의 9529 포트에 접근할 수 있는지 확인합니다.
  • DataKit에서 prom_remote_write 수집기를 활성화합니다.
  • 실행마다 고유한 benchmark_idtestid를 설정하여 서로 다른 부하 테스트의 데이터가 섞이지 않도록 합니다.

DataKit 설정

DataKit 설치 디렉터리의 conf.d/prom 아래에 다음과 같이 prom_remote_write.conf를 생성합니다.

[[inputs.prom_remote_write]]
  path = "/prom_remote_write"
  methods = ["PUT", "POST"]

  # K6 메트릭은 k6_로 시작합니다. k6 measurement에 기록하고 원래 메트릭 이름을 유지합니다.
  job_as_measurement = false
  measurement_name = "k6"
  keep_exist_metric_name = true

설정을 완료한 후 변경 사항을 적용하려면 DataKit을 다시 시작합니다.

K6 설정

Remote Write URL이 DataKit을 가리키도록 하고 experimental-prometheus-rw 출력을 사용합니다.

export K6_PROMETHEUS_RW_SERVER_URL="http://<datakit-ip>:9529/prom_remote_write"
export K6_PROMETHEUS_RW_PUSH_INTERVAL="5s"
export K6_PROMETHEUS_RW_TREND_STATS="p(95),p(99),min,max"

k6 run \
  -o experimental-prometheus-rw \
  --tag benchmark_id="k6-demo-20260917" \
  --tag testid="baseline-r300-rep1" \
  script.js

DataKit 엔드포인트에 HTTP Basic Authentication이 활성화되어 있으면 K6_PROMETHEUS_RW_USERNAMEK6_PROMETHEUS_RW_PASSWORD도 설정합니다. 자격 증명은 시크릿 관리 시스템을 통해 주입하고 실제 비밀번호를 스크립트나 명령 기록에 저장하지 마십시오.

K6 스크립트 예시

다음 스크립트는 일정한 도착률로 10분 동안 실행됩니다. 대상 URL을 실제 테스트 엔드포인트로 바꾸고 서비스 처리 용량에 맞게 VU 수를 조정하십시오.

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

export const options = {
  scenarios: {
    steady_load: {
      executor: 'constant-arrival-rate',
      rate: 300,
      timeUnit: '1s',
      duration: '10m',
      preAllocatedVUs: 100,
      maxVUs: 300,
    },
  },
};

export default function () {
  const response = http.get(`${__ENV.TARGET_URL}/health`);
  check(response, {
    'HTTP status is 200': (res) => res.status === 200,
  });
}

데이터 검증

  1. K6 콘솔을 확인하여 테스트 중 HTTP 오류나 Remote Write 출력 오류가 발생하지 않았는지 확인합니다.
  2. Guance에서 메트릭 쿼리를 열고 k6 measurement를 선택한 다음 benchmark_idtestid로 필터링합니다.
  3. 테스트 중 총 요청 수, 실패율, 평균 소요 시간, P95, P99, 최대 VU가 지속적으로 보고되는지 확인합니다.
  4. 요청률은 누적 요청 수에서 계산해야 하며 누적 합계를 RPS로 직접 사용해서는 안 됩니다. 쿼리 윈도우는 K6_PROMETHEUS_RW_PUSH_INTERVAL보다 길어야 하며, 그렇지 않으면 요청률 그래프에 빈 지점이 생길 수 있습니다.

메트릭

K6 measurement 이름은 k6입니다. 다음 표는 일반적인 K6 부하 테스트 메트릭과 단위 및 의미를 보여 줍니다. 소요 시간 메트릭은 밀리초 단위로 표시됩니다. 비율 메트릭의 원시 값 범위는 0에서 1이며 백분율로 표시할 때 100을 곱합니다.

메트릭 단위 설명
k6_checks_rate %(원시 값: 0-1) check 성공 비율. 백분율로 표시할 때 100을 곱합니다.
k6_data_received_total bytes K6가 수신한 누적 데이터 양.
k6_data_sent_total bytes K6가 전송한 누적 데이터 양.
k6_http_req_blocked_avg ms 평균 요청 차단 시간.
k6_http_req_blocked_max ms 최대 요청 차단 시간.
k6_http_req_blocked_p90 ms 요청 차단 시간 90.
k6_http_req_blocked_p95 ms 요청 차단 시간 95.
k6_http_req_blocked_p99 ms 요청 차단 시간 99.
k6_http_req_connecting_avg ms 평균 TCP 연결 시간.
k6_http_req_connecting_max ms 최대 TCP 연결 시간.
k6_http_req_connecting_p90 ms TCP 연결 시간 90.
k6_http_req_connecting_p95 ms TCP 연결 시간 95.
k6_http_req_connecting_p99 ms TCP 연결 시간 99.
k6_http_req_duration_avg ms 평균 HTTP 요청 종단 간 시간.
k6_http_req_duration_max ms 최대 HTTP 요청 종단 간 시간.
k6_http_req_duration_p90 ms HTTP 요청 종단 간 시간 90.
k6_http_req_duration_p95 ms HTTP 요청 종단 간 시간 95.
k6_http_req_duration_p99 ms HTTP 요청 종단 간 시간 99.
k6_http_req_failed_rate %(원시 값: 0-1) HTTP 요청 실패 비율. 백분율로 표시할 때 100을 곱합니다.
k6_http_req_receiving_avg ms 평균 응답 데이터 수신 시간.
k6_http_req_receiving_max ms 최대 응답 데이터 수신 시간.
k6_http_req_receiving_p90 ms 응답 데이터 수신 시간 90.
k6_http_req_receiving_p95 ms 응답 데이터 수신 시간 95.
k6_http_req_receiving_p99 ms 응답 데이터 수신 시간 99.
k6_http_req_sending_avg ms 평균 요청 데이터 전송 시간.
k6_http_req_sending_max ms 최대 요청 데이터 전송 시간.
k6_http_req_sending_p90 ms 요청 데이터 전송 시간 90.
k6_http_req_sending_p95 ms 요청 데이터 전송 시간 95.
k6_http_req_sending_p99 ms 요청 데이터 전송 시간 99.
k6_http_req_tls_handshaking_avg ms 평균 TLS 핸드셰이크 시간.
k6_http_req_tls_handshaking_max ms 최대 TLS 핸드셰이크 시간.
k6_http_req_tls_handshaking_p90 ms TLS 핸드셰이크 시간 90.
k6_http_req_tls_handshaking_p95 ms TLS 핸드셰이크 시간 95.
k6_http_req_tls_handshaking_p99 ms TLS 핸드셰이크 시간 99.
k6_http_req_waiting_avg ms 평균 서버 응답 대기 시간.
k6_http_req_waiting_max ms 최대 서버 응답 대기 시간.
k6_http_req_waiting_p90 ms 서버 응답 대기 시간 90.
k6_http_req_waiting_p95 ms 서버 응답 대기 시간 95.
k6_http_req_waiting_p99 ms 서버 응답 대기 시간 99.
k6_http_reqs_total requests 누적 HTTP 요청 수. 요청률을 계산할 때 이 메트릭의 RATE를 사용합니다.
k6_iteration_duration_avg ms 평균 시나리오 반복 시간.
k6_iteration_duration_max ms 최대 시나리오 반복 시간.
k6_iteration_duration_p90 ms 시나리오 반복 시간 90.
k6_iteration_duration_p95 ms 시나리오 반복 시간 95.
k6_iteration_duration_p99 ms 시나리오 반복 시간 99.
k6_iterations_total iterations 누적 시나리오 반복 횟수.
k6_vus VUs 현재 VU 수.
k6_vus_max VUs 테스트 중 최대 VU 수.

모든 HTTP 메트릭에는 scenario, testid, benchmark_id 등의 태그가 포함됩니다. 요청 수준 메트릭에는 method, url, name, status, error, expected_response가 포함될 수도 있습니다. 서로 다른 부하 테스트 실행의 데이터가 집계되지 않도록 쿼리에서 최소한 benchmark_idtestid를 필터링해야 합니다.

K6_PROMETHEUS_RW_TREND_STATS에 설정되지 않은 백분위수 메트릭은 기록되지 않습니다. P90, P95 또는 P99가 필요하면 K6를 시작하기 전에 명시적으로 설정하십시오. 예: K6_PROMETHEUS_RW_TREND_STATS="p(90),p(95),p(99),min,max".

참고 자료

문서 평가

이 페이지가 도움이 되었나요?