본문 바로가기
WEB&WAS/Apache Tomcat

WAS) Tomcat과 Scouter APM 연동하기

by LILO 2022. 11. 6.
반응형

Tomcat과 Scouter APM 연동 전 필요 사항

1. Tomcat 설치

 

WAS) Tomcat Multi Instance (2) - 멀티 인스턴스 구성

INTRO Tomcat Multi Instance를 구성하는 과정에 대한 내용을 공유드립니다. Apache Tomcat Multi Instance에 대한 자세한 내용은 아래의 글을 참고하기 바랍니다. WAS) Tomcat Multi Instance (1) - 구조 및 장단점 Apache T

lilo.tistory.com

 

2. Scouter APM 설치

Scouter APM은 별도의 비용을 지불하지 않고 사용할 수 있는 오픈소스 APM입니다.

Application 성능 테스트시 유용하게 사용될 수 있으며 Windows 환경에서도 Application의 성능과 관련된 지표를 실시간으로 확인할 수 있습니다.

scouter-paper 플러그인을 설치하면 Web UI에서도 확인할 수 있습니다.

 

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

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

github.com

 

Scouter APM 설치 in Linux

Scouter APM 1. APM이란? ☞ Application Performance Management의 약자로 Application 성능 관리 서비스를 의미합니다. ☞ TPS, 접속량, 리소스 사용률 등 Application의 성능과 관련된 지표들을 자세하게 모니터링 할

lilo.tistory.com

 

Scouter Paper 설치 in Linux

SCOUTER PAPER 1. SCOUTER PAPER ☞ SCOUTER WEB API를 활용하여 만들어진 Scouter의 성능 지표를 웹을 통해 확인할 수 있게 해주는 대시보드 SW입니다. ☞ PC, 모바일 모두 접속 가능한 반응형 웹을 가지고 있습

lilo.tistory.com

 

 

Tomcat과 Scouter APM 연동

"scouter-all-2.17.1.tar.gz" 압축 파일 중 "agents.host, agents.java" 디렉토리를 원하는 위치에 위치시킵니다.

# mkdir -pv /app/scouter-agent

# tar xzf scouter-all-2.17.1.tar.gz
# cp -a /app/scouter/{agent.host,agent.java}  /app/scouter-agent/

 

Scouter Agent 설정을 하기 위해  agent.host, agent.java 안 conf 디렉토리의 scouter.conf 작성합니다.

<host 설정>
# vi /app/scouter-agent/agent.host/conf/scouter.conf

## Scouter APM Address
net_collector_ip=192.168.0.12
net_collector_udp_port=6100
net_collector_tcp_port=6100


## CPU Alert
cpu_alert_enabled=true
cpu_warning_pct=80
cpu_fatal_pct=90
cpu_check_period_ms=180000
cpu_warning_history=30
cpu_fatal_history=30
#cpu_alert_interval_ms=300000

## Disk Alert
disk_alert_enabled=true
disk_warning_pct=80
disk_fatal_pct=90

## Memory Alert
mem_alert_enabled=true
mem_warning_pct=80
mem_fatal_pct=90


<java 설정>
# vi /app/scouter-agent/agent.java/conf/scouter.conf

## Agent Name
obj_name=WAS-1
## Scouter APM Address
net_collector_ip=192.168.0.12
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

 

Agent 실행을 위해 아래의 명령어를 수행합니다.

<WAS 서버에서 실행>
# cd /app/scouter-agent/agent.host

# ./host.sh
nohup: redirecting stderr to stdout
  ____                  _
 / ___|  ___ ___  _   _| |_ ___ _ __
 \___ \ / __/   \| | | | __/ _ \ '__|
  ___) | (_| (+) | |_| | ||  __/ |
 |____/ \___\___/ \__,_|\__\___|_|
 Open Source S/W Performance Monitoring
 Scouter version 2.17.1

Configure -Dscouter.config=./conf/scouter.conf

 

Tomcat 설정 파일 중 하나에 Scouter와 관련된 설정을 추가합니다.

(1. catalina.sh  , 2. startup.sh , 3. setenv.sh)

<WAS 서버>
# vi /app/tomcat9/instance1/bin/setenv.sh

#!/bin/sh

#===========================================================
#Tomcat  Setting
#===========================================================
CATALINA_HOME=/app/tomcat9/engine
CATALINA_BASE=/app/tomcat9/instance1
JAVA_HOME=$(echo $(readlink -f /etc/alternatives/java) |  sed -e 's/\/bin\/java//g')
PATH=$PATH:$JAVA_HOME/bin:/bin:/sbin
LOG_DIR=$CATALINA_BASE/logs
export JAVA_HOME PATH CATALINA_HOME CATALINA_BASE LOG_DIR


#===========================================================
#JVM Memory Setting
#===========================================================
CATALINA_OPTS="-server"
CATALINA_OPTS="${CATALINA_OPTS} -Xms256m"
CATALINA_OPTS="${CATALINA_OPTS} -Xmx256m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MetaspaceSize=128m"
CATALINA_OPTS="${CATALINA_OPTS} -XX:MaxMetaspaceSize=128m"


#===========================================================
#GC, Heapdump Setting
#===========================================================
CATALINA_OPTS="${CATALINA_OPTS} -XX:+UseG1GC"
CATALINA_OPTS="${CATALINA_OPTS} -verbose:gc"
CATALINA_OPTS="${CATALINA_OPTS} -Xloggc:${LOG_DIR}/gc.log_$(date +%Y%m%d%H%M%S)"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDetails"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCTimeStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintGCDateStamps"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+HeapDumpOnOutOfMemoryError"
CATALINA_OPTS="${CATALINA_OPTS} -XX:HeapDumpPath=${LOG_DIR}/java_pid.hprof"
CATALINA_OPTS="${CATALINA_OPTS} -XX:+PrintAdaptiveSizePolicy"

#===========================================================
#Scouter Setting
#===========================================================
export SCOUTER_AGENT_DIR=/app/scouter-agent/agent.java
export JAVA_OPTS="$JAVA_OPTS -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar"
export JAVA_OPTS="$JAVA_OPTS -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/scouter.conf"
export JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=WAS-1"
[Scouter 설정 값]
1. -javaagent: Java 프로그램에서 사용되는 모든 클새스 로딩 활동을 가로 챌 수 있는 역할로 WAS의 주요 지표를 Scouter Collecter Server에 전달합니다.
2. -Dscouter.config: agent.java의 conf 파일을 지정
3. -Dobj_name: Object Name으로 agent.java의 conf 파일에 지정한 obj_name으로 작성

 

설정한 Tomcat을 실행합니다.

# /app/tomcat9/instance1/bin/start.sh
Using CATALINA_BASE:   /app/tomcat9/instance1
Using CATALINA_HOME:   /app/tomcat9/engine
Using CATALINA_TMPDIR: /app/tomcat9/instance1/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.x86_64/jre
Using CLASSPATH:       /app/tomcat9/engine/bin/bootstrap.jar:/app/tomcat9/engine/bin/tomcat-juli.jar
Using CATALINA_OPTS:   -server -Xms256m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseG1GC -verbose:gc -Xloggc:/app/tomcat9/instance1/logs/gc.log_20221106145607 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/tomcat9/instance1/logs/java_pid.hprof -XX:+PrintAdaptiveSizePolicy
Tomcat started.

# ps -ef |grep java |grep -v "grep"
root        2207       1  1 23:42 pts/0    00:00:06 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el8_5.x86_64/jre/bin/java -Djava.util.logging.config.file=/app/tomcat9/instance1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -javaagent:/app/scouter-agent/agent.java/scouter.agent.jar -Dscouter.config=/app/scouter-agent/agent.java/conf/scouter.conf -Dobj_name=scouter-tomcat -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -server -Xms256m -Xmx256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseG1GC -verbose:gc -Xloggc:/app/tomcat9/instance1/logs/gc.log_20221107234242 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/app/tomcat9/instance1/logs/java_pid.hprof -XX:+PrintAdaptiveSizePolicy -Dignore.endorsed.dirs= -classpath /app/tomcat9/engine/bin/bootstrap.jar:/app/tomcat9/engine/bin/tomcat-juli.jar -Dcatalina.base=/app/tomcat9/instance1 -Dcatalina.home=/app/tomcat9/engine -Djava.io.tmpdir=/app/tomcat9/instance1/temp org.apache.catalina.startup.Bootstrap start

 

잘 설정되었는지 확인하기 위해 Scouter에 접속하여 접속 현황을 확인해봅니다.

(초기 계정 정보   ID: admin  ,  PW: admin)

Scouter APM 실행 화면

 

 

 

한 서버에 여러 개의 WAS 인스턴스가 존재하는데 agent,java 설정을 어떻게 해야되나요?

☞ agent.java 디렉토리의 conf 파일을 인스턴스 이름으로 구분하여 여러개의 conf 파일을 작성합니다.

 

java agent 설정 파일을 작성합니다.

<Instance1 설정>
# vi /app/scouter-agent/agent.java/conf/instance1.conf

## Agent Name
obj_name=Instance-1

## Scouter APM Address
net_collector_ip=192.168.0.12
net_collector_udp_port=6100
net_collector_tcp_port=6100


<Instance2 설정>
# vi /app/scouter-agent/agent.java/conf/instance2.conf

## Agent Name
obj_name=Instance-2

## Scouter APM Address
net_collector_ip=192.168.0.12
net_collector_udp_port=6100
net_collector_tcp_port=6100

 

Tomcat 설정 파일 중 하나에 Scouter와 관련된 설정을 추가합니다.

 

<Instance-1>
# vi /app/tomcat9/instance1/bin/setenv.sh

#!/bin/sh

... 생략 ...

#===========================================================
#Scouter Setting
#===========================================================
export SCOUTER_AGENT_DIR=/app/scouter-agent/agent.java
export JAVA_OPTS="$JAVA_OPTS -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar"
export JAVA_OPTS="$JAVA_OPTS -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/instance1.conf"
export JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=Instance-1"


<Instance-2>
# vi /app/tomcat9/instance2/bin/setenv.sh

#!/bin/sh

... 생략 ...

#===========================================================
#Scouter Setting
#===========================================================
export SCOUTER_AGENT_DIR=/app/scouter-agent/agent.java
export JAVA_OPTS="$JAVA_OPTS -javaagent:${SCOUTER_AGENT_DIR}/scouter.agent.jar"
export JAVA_OPTS="$JAVA_OPTS -Dscouter.config=${SCOUTER_AGENT_DIR}/conf/instance2.conf"
export JAVA_OPTS=" ${JAVA_OPTS} -Dobj_name=Instance-2"​

 

설정이 완료되면 Scouter agent host와 WAS를 기동한다.

<Scouter Agent 기동 - WAS 서버>
# cd /app/scouter-agent/agent.host
# ./host.sh


<WAS 기동>
# /app/tomcat9/instance1/bin/start.sh
# /app/tomcat9/instance2/bin/start.sh

 

반응형