대체로 위와 같은 테스트툴과 모니터링툴을 많이 사용하고 있었다. 현재 서비스를 하고 있는 프로젝트는 아니어서 오픈소스이고 레퍼런스가 많은 것들 위주로 찾아보았다.
테스트툴은 nGrinder
가 네이버에서 만들고 국내에는 자료도 많고, 배민에서도 사용하고 있었다. 하지만 k6
가 가볍게 CLI로 테스트하기 좋을 듯하여 선택하였다.
모니터링툴 역시 위와 비슷한 이유로 프로메테우스
와 그라파나
를 선택하였다. 그리고 k6
도 그라파나를 이용하여 시각화할 수 있어서 그라파나 하나로 두 곳에서 오는 메트릭을 모두 확인할 수 있다는 장점도 있었다.
테스트툴은 굳이 인스턴스에 설치하지 않아도 되므로 로컬에 설치하였다. 맥을 사용하고 있어 아래 명령어를 사용한다.
$ brew install k6
로컬에 설치하였다면 적당한 폴더에 script.js
파일을 작성한다.
import http from 'k6/http';
import { sleep } from 'k6';
export default function () {
http.get('https://[테스트하고자 하는 주소]');
sleep(1);
}
터미널에서 아래 커맨드를 입력하면 테스트가 진행되고, 성공하면 아래와 같은 테스트 결과화면을 볼 수 있다.
$ k6 run script.js
간단히 옵션을 주기 위해서 CLI에 직접 변수를 입력할 수도 있고 스크립트 파일에 추가할 수도 있다.
$ k6 run --vus 10 --duration 30s script.js
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('http://test.k6.io');
sleep(1);
}
vus
: virtual users, 가상 사용자로 k6 테스트의 기본 개념이다. 기본적으로 병렬로 스크립트를 실행한다.export default function()
: 모든 테스트는 default
함수를 가지고 있다. 이 함수는 VU의 진입 포인트 (entry point)가 된다. 옵션 조건에 따라 default
함수는 여러번 실행된다.k6에서 테스트한 결과를 Grafana에서 시각화할 수 있다. 대신 이를 저장하기 위해서는 테스트 결과를 저장할 곳이 필요하다.
공식 홈페이지에서는 InfluxDB에 저장하고 그라파나가 k6 metric을 쿼리할 수 있게 하는방법을 알려준다.
현재 그라파나가 프로젝트과 같은 인스턴스에 설치되어 있고, 그라파나가 DB를 참조하기 위해서는 항상 접근이 가능해야 한다. 따라서 InfluxDB도 같은 인스턴스에 설치하였다.
apt를 이용하여 influxdb 설치한다.
$ sudo apt install influxdb
InfluxDB 서비스를 시작한다.
$ sudo service influxdb start
서비스가 잘 실행되고 있는지 확인한다.
$ sudo service influxdb status
● influxdb.service - InfluxDB is an open-source, distributed, time series database
Loaded: loaded (/lib/systemd/system/influxdb.service; enabled; vendor preset: enable>
Active: active (running)
Grafana의 설정 - Data sources 탭에서 k6를 선택 후 이름, url, database 정보를 입력한다.
대시보드를 구성하여 k6로 테스트 실행 후 생성된 metric을 실시간으로 시각화할 수 있다. (대시보드 템플릿 적용하기)
k6 run
을 하면서 아래와 같은 옵션으로 결과를 저장할 수 있다. /k6db
는 위에서 그라파나에 Data source 입력할 때 Database 항목에 적은 이름과 일치해야 한다.
$ k6 run --out influxdb=http://[influxDB 설치한 주소]:8086/k6db script.js