이번 글에서는 오픈소스 APM 툴인 Scouter에 대해 공부해보려 한다.
1. 스카우터란?
- 스카우터는 복잡한 N-Tier 환경의 웹 기반 시스템에 대해 효율적인 성능 모니터링 체계를 마련함으로써 시스템 자원의 활용도를 극대화 시키는 오픈소스 APM 툴이다.
1-1. 제품의 특성
- 웹 어플리케이션 관리 (실시간 모니터링)
- 비지니스 트랜잭션 관리 (성능/안정성)
- 오픈소스 모니터링 및 확장 팩 (성능/안정성)
- 사용 사례의 증가 (호환성/확장성)
1-2. 스카우터 활용
1-2-1. 서비스 모니터링
- 동시 사용자
- 응답 시간
- 실시간 처리 현황
1-2-2. 리소스 모니터링
- CPU, 메모리 사용량
- DB 커넥션
- 파일 I/O
1-2-3. 장애 분석 및 해결
- 장애의 진단과 분석
- 성능 개선
- 안정화
1-2-4. Xlog와 트랜잭션 프로파일링
- 실시간 분포도
- 다이나믹 프로파일링
- 트랜잭션 추적
2. 스카우터 구성
모듈 | 설명 |
Scouter Agent | 모니터링 대상 시스템에 구성되며, 각종 성능 정보를 수집, 스카우터 서버로 전달하는 역할 |
Scouter Collector | 에이전트로부터 실시간 모니터링 정보를 수집, 가공하며 실시간 대시보드 제공 및 통계정보 관리, 장애/에러 경보 등 관리에 필요한 각종 기능을 수행 |
Scouter Repository | 서버에서 가공된 데이터는 데이터 형태에 따라 DB, File 시스템에 저장되며 이러한 데이터를 통해 시스템 분석에 필요한 각종 데이터 확보 |
Scouter Client | 이클립스 기반의 클라이언트를 통해 시스템 모니터링 및 스카우터에 대한 관리를 수행 |
3. 스카우터 설치
3-1. 스카우터 설치 파일 다운로드
아래 github 사이트에서 설치파일 다운로드
https://github.com/scouter-project/scouter/releases/tag/v2.15.0
3-2. 설치파일 압축 해제
[oracle@wlschsy-wls-0 scouter]# pwd /u01/app/scouter [oracle@wlschsy-wls-0 scouter]# tar xzvf scouter-all-2.15.0.tar.gz [oracle@wlschsy-wls-0 scouter]# ls -arlt total 32 drwxrwxr-x. 6 oracle oracle 4096 Jan 17 08:59 .. drwxr-xr-x. 3 oracle oracle 4096 Jan 17 08:59 agent.batch drwxr-xr-x. 5 oracle oracle 4096 Jan 17 08:59 webapp drwxr-xr-x. 8 oracle oracle 4096 Jan 17 08:59 . drwxr-xr-x. 4 oracle oracle 4096 Jan 17 08:59 agent.java_6_7 drwxr-xr-x. 8 oracle oracle 4096 Jan 17 09:04 server drwxr-xr-x. 5 oracle oracle 4096 Jan 17 09:08 agent.host drwxr-xr-x. 5 oracle oracle 4096 Jan 17 09:17 agent.java |
디렉토리 정보
- server(collector) : Agent가 전송한 데이터 수집/처리
- agent.host : OS의 CPU, Memory, Disk 등의 성능 정보 전송
- agent.java : 실시간 서비스 성능 정보, Heap Memory, Thread 등 Java 성능 정보
- agent.java_6_7 : for java6, java7
- agent.batch : 배치 잡 모니터링
- webapp : rest api 독립 서버, server에 embedded로 실행 가능
3-3. server(collector) 설정 및 구동
$ scouter_home/server/conf/scouter.conf [root@wlschsy-wls-0 conf]# pwd /u01/app/scouter/server/conf [root@wlschsy-wls-0 conf]# cat scouter.conf db_dir=/u01/app/scouter/server/data/ log_dir=/u01/app/scouter/server/logs/ net_udp_listen_port=6100 net_tcp_listen_port=6100 $ vi startup.sh #!/usr/bin/env bash nohup java -Xmx2048m -Xms2048m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib > nohup.out & sleep 1 tail -100 nohup.out =============================================== $ Scouter collector 구동 [oracle@wlschsy-wls-0 server]$ ./startup -bash: ./startup: No such file or directory [oracle@wlschsy-wls-0 server]$ ./startup -bash: ./startup: No such file or directory [oracle@wlschsy-wls-0 server]$ ./startup.sh nohup: redirecting stderr to stdout ____ _ / ___| ___ ___ _ _| |_ ___ _ __ \___ \ / __/ \| | | | __/ _ \ '__| ___) | (_| (+) | |_| | || __/ | |____/ \___\___/ \__,_|\__\___|_| Open Source S/W Performance Monitoring Scouter version 2.15.0 * 기동 정지는 stop.sh $ 프로세스 상태 확인 [oracle@wlschsy-wls-0 server]$ ps ax|grep scouter-server|grep -v grep 30691 pts/2 Sl 0:04 java -Xmx2048m -Xms2048m -classpath ./scouter-server-boot.jar scouter.boot.Boot ./lib |
3-4. agent host 설정 및 구동
[oracle@wlschsy-wls-0 conf]$ pwd /u01/app/scouter/agent.host/conf $ 설정 확인 [oracle@wlschsy-wls-0 conf]$ cat scouter.conf ### scouter host configruation sample net_collector_ip=127.0.0.1 # Collector의 IP net_collector_udp_port=6100 # Collector의 서버 udp port net_collector_tcp_port=6100 # Collector의 서버 tcp port cpu_warning_pct=80 # CPU 경고 임계치 cpu_fatal_pct=85 # CPU 에러 임계치 cpu_check_period_ms=60000 # CPU 감시 주기 (ms) cpu_fatal_history=3 # CPU 알림 누적 카운트 cpu_alert_interval_ms=300000 # CPU 알림 주기 (ms) disk_warning_pct=88 # CPU 경고 임계치 (%) disk_fatal_pct=92 # CPU 에러 임계치 (%) $ 스카우터 host 서버의 기동과 중지 [oracle@wlschsy-wls-0 agent.host]$ ./host.sh nohup: redirecting stderr to stdout ____ _ / ___| ___ ___ _ _| |_ ___ _ __ \___ \ / __/ \| | | | __/ _ \ '__| ___) | (_| (+) | |_| | || __/ | |____/ \___\___/ \__,_|\__\___|_| Open Source S/W Performance Monitoring Scouter version 2.15.0 Configure -Dscouter.config=./conf/scouter.conf Scouter Host Agent Version 2.15.0 2021-10-01 04:56 GMT System JRE version : 1.8.0_311 $ 프로세스 상태 확인 [oracle@wlschsy-wls-0 agent.host]$ ps ax|grep scouter.host|grep -v grep 764 pts/2 Sl 0:01 java -classpath ./scouter.host.jar scouter.boot.Boot ./lib |
3-5. agent java 설정
[oracle@wlschsy-wls-0 conf]$ pwd /u01/app/scouter/agent.java/conf $ 설정 확인 [oracle@wlschsy-wls-0 conf]$ cat scouter.conf ### scouter java agent configuration sample obj_name=WLSCHSY_server_1 # 감시 대상 서버 별칭 net_collector_ip=127.0.0.1 # Collector의 IP net_collector_udp_port=6100 # Collector udp listen port net_collector_tcp_port=6100 # Collector tcp listen port 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 |
- agent.java의 경우에는 client(WAS)가 기동하면서 실행된다.
3-6. Scouter agent.java 시작 및 종료
- 독립 실행이 아닌 WAS 실행시 attach 되어 실행 된다.
cat startManagerServer.sh # Scouter agent export AGENT_HOME="/u01/app/scouter/agent.java/" JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:${AGENT_HOME}/scouter.agent.jar" JAVA_OPTIONS="${JAVA_OPTIONS} -Dscouter.config=${AGENT_HOME}/conf/scouter.conf" export JAVA_OPTIONS $ ps -ef|grep weblogic oracle 4093 4044 78 15:38 pts/0 00:00:34 /u01/jdk/bin/java -server -Dserver.name=WLSCHSY_server_1 -Dserver.port=9073 -Xms2g -Xmx2g -XX:MetaspaceSize=1024m -XX:MaxMetaspaceSize=1536m -XX:+UseG1GC -cp /u01/app/oracle/middleware/wlserver/server/lib/weblogic-launcher.jar -Dlaunch.use.env.classpath=true -Dweblogic.Name=WLSCHSY_server_1 -Djava.security.policy=/u01/app/oracle/middleware/wlserver/server/lib/weblogic.policy -Dweblogic.ProductionModeEnabled=true -Xloggc:/Log/WAS/WLSCHSY_domain/gc/gc.WLSCHSY_server_1.out -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Log/WAS/WLSCHSY_domain/heap -Djava.system.class.loader=com.oracle.classloader.weblogic.LaunchClassLoader -D_Offline_FileDataArchive=true -Dweblogic.connector.ConnectionPoolProfilingEnabled=false -Dcom.bea.wlw.netui.disableInstrumentation=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv6Addresses=false -Dweblogic.system.BootIdentityFile=/u01/data/domains/WLSCHSY_domain/boot.properties -Dweblogic.threadpool.MinPoolSize=50 -Dweblogic.wsee.skip.async.response=true -Dweblogic.security.allowCryptoJDefaultJCEVerification=true -Dweblogic.security.allowCryptoJDefaultPRNG=true -Djava.security.egd=file:/dev/./urandom -Dweblogic.SocketReaders=3 -Dweblogic.MuxerClass=weblogic.socket.PosixSocketMuxer -Dweblogic.Chunksize=65536 -Doracle.jdbc.fanEnabled=false -XX:+DisableExplicitGC -javaagent:/u01/app/scouter/agent.java//scouter.agent.jar -Dscouter.config=/u01/app/scouter/agent.java//conf/scouter.conf |
4. 스카우터 Windows Client 설치 후 모니터링
Scouter 클라이언트 설치 (모니터링 PC)
아래 링크를 통해 패키지 다운로드
https://github.com/scouter-project/scouter/releases/tag/v2.15.0
* 클라이언트 실행 시 주의
2.15 버전에서 이클립스 실행시 jdk 11버전이 필수이기 때문에 jdk 11을 설치하고 경로를 잡아줘야 한다.
scouter.ini 파일에 하기 빨간 색 부분으로 java 11 경로를 잡아준다.
C:\Users\syhwang\Desktop\scouter.client.product-win32.win32.x86_64\scouter.client > scouter.ini 파일 수정 - 하기 빨간 색 부분 추가해 준다. -vm C:\java\jdk-11.0.11\bin\javaw.exe -startup plugins/org.eclipse.equinox.launcher_1.6.300.v20210813-1054.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.2.300.v20210828-0802 -data @user.home/scouter -vmargs -Xms128m -Xmx1024m -XX:+UseG1GC -Dosgi.requiredJavaVersion=1.8 |
- 접속 정보 > IP:6100
- 계정 > admin / admin
아래는 실행 완료 초기 화면(대시보드)