메뉴 건너뛰기

Extra Form
출처 https://blog.naver.com/smj9030/222548585671

XLog 보는 방법

https://github.com/scouter-project/scouter/blob/master/scouter.document/client/Reading-XLog_kr.md

21.png

Scouter 에서 응답시간 분포 그래프를 XLog 라고 부른다. XLog 는 Transaction Log 라는 의미에서 2004년에 처음 만들어졌다. XLog 는 전체 트랜잭션을 한눈에 파악할 수 있고 느린 트랜잭션을 선별하여 조회할 수 있기 때문에 응용 프로그램을 튜닝하는데 가장 효과적인 방법이라 할 수 있다.

XLog 차트는 하나의 트랜잭션(서비스 수행)을 하나의 점으로 표현하는 차트이다. 세로축은 트랜잭션이 수행된 응답시간, 가로축은 트랜잭션의 종료시간이다. 화면의 그래프는 일정시간(2초) 간격으로 Reload 된다. 이때 그래프는 좌측으로 쉬프트 된다.

22.png 23.png

위 화면에서처럼 왼쪽마우스 버튼을 이용하여 드레그하면 일부 점들을 선별하여 선택할 수 있다. 이렇게 선택된 트랜잭션들은 화면처럼 리스트로 나타난다. 리스트에서 하나를 선택하면 해당 트랜잭션에 대한 상세 정보를 볼 수 있다.



APM (Application Perpermance Monitoring) 은 어플리케이션 성능을 모니터링 할 수 있는 툴이다. ​공공/금융 기업은 주로 제니퍼(Jennifer)라는 APM(상용)을 많이 사용한다. 스카우터는 이 중 톰캣 또는 JBoss 같은 톰캣 계열 어플리케이션 서버에 한정되어 사용할 수 있는 APM 모니터링 툴이다.

Scouter 소개 (1)

스카우터는 LG CNS에서 개발한 오픈소스 APM이다. 간단한 설치에 비해 직관적이고 다양한 모니터링 기능을 제공하며 오픈소스이기 때문에 누구나 쉽게 사용할 수 있다.

Modules

설명

Server(Collector)

Agent가 전송한 데이터 수집/처리

Host Agent

OS의 CPU,Memory, Disk등의 성능 정보 전송

Java Agent

실시간 서비스 성능정보, Heap Memory, Thread 등 Java 성능 정보

Client(Viewer)

수집된 성능 정보를 확인하기 위한 client 프로그램

1. scouter 다운로드

scouter 릴리즈 페이지에서 최신버전을 다운로드한다.

$ wget https://github.com/scouter-project/scouter/releases/download/v2.15.0/scouter-all-v2.15.0.tar.gz $ tar -xvf scouter-all-2.15.0.tar.gz

다운로드 받고 압축을 풀어준다. 그럼 scouter 폴더가 생성되고, 안에 들어가보면 다음과 같은 폴더를 볼 수 있다.

2. Collecter 서버 실행

​

/server/startup.sh 로 collector 서버를 실행할 수 있다.

​

netstat -an | grep 6100 을 해보면 scouter server가 LISTEN하고 있는 것을 알 수 있다.

pc에 클라이언트 프로그램을 다운받는다. 버전 2.15.0이 설치가 안 돼서 버전 2.12.0.1을 다운받았다.

압축을 풀고 scouter.exe을 실행시키면 ID와 Password를 입력하라고 나오는데 기본값은 둘 다 admin 이다.

또한 접속할 서버의 ip주소를 적어주고 접속하면 scouter의 object에서 확인할 수 있다.

​

4. Host Agent 실행

​

/scouter/agent.host/conf

설정파일에 Collector의 ip와 port 정보를 설정한다.

기본 port 값이 6100이므로, Collector 설치시 port 정보를 변경하지 않았다면 port 설정은 하지 않아도 된다.

### scouter host configruation sample net_collector_ip=ip주소 net_collector_udp_port=6100 net_collector_tcp_port=6100 #cpu_warning_pct=80 #cpu_fatal_pct=85 #cpu_check_period_ms=60000 #cpu_fatal_history=3 #cpu_alert_interval_ms=300000 #disk_warning_pct=88 #disk_fatal_pct=92

./host.sh 로 Host Agent를 시작한다.

​

​

5. Java Agent 실행

​

나는 이중화를 위해 8080, 8081, 8082, 8083 포트가 모두 하나의 스프링부트 어플리케이션을 띄우도록 설정해놓았다.

그러므로 각 포트마다 모니터링을 해야 하므로 conf 파일을 수정하여 각 포트와 연결되도록 설정할 것이다.

포트가 4개이므로 conf파일을 4개 만든다.

​

1) /scouter/agent.java/conf

​

기존에 있던 testcase-scouter.conf 를 제외하고 scouter1.conf 부터 scouter4.conf 파일 4개를 만들었다.

안에 내용은 동일한데, obj_name만 변경해주었다.

### scouter java agent configuration sample #obj_name=8080 net_collector_ip=ip주소 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) tomcat의 bin/catalina.sh 파일 수정

​

Scouter와 연동할 tomcat의 bin/catalina.sh 파일을 vi 편집기로 열어서 옵션을 추가해준다.

export SCOUTER_AGENT_DIR=/home/asmanager/scouter/agent.java JAVA_OPTS=" ${JAVA_OPTS} -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar" JAVA_OPTS=" ${JAVA_OPTS} -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/scouter1.conf" JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=8080"

나는 톰캣을 두 개 설치했기 때문에 8083포트로 연결되는 톰캣의 파일을 수정해주었다.

export SCOUTER_AGENT_DIR=/home/asmanager/scouter/agent.java JAVA_OPTS=" ${JAVA_OPTS} -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar" JAVA_OPTS=" ${JAVA_OPTS} -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/scouter1.conf" JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=8083"

​

3) 톰캣의 /bin/startup.sh 로 가동해준다.

​

두 톰캣을 각각 가동해주면 클라이언트 프로그램에서 -Dobj_name로 설정해준 이름이 뜨게 되고 8080, 8083 포트로 접속했을 경우를 모니터링할 수 있다.

​

나머지 8081과 8082포트는 젠킨스에서 빌드 시 쉘에 추가해주면 되는데, -DScouter.config로 conf파일을 연결해주고

-Dobj_name으로 클라이언트에 보여질 이름을 설정해주면 된다.

- 8081포트 BUILD_ID=dontKillMe java -javaagent:/home/asmanager/scouter/agent.java/scouter.agent.jar -Dobj_name=8081 -DScouter.config=/home/asmanager/scouter/agent.java/conf/scouter2.conf -jar -Dserver.port=8081 /home/asmanager/.jenkins/jobs/springboot1/workspace/target/admin-0.0.1-SNAPSHOT.war & - 8082포트 BUILD_ID=dontKillMe java -javaagent:/home/asmanager/scouter/agent.java/scouter.agent.jar -Dobj_name=8082 -DScouter.config=/home/asmanager/scouter/agent.java/conf/scouter3.conf -jar /home/asmanager/.jenkins/jobs/springboot1/workspace/target/admin-0.0.1-SNAPSHOT.war &

이렇게 작성하고 젠킨스에서 배포하면 8081, 8082 포트가 켜지고 클라이언트에서 각 포트를 모니터링 할 수 있는 것이다.

​

-------------------------------------------------------------------------------------------------------------------------------------------


1. 오픈소스 APM 툴 스카우터 소개 (2)

- 스카우터는 복잡한 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. 스카우터 구성 

111.jpg
이미지 출처 - https://acet.pe.kr/m/620 
모듈설명
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

 

Release v2.15.0 · scouter-project/scouter

Important execute the command to run scouter client for Mac(OSX) xattr -cr scouter.client.app We will find out the solution without it. scouter client for Mac needs Java11+ Features [collector] ...

github.com

- scouter-all-2.15.0.tar.gz

혹은 scouter-min-2.15.0.tar.gz

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

아래는 실행 완료 초기 화면(대시보드)

​