본문 바로가기
Develop/Feature

Grafana K6

by 코젼 2024. 8. 2.
728x90
반응형

 

성능 테스트를 위한 오픈 소스 도구로, 쉽게 스크립트를 작성하고 실행할 수 있다.

 

MacOS k6 설치

brew install k6

 

script.js 를 작성한다.

import http from 'k6/http';
import { sleep } from 'k6'; export const options = { vus: 100, duration: '30s' };

export default function() {
	http.get('http://localhost:8080/concert');

	// const url = 'http://localhost:8080/waiting-queue/join';
	// const data = {
		// userId: "test_user",
		// seriesId: "test_series"
	// };
	// http.post(url, JSON.stringify(data), {
		// headers: { 'Content-Type': 'application/json' },
	// });
	sleep(1);
}

 

실행

k6 run script.js

 

서버의 성능과 부하 처리 능력을 평가하는 데 유용하다.

응답 시간, 요청 실패율, 데이터 송수신 속도 등 다양한 메트릭을 통해 서버가 얼마나 효율적으로 작동하는지 분석할 수 있다.

 data_received..................: 2.1 MB 70 kB/s
 data_sent......................: 966 kB 32 kB/s
 http_req_blocked...............: avg=407.71µs min=0s    med=1µs    max=101.22ms p(90)=5µs     p(95)=1.22ms
 http_req_connecting............: avg=383.73µs min=0s    med=0s     max=101.19ms p(90)=0s      p(95)=1.19ms
 http_req_duration..............: avg=16.5ms   min=1ms   med=8.53ms max=161.16ms p(90)=39.94ms p(95)=58.37ms
   { expected_response:true }...: avg=16.77ms  min=1ms   med=8.68ms max=161.16ms p(90)=40.88ms p(95)=59.59ms
 http_req_failed................: 2.48%  ✓ 261        ✗ 10239
 http_req_receiving.............: avg=177.62µs min=0s    med=88µs   max=15.34ms  p(90)=267µs   p(95)=483µs
 http_req_sending...............: avg=15.56µs  min=2µs   med=5µs    max=9.84ms   p(90)=18µs    p(95)=27µs
 http_req_tls_handshaking.......: avg=0s       min=0s    med=0s     max=0s       p(90)=0s      p(95)=0s
 http_req_waiting...............: avg=16.31ms  min=944µs med=8.27ms max=160.91ms p(90)=39.78ms p(95)=58.08ms
 http_reqs......................: 10500  343.242101/s
 iteration_duration.............: avg=1.01s    min=1s    med=1s     max=1.16s    p(90)=1.04s   p(95)=1.06s
 iterations.....................: 10500  343.242101/s
 vus............................: 350    min=350      max=350
 vus_max........................: 350    min=350      max=350

 

1. data_received 및 data_sent

 

data_received: 테스트 동안 클라이언트가 서버로부터 받은 데이터의 총량을 나타냅니다. 여기서는 2.1 MB를 받았고, 평균 속도는 70 kB/s입니다.

data_sent: 테스트 동안 클라이언트가 서버로 전송한 데이터의 총량을 나타냅니다. 여기서는 966 kB를 전송했고, 평균 속도는 32 kB/s입니다.

 

2. http_req_blocked

 

http_req_blocked: HTTP 요청이 전송되기 전에 블로킹(차단)된 시간입니다.

avg=407.71µs: 평균 블로킹 시간은 407.71 마이크로초입니다.

min=0s: 최소 블로킹 시간은 0초입니다.

med=1µs: 중앙값 블로킹 시간은 1 마이크로초입니다.

max=101.22ms: 최대 블로킹 시간은 101.22 밀리초입니다.

p(90)=5µs: 90%의 요청이 5 마이크로초 이하의 블로킹 시간을 가집니다.

p(95)=1.22ms: 95%의 요청이 1.22 밀리초 이하의 블로킹 시간을 가집니다.

 

3. http_req_connecting

 

http_req_connecting: HTTP 요청이 서버와 연결을 수립하는 데 걸린 시간입니다.

avg=383.73µs: 평균 연결 시간은 383.73 마이크로초입니다.

min=0s: 최소 연결 시간은 0초입니다.

med=0s: 중앙값 연결 시간은 0초입니다.

max=101.19ms: 최대 연결 시간은 101.19 밀리초입니다.

p(90)=0s: 90%의 요청이 0초 이하의 연결 시간을 가집니다.

p(95)=1.19ms: 95%의 요청이 1.19 밀리초 이하의 연결 시간을 가집니다.

 

4. http_req_duration

 

http_req_duration: HTTP 요청의 전체 처리 시간입니다.

avg=16.5ms: 평균 요청 시간은 16.5 밀리초입니다.

min=1ms: 최소 요청 시간은 1밀리초입니다.

med=8.53ms: 중앙값 요청 시간은 8.53 밀리초입니다.

max=161.16ms: 최대 요청 시간은 161.16 밀리초입니다.

p(90)=39.94ms: 90%의 요청이 39.94 밀리초 이하의 처리 시간을 가집니다.

p(95)=58.37ms: 95%의 요청이 58.37 밀리초 이하의 처리 시간을 가집니다.

 

5. http_req_failed

 

http_req_failed: 요청 실패 비율과 실패 횟수입니다.

2.48%: 총 요청 중 2.48%가 실패했습니다.

✓ 261: 261개의 요청이 성공했습니다.

✗ 10239: 10,239개의 요청이 실패했습니다.

 

6. http_req_receiving

 

http_req_receiving: 서버가 응답을 클라이언트에 전송하는 데 걸린 시간입니다.

avg=177.62µs: 평균 수신 시간은 177.62 마이크로초입니다.

min=0s: 최소 수신 시간은 0초입니다.

med=88µs: 중앙값 수신 시간은 88 마이크로초입니다.

max=15.34ms: 최대 수신 시간은 15.34 밀리초입니다.

p(90)=267µs: 90%의 요청이 267 마이크로초 이하의 수신 시간을 가집니다.

p(95)=483µs: 95%의 요청이 483 마이크로초 이하의 수신 시간을 가집니다.

 

7. http_req_sending

 

http_req_sending: 클라이언트가 요청을 서버에 전송하는 데 걸린 시간입니다.

avg=15.56µs: 평균 전송 시간은 15.56 마이크로초입니다.

min=2µs: 최소 전송 시간은 2 마이크로초입니다.

med=5µs: 중앙값 전송 시간은 5 마이크로초입니다.

max=9.84ms: 최대 전송 시간은 9.84 밀리초입니다.

p(90)=18µs: 90%의 요청이 18 마이크로초 이하의 전송 시간을 가집니다.

p(95)=27µs: 95%의 요청이 27 마이크로초 이하의 전송 시간을 가집니다.

 

8. http_req_tls_handshaking

 

http_req_tls_handshaking: TLS 핸드셰이킹에 걸린 시간입니다.

avg=0s: 평균 핸드셰이킹 시간은 0초입니다.

min=0s: 최소 핸드셰이킹 시간은 0초입니다.

med=0s: 중앙값 핸드셰이킹 시간은 0초입니다.

max=0s: 최대 핸드셰이킹 시간은 0초입니다.

p(90)=0s: 90%의 요청이 0초 이하의 핸드셰이킹 시간을 가집니다.

p(95)=0s: 95%의 요청이 0초 이하의 핸드셰이킹 시간을 가집니다.

이 값이 0s인 이유는 테스트가 HTTP (비 HTTPS)에서 수행되었기 때문입니다.

 

9. http_req_waiting

 

http_req_waiting: 서버가 응답을 준비하는 데 걸린 시간입니다 (HTTP 요청 후 대기 시간).

avg=16.31ms: 평균 대기 시간은 16.31 밀리초입니다.

min=944µs: 최소 대기 시간은 944 마이크로초입니다.

med=8.27ms: 중앙값 대기 시간은 8.27 밀리초입니다.

max=160.91ms: 최대 대기 시간은 160.91 밀리초입니다.

p(90)=39.78ms: 90%의 요청이 39.78 밀리초 이하의 대기 시간을 가집니다.

p(95)=58.08ms: 95%의 요청이 58.08 밀리초 이하의 대기 시간을 가집니다.

 

10. http_reqs

 

http_reqs: 전체 HTTP 요청 수입니다.

10500: 총 10,500개의 요청이 수행되었습니다.

343.242101/s: 초당 평균 요청 수입니다.

 

11. iteration_duration

 

iteration_duration: 각 가상 사용자의 작업(iteration) 실행 시간입니다.

avg=1.01s: 평균 작업 시간은 1.01초입니다.

min=1s: 최소 작업 시간은 1초입니다.

med=1s: 중앙값 작업 시간은 1초입니다.

max=1.16s: 최대 작업 시간은 1.16초입니다.

p(90)=1.04s: 90%의 작업이 1.04초 이하의 시간을 가집니다.

p(95)=1.06s: 95%의 작업이 1.06초 이하의 시간을 가집니다.

 

12. iterations

 

iterations: 총 반복(iterations) 수입니다.

10500: 총 10,500회의 반복이 수행되었습니다.

343.242101/s: 초당 평균 반복 수입니다.

 

13. vus (Virtual Users)

 

vus: 테스트 동안 활성화된 가상 사용자의 수입니다.

350: 총 350명의 가상 사용자가 동시에 테스트를 수행하고 있습니다.

min=350: 최소 가상 사용자 수는 350입니다.

max=350: 최대 가상 사용자 수는 350입니다.

 

14. vus_max (Maximum Virtual Users)

 

vus_max: 테스트 중 최대 가상 사용자 수입니다.

350: 테스트 중 최대 가상 사용자 수는 350입니다.

min=350: 최소 최대 가상 사용자 수는 350입니다.

max=350: 최대 최대 가상 사용자 수는 350입니다.

728x90
반응형

'Develop > Feature' 카테고리의 다른 글

[Redis] Redisson vs Lettuce vs Spring data redis  (0) 2024.07.31
Redis  (0) 2024.07.23
[Docker] Database docker-compose 구축(mysql, redis)  (0) 2024.07.22
Filter, Interceptor  (0) 2024.07.16
Mac Node.js 설치  (0) 2024.06.24

댓글