자기소개페이지만들기

6. scouter를 통해서 백엔드 모니터링 해보기

scouter는 LG CNS에서 개발한 APM(Application Performance Monitoring) 도구 입니다.

기본적인 사용방법이 간단하며 Windows, Mac OS X, Linux와 같은 다양한 OS를 지원합니다.

 

공식 github

github.com/scouter-project/scouter

 

scouter-project/scouter

Scouter is an open source APM (Application Performance Management) tool. - scouter-project/scouter

github.com

 

우선 스카우터를 설치해보겠습니다.

 

1. 자바 버전 체크 1.8 이상 필요

만약 자바가 없다면 자바를 다운로드 받아야합니다.

 

2, 스카우터 설치

아래 주소에서 최신 릴리즈 버전 확인

github.com/scouter-project/scouter/releases

본인의 경우는 아래가 최신버전이었습니다.

wget https://github.com/scouter-project/scouter/releases/download/v2.12.0.1.SNAPSHOT/scouter-all-2.12.0.1.SNAPSHOT.tar.gz

 

3. 스카우터 압축 풀기

tar -xvf scouter-all-2.12.0.1.SNAPSHOT.tar.gz 

4. Server (Collector) 실행

압춘을 푼 디렉토리의 server 디렉토리의 startup.sh 실행

 

5.호스트 에이전트를 설치 및 실행

본인의 백엔드 서버 aws ec2로 연결해서 호스트 에이전트를 설치하고 실행해야합니다. 우선 스카우트 최신 버전을 설치합니다.

 

설치 뒤 압출을 풀어줍니다.

 

압출을 푼뒤 

 scouter/agent.host/conf 디렉토리까지 이동합니다.

sudo vim scouter.conf

위의 명령어을 통해서 설정파일을 들어오면 아래와 같은데 주석을 해제해준다. 앞서 설정한 컬렉션 서버와 호스트 에이전트연결을 위해서 전체 주석을 해제하고 net_collector_ip의 값을 앞서 설정한 컬렉션 서버의 ip로 수정한다.

포트는 따로 변경하지 않았기때문에 변경하지 않아도 된다.

 

설정 파일을 저장하고 agent.host 디렉토리로 이동후 호스트 에이전트를 실행시킨다.

 

 

6. Client 설치

본인의 경우 윈도우 컴퓨터에서 scouter를 보기위해서 아래의 주소에서 windwow zip 파일을 다운받았습니다.

github.com/scouter-project/scouter/releases

 

다운로드 받은 zip파일의 압축을 풀고

 

scouter.exe 파일을 실행시킵니다. 

 

server address에는 컬렉션 서버의 아이피와 포트번호 ex 127.0.0.1:6100

id/password의 초기값은 admin/admin 입니다.

 

 

만약 여기서 connection failed가 발생한다면

 

 

해당 서버의 6100 포트의 tcp와 udp 프로토콜을 개방해주세요.

사진에서는 모든 ip에 연결될수 있게 했지만 client를 사용하는 pc, 컬레션 서버에 연결된 agent 서버들에게만 열어주는 것이 안전합니다.

 

본인의 경우 백엔드와 프론트엔드 서버 둘다에 연결해서 2개의 리눅스가 뜨는 것을 확인할수 있습니다.

 

 

이제 nGrinder를 통해서 부하 테스트를 진행해 봅시다.

2개의 에이전트로 약 200명의 사용자가 메인페이지를 요청하는 테스트를 진행해 보았습니다.

 

놀랍게도 테스트를 실행하자마자 cpu가 100%에 도달합니다.

 

또한 스카우터에서 cpu를 너무 쓴다고 경고까지 해줍니다.

 

이처럼 scouter와 nGrinder를 통해서 부하 테스트 동안 cpu, memory 등에 대한 점유 정도를 알수 있게 되었습니다.

 

7. java agent 설정

앞서 설정한 host.agent 는 os에 대한 에이전트로 cpu, memory 등을 모니터링 할수있습니다. 이와 다르게 java.agent는 모니터링 할 Java Program이 실행될 때 attach되어 모니터링을 수행하게 됩니다.

자기소개 백엔드 프로젝트가 스프링부트로 내장 서버를 이용하며 8081포트와 8082포트 두포트에 따로 실행되기 때문에 이에 맞추서 agent를 등록 실행 해보도록 하겠습니다.

 

scouter/agent.java/conf로 이동

 

설정 파일 만들기 

설정파일의 명은 본인이 원하는 이름으로 해도됩니다.

vim was01.conf

 

 

설장파일에 컬렉션 서버의 ip와 포트 등의 설정을 적습니다.

### scouter java agent configuration sample
obj_name=WAS-01
net_collector_ip=35.168.161.112
net_collector_udp_port=6100
net_collector_tcp_port=6100
#hook_method_patterns=sample.mybiz.*Biz.*,sample.service.*Service.*
#trace_http_client_ip_header_key=X-Forwarded-For
#profile_spring_controller_method_parameter_enabled=false
#hook_exception_class_patterns=my.exception.TypedException
#profile_fullstack_hooked_exception_enabled=true
#hook_exception_handler_method_patterns=my.AbstractAPIController.fallbackHandler,my.ApiExceptionLoggingFilter.handleNotFoundErrorResponse
#hook_exception_hanlder_exclude_class_patterns=exception.BizException

 

자기소개 백엔드 프로젝트는 2개의 포트에 애플리케이션을 만들기 때문에 설정파일을 2개 만들었습니다.

 

### scouter java agent configuration sample
obj_name=WAS-02
net_collector_ip=35.168.161.112
net_collector_udp_port=6100
net_collector_tcp_port=6100
#hook_method_patterns=sample.mybiz.*Biz.*,sample.service.*Service.*
#trace_http_client_ip_header_key=X-Forwarded-For
#profile_spring_controller_method_parameter_enabled=false
#hook_exception_class_patterns=my.exception.TypedException
#profile_fullstack_hooked_exception_enabled=true
#hook_exception_handler_method_patterns=my.AbstractAPIController.fallbackHandler,my.ApiExceptionLoggingFilter.handleNotFoundErrorResponse
#hook_exception_hanlder_exclude_class_patterns=exception.BizException

 

설정을 만들고 나면 모니터링을 적용할 java program을 실행시킬 때 scouter를 attach 될수있도록 해야합니다.

 

자기소개 백엔드 프로젝트는 스프링 부트이기 때문에 embeded 서버를 사용합니다.

실행 명령어에 아래의 내용이 추가되어야 합니다.

-javaagent:[agent.java 디렉토리 위치]/scouter.agent.jar

-DScouter.config=[설정 파일 위치]/was01.conf

 

자기소개 프로젝트의 deploy는 쉘 스크립트로 진행되기 때문에 해당 쉘 스크립트를 수정하였습니다.

 

기존 코드

nohup java -jar \
    -Dspring.config.location=classpath:/application.yml,/home/ec2-user/app/application-real-db.yml,/home/ec2-user/app/application-ops.yml \
    -Dspring.profiles.active=real2 \
    $JAR_NAME > $REPOSITORY/nohup.out 2>&1 &

 

수정 코드

nohup java -javaagent:/home/ec2-user/scouter/agent.java/scouter.agent.jar \
    -Dscouter.config=/home/ec2-user/scouter/agent.java/conf/was01.conf \
    -jar \
    -Dspring.config.location=classpath:/application.yml,/home/ec2-user/app/application-real-db.yml,/home/ec2-user/app/application-ops.yml \
    -Dspring.profiles.active=real1 \
    $JAR_NAME > $REPOSITORY/nohup1.out 2>&1 &

 

기존 애플리케이션을 종료하고 다시 deploy를 진행하면

nohup파일에서 아래와 같이 scouter 관련 로그를 확인할수 있습니다.

scouter client 서버에 접속하면 아래와 같이 애플리케이션 서버가 잡혀있게 됩니다.

 

TPS, Heap, GC 등 관련해서 모니터링 진행할 수 있게 됩니다.

 

아래는 tps 설정후 부하테스를했을때 나오는 그래프로 정상적으로 연결되서 모니터링이 가능한 것을 확인할 수 있습니다.

이렇게 해서 scouter를 통해서 os레벨의 모니터링과 java 프로그램 레벨의 모니터링을 연결 및 test 해보았습니다. 

다음글에서는 scouter는 jmeter와도 연동이 잘되기 때문에  jmeter 를 적용해보고 nGrinder와 비교를 해보는 시간을 가져볼려고 합니다.

감사합니다.