ℹ️ nGrinder
naver에서 오픈소스로 관리하는 성능테스트(부하테스트) 툴로, web ui를 제공함.
compose로 묶지 않고 각각 구동하는 법
Controller 컨테이너 구동
# 이미지 pull
docker pull ngrinder/controller
# run
docker run -d \
-v ~/ngrinder-controller:/opt/ngrinder-controller \
--name controller \
-p 80:80 -p 16001:16001 -p 12000-12009:12000-12009 \
ngrinder/controller
# 80: Default controller web UI port.
# 9010-9019: agents connect to the controller cluster thorugh these ports.
# 12000-12029: controllers allocate stress tests through these ports.
Agent 컨테이너 구동
# 이미지 pull
docker pull ngrinder/agent
# run. Controller와 같은 호스트에 위치하는 경우 link 옵션으로 controller를 인식시킴.
docker run -d \
--name agent \
--link controller:controller \
ngrinder/agent
# run. Controller와 다른 호스트에 위치하는 경우.
docker run -d \
--name agent \
ngrinder/agent \
<controller ip>:<controller port>
compose로 묶어서 구동하는 법
디렉터리 구조
/var/ngrinder 디렉터리 생성 후 다음과 같이 배치
/var/ngrinder
├── agent
├── controller
├── docker-compose.yaml
├── down
└── up
- agent, controller: 컨테이너에 마운트 시킬 볼륨
- down, up: docker compose 명령어를 더 짧게 실행하기 위한 스크립트
스크립트 작성
down
#!/bin/bash
docker compose down
up
#!/bin/bash
if [ -n "docker compose ps -q" ]
then
echo "stopping existing containers..."
docker compose down
fi
docker compose up -d --scale agent=10
실행 권한 부여
sudo chmod u+x down up
스크립트 실행 예시
# 컨테이너 내리기만 할 때
./down
# 컨테이너 구동 (이미 구동중이라면 down 후 재구동하므로, 재구동할 때도 up만 실행)
./up
yaml 작성
services:
controller:
image: ngrinder/controller
container_name: controller
ports:
- "8080:80"
- "16001:16001"
- "12000-12009:12000-12009"
volumes:
- ./controller:/opt/ngrinder-controller
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
networks:
- ngrinder-network
agent:
image: ngrinder/agent
container_name: agent
depends_on:
- controller
volumes:
- ./agent:/opt/ngrinder-agent
deploy:
resources:
limits:
memory: 1500m
cpus: "1.0"
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "5"
networks:
- ngrinder-network
networks:
ngrinder-network:
driver: bridge
- 로그 로테이션 설정: 10mb씩 최대 5개 파일
- agent 자원 제한: agent는 자원을 아주 많이 잡아먹을 수 있으므로 제한을 둠. cpu 코어 1개, 메모리 1.5gb
- controller 포트 변경:
호스트 8080 -> 컨테이너 80으로 포워딩
이후 http://localhost:8080 으로 접속 시 로그인페이지를 볼 수 있음.