[k6] k6 시작 및 grafana 연동

Coastby·2023년 3월 29일
1

성능테스트

목록 보기
3/4

📌 성능 테스트

○ 성능 테스트란?

  • 다양한 작업 부하에서 예상 프로세스를 잘 수행하는지 여부를 식별하기 위한 테스트
  • 주로 큰 문제를 일으킬 수 있는 문제를 초기에 감지하여 예방할 수 있도록 한다.
  • 소프트웨어 전체 성능을 떨어뜨리는 단일 구성 요소 (병목 지점) 찾기 위한 목적
  • 제품의 속도, 확장성, 안정성, 응답성 및 신뢰성을 평가

○ 목적

  • 어느 정도의 부하 를 견딜 수 있는지 알고 있다.
  • 한계치에서 병목 이 생기는 지점을 알고 있다.
  • 자원을 효율적 으로 사용한다.
  • 메모리 누수, 오류, 오버플로우 는 발생하지 않는다.
  • 최악의 상황 에서 어떤 동작을 하는지 직접 확인하였다.
  • 장애 조치와 복구 의 동작을 직접 확인하였다.

○ 성능테스트 유형

  1. 부하 테스트 (Load testing)
  • 특정 부하 값에서 시스템이 어떻게 작동하는지 알 수 있다.
  • 일정 기간 동안 예상되는 동시 사용자 수에서 시뮬레이션
  • 과부하 상태에서 시스템이 잘 작동될 때, 응답시간과 애플리케이션의 지구력을 모니터링한다.
  • 예상 응답 시간을 확인하고 잠재적인 병목 현상 식별
  1. 스트레스 테스트 (Stress testing)
  • CPU, Memory, Disk, Space 등과 같이 하드웨어 자원이 충분하지 않을 때, 소프트웨어의 안정성을 확인한다.
  • 사이트가 중단될 때까지 테스트 용량을 늘린다.
  • 예상보다 높은 트래픽을 사용하므로 오류 지점이 무엇인지 알아내고 높은 수준의 데이터 처리를 하는 방법어떻게 시스템이 정상적으로 복구되는 지 (회복성ㅇ)를 알 수 있다.
  1. 스파이크 테스트 (Spike testing)
  • 스트레스 테스트의 하위 집합
  • 단기간에 걸쳐 사용자의 급격한 변화를 반복적으로 처리할 수 있는지 판단
  1. 내구성 테스트 (Endurance testing, Soak testing)
  • 시스템의 장기적인 성능과 시간이 지난 후에 메모리 누수, 시스템 장애 또는 무작위적인 동작 (random behavior) 등의 문제를 사전에 검증
  • 장기간 사용 후 처리량과 응답 시간을 분석항여 성능 메트릭이 전체적으로 일관된지, 오류가 있는지 확인
  • 운영 상황을 시뮬레이션 하기 위해서 통합 성능테스트 부하 모델의 약 70%에 해당하는 부하 환경을 기준으로 24시간 정도 수행
  1. Scability testing
  • 사용자 부하, 트랜잭션 수, 데이터 볼륨 등과 같은 비기능 측면에서 확장할 수 있는 역량을 판단하기 위한 테스트이다.
  • 목적은 더이상 확장 (scailing)하지 못하도록 막는 '시스템의 peak'가 무엇인지 확인하는 것이다.
  1. Volume testing
  • 처리해야할 많은 양의 데이터를 가진 애플리케이션의 효율성을 확인하기 위한 테스트이다.
  • 목적은 다양한 Database volumes 하에서 애플리케이션 성능을 모니터링하는 것이다.

○ 성능테스트 항목

  1. 병목 현상
    시스템의 전체 성능에 영향을 미치는 병목 현상을 주시한다.
  2. 로딩 시간
    프로그램이 시작하는 데 필요한 시간
  3. 응답 시간
    사용자가 정보를 입력한 후 조치에 대한 응답 사이의 경과 시간
  4. 확장성
    다양한 데이터 사용 요구에 대한 적응성.

📌 툴

🛠 테스트툴

  • nGrinder - Groovy
  • JMeter
  • Locust
  • k6 - 자바스크립트

🛠 모니터링툴

  • Pinpoint
  • 프로메테우스 - 그라파나

대체로 위와 같은 테스트툴과 모니터링툴을 많이 사용하고 있었다. 현재 서비스를 하고 있는 프로젝트는 아니어서 오픈소스이고 레퍼런스가 많은 것들 위주로 찾아보았다.

테스트툴은 nGrinder가 네이버에서 만들고 국내에는 자료도 많고, 배민에서도 사용하고 있었다. 하지만 k6가 가볍게 CLI로 테스트하기 좋을 듯하여 선택하였다.

모니터링툴 역시 위와 비슷한 이유로 프로메테우스그라파나를 선택하였다. 그리고 k6도 그라파나를 이용하여 시각화할 수 있어서 그라파나 하나로 두 곳에서 오는 메트릭을 모두 확인할 수 있다는 장점도 있었다.

📌 k6로 테스트하기

1. k6 설치 (참고)

테스트툴은 굳이 인스턴스에 설치하지 않아도 되므로 로컬에 설치하였다. 맥을 사용하고 있어 아래 명령어를 사용한다.

$ brew install k6

2. 테스트 해보기 (참고)

로컬에 설치하였다면 적당한 폴더에 script.js 파일을 작성한다.

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

export default function () {
  http.get('https://[테스트하고자 하는 주소]');
  sleep(1);
}

터미널에서 아래 커맨드를 입력하면 테스트가 진행되고, 성공하면 아래와 같은 테스트 결과화면을 볼 수 있다.

$ k6 run script.js

간단히 옵션을 주기 위해서 CLI에 직접 변수를 입력할 수도 있고 스크립트 파일에 추가할 수도 있다.

  1. CLI 이용하는 경우
$ k6 run --vus 10 --duration 30s script.js
  1. script에 추가하는 경우
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 함수는 여러번 실행된다.

3. Grafana와 연동하기 (참고)

k6에서 테스트한 결과를 Grafana에서 시각화할 수 있다. 대신 이를 저장하기 위해서는 테스트 결과를 저장할 곳이 필요하다.
공식 홈페이지에서는 InfluxDB에 저장하고 그라파나가 k6 metric을 쿼리할 수 있게 하는방법을 알려준다.

1️⃣ InfluxDB 설치하기 (참고)

현재 그라파나가 프로젝트과 같은 인스턴스에 설치되어 있고, 그라파나가 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)

2️⃣ Grafana에 Data source 추가하기 (Grafana 설치)

Grafana의 설정 - Data sources 탭에서 k6를 선택 후 이름, url, database 정보를 입력한다.

3️⃣ 대시보드 구성하기

대시보드를 구성하여 k6로 테스트 실행 후 생성된 metric을 실시간으로 시각화할 수 있다. (대시보드 템플릿 적용하기)

4️⃣ 테스트 실행하기

k6 run을 하면서 아래와 같은 옵션으로 결과를 저장할 수 있다. /k6db는 위에서 그라파나에 Data source 입력할 때 Database 항목에 적은 이름과 일치해야 한다.

$ k6 run --out influxdb=http://[influxDB 설치한 주소]:8086/k6db script.js

5️⃣ 대시보드에서 결과 확인

profile
훈이야 화이팅

0개의 댓글