![](https://seokwoo.kim/wp-content/uploads/2023/03/k6-grafna-1.png)
K6 + Grafana 를 이용한 성능 테스트
k6란?
Grafana k6는 엔지니어링 팀이 성능 테스트를 쉽고 생산적으로 수행할 수 있도록 해주는 오픈 소스 부하 테스트 도구입니다. k6은 무료이고 개발자 중심적이며 확장 가능합니다.
k6을 사용하면 시스템의 안정성과 성능을 테스트하고 성능 회귀와 문제를 조기에 파악할 수 있습니다. k6은 확장 가능한 탄력적이고 성능이 뛰어난 애플리케이션을 구축하는 데 도움이 됩니다.
k6은 Grafana Labs 와 커뮤니티 에서 개발했습니다 .
K6 설치하기
sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6
K6 실행하기
K6는 k6 run script.js 형식으로 실행이 된다. script.js에 필요한 테스트 내용을 script로 작성하여 실행하ㅡㄴ 방법으로 동작 한다.
k6 run script.js
실행이 완료되면 end summary가 다음과 같이 출력 된다.
![](https://www.seankim.life/wp-content/uploads/2023/03/image-5-1024x583.png)
어떤게 테스트 할까? 고민을 줄여주기 위해서 홈페이지에 몇가지 sample script가 있으니 참고 하면 쉽게 작성을 할 수 있다.
![](https://www.seankim.life/wp-content/uploads/2023/03/image-2-1024x471.png)
stress test 예제 script 이다.
import http from "k6/http";
import { sleep } from "k6";
export const options = {
scenarios: {
stress: {
executor: "ramping-arrival-rate",
preAllocatedVUs: 500,
timeUnit: "1s",
stages: [
{ duration: "2m", target: 10 }, // below normal load
{ duration: "5m", target: 10 },
{ duration: "2m", target: 20 }, // normal load
{ duration: "5m", target: 20 },
{ duration: "2m", target: 30 }, // around the breaking point
{ duration: "5m", target: 30 },
{ duration: "2m", target: 40 }, // beyond the breaking point
{ duration: "5m", target: 40 },
{ duration: "10m", target: 0 }, // scale down. Recovery stage.
],
},
},
};
export default function () {
const BASE_URL = "https://test-api.k6.io"; // make sure this is not production
const responses = http.batch([
["GET", `${BASE_URL}/public/crocodiles/1/`],
["GET", `${BASE_URL}/public/crocodiles/2/`],
["GET", `${BASE_URL}/public/crocodiles/3/`],
["GET", `${BASE_URL}/public/crocodiles/4/`],
]);
}
스트레스 테스트의 VU 차트는 다음과 같이 동작 합니다.
![](https://www.seankim.life/wp-content/uploads/2023/03/image-3.png)
이 구성은 2분마다 사용자 100명씩 부하를 증가시키고 5분 동안 이 수준을 유지합니다. 그리고 마지막에 시스템이 부하를 0으로 점진적으로 줄이는 복구 단계를 포함했습니다.
이 script를 테스트에 이용하면 인프라가 자동 확장되도록 구성하는 경우 이 테스트는 다음을 결정하는 데 도움이 됩니다.
- Auto Scaling 메커니즘이 로드 증가에 얼마나 빨리 반응하는지.
- 조정 이벤트 중에 실패가 발생하는지 여부.
K6를 Grfana와 연동하여 조금더 그래픽하게 보려면 InfluxDB를 추가로 설치 하여야 합니다.
당근 Grafana 서버도 있어야 하죠 ㅋ___ㅋ
InfluxDB 설치
apt install influxdb influxdb-client -y
K6을 InfluxDB와 함께 실행
k6 run -o influxdb=http://localhost:8086/mydb script.js
Grafana에 마음에 드는 K6 Dashboard 설치를 한다. https://grafana.com/dashboards?search=k6 으로 이동하세요.
![](https://www.seankim.life/wp-content/uploads/2023/03/image-6-1024x652.png)
Grafana 에 InfluxDB를 데이터 소스로 사용하도록 지시해야 합니다. http://localhost:3000을 열고 데이터 소스를 구성합니다.
![스크린샷 2018-03-22, 16.39.36.png 스크린샷 2018-03-22, 16.39.36.png](https://k6.io/blog/static/e3423510fdd4186f9fd538947db0c9a4/7842b/Screen_Shot_2018-03-22_at_16.39.36.png)
InfluxDB의 기본 주소는 http://localhost:8086 이며 k6에게 동일한 데이터베이스를 사용하도록 지시하는 한 존재하지 않는 데이터베이스의 이름을 입력할 수 있습니다(따라서 k6는 처음 시도할 때 생성합니다. 데이터를 저장합니다). 다시 말하지만, docker-compose 설정을 사용하는 경우에는 이 단계가 필요하지 않습니다 . 이 경우 Grafana는 올바른 InfluxDB 서버 및 데이터베이스를 데이터 소스로 사용하도록 미리 구성됩니다.