컴공생의 다이어리
[nGrinder] docker-compose로 환경 구성하기(Mac M3 기준) 본문
[nGrinder] docker-compose로 환경 구성하기
네이버에서 만든 부하 테스트 툴인 nGrinder를 로컬에 설치하지 않고 도커 환경으로 설정하고 싶다는 욕심을 품게되며.. 예상보다 긴 싸움을 하게되었다. 이 글에서는 그 결과에 대한 핵심 내용을 정리하고자 한다.
이 글은 24.12.01 기준 실리콘 맥 기준으로 작성된 글이기 때문에 다른 환경에서는 제대로 동작하지 않을 가능성도 있습니다.
최종 결과물을 미리 공유합니다.
https://drive.google.com/drive/folders/1OIv5V3Ln4872Wc-aAZwhBD_HZE-geTct?usp=sharing
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 관련 다른 옵션 설정이 필요하다면 아래 링크를 참고하면 된다.
[참고] 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 메뉴에서 확인 가능하다.
참고
'Development > 기타' 카테고리의 다른 글
Burp Suite(버프 슈트) 설치 (0) | 2024.04.10 |
---|---|
PuTTY 출력 라인 수 늘리기 (0) | 2024.03.30 |
[Infra] 스케일 업(Scale-up), 스케일 아웃(Scale-out) (1) | 2023.12.30 |
[AWS] 예산(Budgets) 제한 설정 (0) | 2023.10.15 |
색 추출 크롬 확장 프로그램 - ColorZila(컬러질라) (0) | 2023.07.10 |