컴공생의 다이어리

[nGrinder] docker-compose로 환경 구성하기(Mac M3 기준) 본문

Development/기타

[nGrinder] docker-compose로 환경 구성하기(Mac M3 기준)

컴공 K 2024. 12. 1. 00:41

[nGrinder] docker-compose로 환경 구성하기

네이버에서 만든 부하 테스트 툴인 nGrinder를 로컬에 설치하지 않고 도커 환경으로 설정하고 싶다는 욕심을 품게되며.. 예상보다 긴 싸움을 하게되었다. 이 글에서는 그 결과에 대한 핵심 내용을 정리하고자 한다.

 

이 글은 24.12.01 기준 실리콘 맥 기준으로 작성된 글이기 때문에 다른 환경에서는 제대로 동작하지 않을 가능성도 있습니다.

 

최종 결과물을 미리 공유합니다.

https://drive.google.com/drive/folders/1OIv5V3Ln4872Wc-aAZwhBD_HZE-geTct?usp=sharing

 

Code-Snippet/Testing/Performace-Test/ngrinder at main · CodeDiary18-Study/Code-Snippet

프로그래밍 관련 코드 조각들. Contribute to CodeDiary18-Study/Code-Snippet development by creating an account on GitHub.

github.com

최종 디렉토리 구조

 

 

 

 nGrinder controller 설정

nGrinder는 Docker Hub에서 AMD64 기반의 칩셋 지원 이미지만 지원하기 때문에 실리콘 맥 혹은 arm 기반 윈도우를 위한 컨테이너 이미지가 지원되지 않는다. 그렇기 때문에 ngrinder 도커 이미지를 활용할 수 없었다.

 

그래서 nGrinder 깃허브에서 제공하는 nGrinder 컨트롤러 war 파일을 활용하기로 했다.

 

war 파일을 로컬에 직접 다운로드 받고나서 구성할 수도 있지만 Dockefile 구성에서 다운받도록 설정하였다.

# ngrinder-controller/Dockefile
FROM openjdk:11-slim

# WAR 파일 다운로드 URL 설정
# https://github.com/naver/ngrinder/releases 에서 원하는 버전의 WAR 파일 URL을 설정
ARG WAR_FILE_TARGET_URL=https://github.com/naver/ngrinder/releases/download/ngrinder-3.5.9-p1-20240613/ngrinder-controller-3.5.9-p1.war

# curl 설치
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

# 네트워크에서 WAR 파일 다운로드
RUN curl -fL -o /app.war ${WAR_FILE_TARGET_URL}

ENTRYPOINT ["java", "-jar", "/app.war"]

 

 

컨르롤러 Dockerfile을 설정한 후 docker-compose.yml 파일을 다음과 같이 구성한 후 docker-compose up 명령어를 입력한다.

# docker-compose.yml
services:
  controller:
    container_name: controller
    build:
      context: ./ngrinder-controller
      dockerfile: Dockerfile
    ports:
      - "8080:8080" # 웹 접속 포트 (nGrinder 컨트롤러의 대시보드 및 설정 페이지 접속)
      - "12000-12009:12000-12009" # 에이전트와 컨트롤러 간 통신 포트 범위 (테스트 실행 시 사용)
      - "16001:16001" # 컨트롤러와 에이전트 간 내부 제어 통신 포트
docker-compose up

 

 

 

http://127.0.0.1:8080/ 으로 접속하면 로그인창이 뜨는데 아이디와 비밀번호 모두 admin을 입력하여 로그인을 수행한다. 아래 두번째 이미지같이 나오면 컨트롤러는 성공적으로 설정이 된 것이다.

 

 

 

 

 nGrinder agent 설정

부하를 발생시키는 손발이 되어줄 agent 설정을 위해서 nGrinder 웹에서 Download Agent를 통해 agent를 다운받아줬다.

 

ngrinder-agent-3.5.9-p1-127.0.0.1.tar 이라는 파일명으로 다운받아졌는데 재사용성을 위해 agent.tar로 변경 후 ngrinder-agent 디렉토리 하위로 이동시켜주었다.

(미리 공유한 최종 결과물에는 이미 포함되어 업로드 되어 있어 다운로드 과정 불필요)

 

그리고 ngrinder-agent 디렉토리 하위에 Dockefile을 생성하여 아래와 같이 작성해준다.

# ngrinder-agent/Dockerfile
FROM openjdk:11-slim

RUN apt-get update && apt-get install -y tar && rm -rf /var/lib/apt/lists/*

# tar 파일 복사 및 압축 해제
COPY ./agent.tar /home/
RUN tar -xf /home/agent.tar -C /home/ && rm /home/agent.tar

CMD /home/ngrinder-agent/run_agent.sh -ch controller

여기서 조심해야할 점은 마지막 CMD 부분에 -ch 옵션에 설정된 값 부분이다. ch 옵션은 컨트롤러 host명 혹은 IP 주소 설정으로 도커로 띄운 nGrinder 컨트롤러와 연결을 위해 컨트롤러에 해당하는 컨테이너명을 넣어주면 된다.

이 글에서는 controller라는 이름으로 설정했기 때문에 controller로 넣어주었다.

 

agent 관련 다른 옵션 설정이 필요하다면 아래 링크를 참고하면 된다.

 

Agent Configuration Guide

enterprise level performance testing solution. Contribute to naver/ngrinder development by creating an account on GitHub.

github.com

 

 

[참고] ngrinder-agent 디렉토리 파일 구조

 

 

 

마지막으로 agent 부분을 docker-compose.yml 파일에 추가해준다.

# docker-compose.yml
services:
  controller:
    container_name: controller
    build:
      context: ./ngrinder-controller
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
      - "12000-12009:12000-12009"
      - "16001:16001"
    networks:
      - ngrinder
  agent:
    depends_on:
      - controller # agent 서비스를 실행하기 전에 controller 서비스가 실행되도록 보장
    build:
      context: ./ngrinder-agent
      dockerfile: Dockerfile
    networks:
      - ngrinder
networks:
  ngrinder: # 서비스 간 통신을 위해 추가
    driver: bridge

 

 

 

 

 nGrinder docker-compose 실행

다음 명령어를 통해 nGrinder controller와 agent를 실행한다.

# ngrinder controller 실행
docker compose up controller

# ngrinder agent 실행
docker compose up --scale agent=${실행할 agent 수}
# docker compose up --scale agent=3

 

 

agent의 연결 상태는 Agent Management 메뉴에서 확인 가능하다.

 

 

 

 

참고

 

silicon MacBook 에서 nGrinder를 docker에 올려보자

스터디 팀원과 같이 db종류에 따른 트래픽 부하를 테스트 하기 위해 프로젝트를 진행하고 있는데, 테스트 도구로는 nGrinder를 사용하기로 결정하였다.그런데 docker hub에 올라와 있는 nGrinder는 ADM64

velog.io

 

 

[nGrinder] M1 Mac에 설치하기

부하 테스트를 위해 nGrinder를 사용해 보자 📌 서론 열심히 레시피아를 만들어서 원스토어에 배포했지만 아직 유저가 별로 없다. (거의 없다... 또륵) 사용하는 유저는 별로 없지만 AWS에서 Cloud Nat

curiousjinan.tistory.com

 

 

GrepIU

 

www.grepiu.com

 

728x90
반응형
Comments