nGrinder란?
nGrinder는 네이버에서 성능 측정 목적으로 개발 된 오픈소스 프로젝트이며, 2011년에 공개 하였습니다.
(The Grinder라는 오픈소스 기반에서 개발 되었습니다.)
성능 측정이란 것은 실제 서비스에 투입 되기 앞서, 실제와 같은 환경을 만들어 놓고, 서버가 사용자를 얼마 만큼 받아 줄 수 있느냐를 실험 할때 사용합니다.
예를들어.. 엔지니어가 동시접속자 100명 정도 쯤 무리 없겠지? 라고 예상하고 그에 맞는 서버를 준비하고 설정 했는데.. 예상치 못한 x1000 명이 더 와버리면.. 서버는 죽고 엔지니어는 야근 하겠죠..? 이런것을 미리 예측 하기 위한 도구라고 이해 하시면 됩니다. ^^;
또한, 엔터프라이즈 환경에서의 상용 성능 측정 도구를 사용 해보질 않아서 잘 모르지만, 대충 들어보니 가격이 억대라고 합니다.
그래서, 네이버가 가격 때문에도 그렇고 테스트 및 개발시 잦은 수고들을 덜게 하기 위해 만들어 진 것 같습니다.
무튼 설명은 여기서 끝내기로 하고 더 자세한 내용은 https://naver.github.io/ngrinder 또는
개발자이신 윤준호님 블로그 http://junoyoon.tistory.com/category/ngrinder 를 방문 해주세요.
nGrinder Architecture
아키텍처를 살펴보시면 아시겠지만, nGrinder는 Controller, Agent, Target 서버로 나눠져 있습니다.
– Controller
성능 테스트를 위한 웹 인터페이스, 테스트 프로세스를 조정 및 대조, 표시 통계 테스트를 할 수 있는 기능을 제공합니다.– Agent
Controller의 명령을 받아 실행에 옮기는 녀석입니다.– Target
실험 대상이 될 서버이며, 여기에 nGrinder-Monitor가 실행이 되면 실험하는 동안 현 상황 정보를 Controller에서 모니터링 할 수 있습니다.
Figure 1. nGrinder System Architecture
(http://www.cubrid.org/wiki_ngrinder/entry/general-architecture)
nGrinder 설치
위의 아키텍처와 동일하게 구성하고 Target 서버에 모의 실험을 진행 해보도록 하겠습니다.
본 글은 Ubuntu 14.04 LTS에서 nGrinder v3.3을 사용하여 테스트 하였고 설정 파일 및 서버 부분의 세부 사항은 다루지 않으며, 상위 버전 또는 하위 버전은 설치법이 다소 상이 할 수 있습니다.
0. 공통 부분
Controller, Agent, Target 서버 모두 Hostname 설정 및 JDK 설치가 되어 있어야 하므로, 모든 서버에 적용 해주시길 바랍니다.
– Hostname 설정
Hostname IP ngrinder-controller 172.17.0.93 ngrinder-agent-1 172.17.0.94 ngrinder-agent-2 172.17.0.95 ngrinder-agent-3 172.17.0.96 ngrinder-agent-4 172.17.0.97 ngrinder-target 172.17.0.98
root@ruo91:~# echo "ngrinder-controller 172.17.0.93" >> /etc/hosts root@ruo91:~# echo "ngrinder-agent-1 172.17.0.94" >> /etc/hosts root@ruo91:~# echo "ngrinder-agent-2 172.17.0.95" >> /etc/hosts root@ruo91:~# echo "ngrinder-agent-3 172.17.0.96" >> /etc/hosts root@ruo91:~# echo "ngrinder-agent-4 172.17.0.97" >> /etc/hosts root@ruo91:~# echo "ngrinder-target 172.17.0.98" >> /etc/hosts
– JDK 설치
root@ruo91:~# cd /opt root@ruo91:~# curl -LO "http://download.oracle.com/otn-pub/java/jdk/7u75-b13/jdk-7u75-linux-x64.tar.gz" \ -H 'Cookie: oraclelicense=accept-securebackup-cookie' root@ruo91:~# tar xzf jdk*tar.gz root@ruo91:~# mv jdk1* /usr/local/jdk1.7 root@ruo91:~# rm -f jdk*.tar.gz
– JDK PATH 설정
root@ruo91:~# echo '# JDK' >> /etc/profile root@ruo91:~# echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile root@ruo91:~# echo 'export PATH="$PATH:$JAVA_HOME/bin"' >> /etc/profile root@ruo91:~# source /etc/profile
1. Controller
nGrinder Controller는 Jenkins와 같이 WAR 형태로 배포 되기 때문에 명령어 한줄로 바로 실행 할 수 있으며,
SourceForge에서 해당 파일을 받을 수 있으므로 curl로 적절하게 받아 설치 합니다.
http://sourceforge.net/projects/ngrinder/
– Controller 설치
root@ngrinder-controller:~# mkdir /opt/nGrinder root@ngrinder-controller:~# curl -L -o /opt/nGrinder/ngrinder-controller-3.3.war "http://downloads.sourceforge.net/project/ngrinder/ngrinder-3.3/ngrinder-controller-3.3.war?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fngrinder%2Ffiles%2Fngrinder-3.3%2F&ts=1422129105&use_mirror=cznic"
– Controller 실행
Controller는 16001 포트를 통해 Agent를 관리 하기 때문에 방화벽을 사용한다면 이 포트 번호를 허용 해주셔야 합니다.
root@ngrinder-controller:~# java -XX:MaxPermSize=200m -jar /opt/nGrinder/ngrinder-controller-3.3.war --port 80
2. Agent
Agent는 Controller에서 다운로드가 가능하므로 Controller의 WEB UI로 접속하여 다운로드 하면 됩니다.
ex) http://ngrinder-controller/
– Agent 설치
root@ngrinder-agent:~# cd /opt root@ngrinder-agent:~# curl -L -o ngrinder-agent.tar http://ngrinder-controller/agent/download/ root@ngrinder-agent:~# tar xvf ngrinder-agent.tar root@ngrinder-agent:~# rm -f ngrinder-agent.tar
– Agent PATH 설정
root@ngrinder-agent:~# echo "# nGrinder Agent" >> /etc/profile root@ngrinder-agent:~# echo "export NGRINDER_AGENT=/opt/ngrinder-agent" >> /etc/profile root@ngrinder-agent:~# echo "export PATH=$PATH:$NGRINDER_AGENT" >> /etc/profile root@ngrinder-agent:~# source /etc/profile
– Agent 실행
각각의 Agent 서버에 해당 스크립트 실행
root@ngrinder-agent:~# run_agent.sh
3. Target
– Monitor 설치
Controller 서버에서 Target 서버의 상황 정보 모니터링 하기 위한 Monitor 설치
root@ngrinder-target:~# cd /opt root@ngrinder-target:~# curl -L -o ngrinder-monitor.tar http://ngrinder-controller/monitor/download/ root@ngrinder-target:~# tar xvf ngrinder-monitor.tar root@ngrinder-target:~# rm -f ngrinder-monitor.tar
– Monitor PATH 설정
root@ngrinder-target:~# echo "# nGrinder Monitor" >> /etc/profile root@ngrinder-target:~# echo "export NGRINDER_MONITOR=/opt/ngrinder-monitor" >> /etc/profile root@ngrinder-target:~# echo "export PATH=$PATH:$NGRINDER_MONITOR" >> /etc/profile root@ngrinder-target:~# source /etc/profile
– Monitor 실행
root@ngrinder-target:~# run_monitor.sh
– Target 서버용 웹서버(Nginx) 설치
웹서버의 TPS를 확인 하기 위해 설치 합니다.
root@ngrinder-target:~# apt-get install -y python-software-properties software-properties-common root@ngrinder-target:~# echo "deb http://nginx.org/packages/ubuntu/ `lsb_release -sc` nginx" > /etc/apt/sources.list.d/nginx.list root@ngrinder-target:~# wget -q -O- "http://nginx.org/keys/nginx_signing.key" | apt-key add - root@ngrinder-target:~# apt-get update && apt-get install -y nginx root@ngrinder-target:~# service nginx start
nGrinder 성능 측정
WEB UI에 로그인 합니다. 기본 ID/PW는 admin/admin 입니다.
ex) http://ngrinder-controller/
Figure 2. nGrinder Login
로그인을 하고나면 보이는 첫 화면입니다.
Figure 3. nGrinder Home
우측 admin 을 눌러 Agent Management를 눌러 Agent들이 잘 등록 되어 있는지 확인 합니다.
Figure 4. nGrinder Admin Menu
Figure 5. nGrinder Agent Management
확인이 되었다면 ngrinder-target 서버를 테스트를 해보겠습니다.
Quick Start 부분에 테스트 할 서버의 IP 주소 또는 도메인을 적어 주세요.
Figure 6. nGrinder Quick Start
Basic Configuration 부분에서 적절하게 Agent 사용 수와 가상 사용자 수를 지정 후 우측에 있는 Save and Start 버튼을 누릅니다.
Figure 7. nGrinder Quick Start : Test Configuration
누르면 스케줄 설정 창이 뜨는데 Run Now를 눌러 바로 테스트를 진행 합니다.
Figure 8. nGrinder Quick Start : Test Configuration : Schedule Setting
실제와 같은 환경에서 테스트가 진행 되며 MTT, TPS, MTFB, Resp/s 과 같은 값들을 확인 하실 수가 있습니다.
Figure 9. nGrinder Quick Start : Test Running
테스트가 완료 되면 아래와 같이 전체 가상 사용자, TPS, Peak TPS 내역을 간단하게 확인 할 수 있습니다.
또한, 아래 Logs 파일을 다운로드 하여 상세하게 확인 해볼 수 있습니다.
Figure 10. nGrinder Quick Start : Report
위의 그림에서 우측의 Detailed Report 버튼을 누르면 좀 더 자세한 보고서를 확인 할 수 있습니다.
Figure 11. nGrinder Quick Start : Detailed Report
참고
http://naver.github.io/ngrinder/
http://deview.kr/2013/detail.nhn?topicSeq=2