Skip to main content

WAS 에이전트 설치

WAS 에이전트 다운로드

클라우드 전용 에이전트 설치안내

Cloud APM 콘솔에 로그인하여 설치에 사용할 파일을 다운로드한다.

WAS AGENT탭의 "Download WAS Agent" 다운로드 또는 Copy 버튼으로 클립보드에 복사한다.

설치형 전용 설정 > 리소스

OPENMARU APM 콘솔에 로그인하여 설치에 사용할 파일을 다운로드한다.

다운로드 또는 마우스 오른쪽 "링크 주소 복사"를 이용하여 클리보드에 복사한다.

Java 1.5 버전인 경우

Java버전이 1.5라면 APM WAS Agent for Java 1.5 Install File - Ver. 5.1.0파일을 다운로드 받습니다.

에이전트를 설치하기 위한 파일을 다운로드 합니다.

Linux 운영체제를 사용하는 경우 아래와 같이 wget 명령을 사용하여 직접 다운로드 할 수 있습니다.

Java 1.8버전이상을 권장합니다.

  • WAS 에이전트 다운로드
$ wget https://cloud.openmaru.io/api/v1/projects/[프로젝트ID]/download/was-agent.zip

WAS 에이전트 설치

  • 에이전트 설치파일 압축해제
$ unzip khan-agent-5.1.0.zip
  • khan-agent.jar 심볼릭 링크 파일 생성

khan-agent 버전 업그레이드 작업이 용이하도록 아래와 같이 Symbolic Link 파일을 생성한다.

WAS의 에이전트 설정에서 khan-agent.jar 파일을 사용하도록 하며, khan-agent 버전 업그레이드시 심볼릭 링크를 제거하고 새로운 버전의 파일로 새로 생성하면 됩니다.

$ ln -s khan-agent-5.1.0.jar khan-agent.jar

WAS 에이전트 설정

WAS 서버 인스턴스 이름 설정 방법

khan-agent.conf 파일 내 설정

# WAS Instance's ID
# Can use RANDOM string or IP ADDRESS
# ex: instanceid-${RANDOM:4} ==> instanceid-qfPb
# ex: instanceid-${RANDOM:4}-s ==> instanceid-qfPb-s
# ex: instanceid-${IPADDR:3} ==> instanceid-23-10 (ip=192.168.23.10)
# ex: instanceid-${HOSTNAME:-:2} ==> instanceid-apm (hostname=test-apm)
# ex: instanceid-${HOSTNAME:-:2}-${IPADDR:3}-${RANDOM:4}-s ==> instanceid-apm-23.10-afcg-s (hostname=test-apm, ip=192.168.23.10)
  • ${RANDOM:4} : 알파벳 대문자/소문자 조합 무작위 4글자 생성
  • ${IPADDR:3} : IP 주소 중 3번째 자리 요소 추가
  • ${IPADDR:-1} : IP 주소 중 뒤에서 부터 첫번째 자리 요소 추가
  • ${HOSTNAME:-:2} HOSTNAME 중 -로 구분하여 두번째 자리에 있는 문자열 추가

khan-agent.conf 설정 파일

아래 설정파일 중 변경할 부분은 형광색으로 표시하였습니다.

#
# Copyright (c) 2015. Opennaru, Inc.
# http://www.opennaru.com/
#

################### OPENMARU APM Agent Configuration File ###################

# Group name
# ex: grp-${HOSTNAME:-:1}-${HOSTNAME:-:2} ==> grp-jbossweb53-20 (hostname=jbossweb53-20-8tp2j)

application.name=MyGroup

# KHAN [monitoring] Server's IP Address and Port
khan.host=192.168.0.77
khan.port=80
#khan.tls=false

# specify this machine's ip address, only valid ip address of this machine can be used.
#khan.agent.ip=192.168.10.11

user.key=NIL

# WAS Instance's ID
# Can use RANDOM string or IP ADDRESS
# ex: instanceid-${RANDOM:4} ==> instanceid-qfPb
# ex: instanceid-${RANDOM:4}-s ==> instanceid-qfPb-s
# ex: instanceid-${IPADDR:3} ==> instanceid-23-10 (ip=192.168.23.10)
# ex: instanceid-${HOSTNAME:-:2} ==> instanceid-apm (hostname=test-apm)
# ex: instanceid-${HOSTNAME:-:2}-${IPADDR:3}-${RANDOM:4}-s ==> instanceid-apm-23.10-afcg-s (hostname=test-apm, ip=192.168.23.10)

instance.id=khan11
agent.type=WAS

# agent's compression algorithm : snappy(default), lzw
#agent.compress.type=lzw

# APDEX satisfied response time in seconds(duration <= apdex = SATISFIED, duration > apdex*4 = APDEXTHRESHOLD, else = TOLERATING)
apdex.threshold=3.0

# enable transaction trace
transaction.trace.enabled=true
# transaction trace threshold in ms
transaction.trace.threshold=500
transaction.trace.threshold.under.detail.enabled=false

# Maximum number of lines to save trace
transaction.trace.max.line=2000

# enable sql capture
sql.capture.enabled=true

transaction.trace.sql.parameterize=false
# sampling intervals
transaction.trace.sampling.interval=1

# SQL query's stacktrace threshold in ms
transaction.trace.sql.stacktrace.threshold=30000

# SQL query max size (default unlimit)
#transaction.trace.sql.max.size=-1

# SQL query parameter max size (default 40)
transaction.trace.sql.parameter.max.size=40

# SQL query parameter array maximum size(default 128)
transaction.trace.sql.parameter.array.max.size=128

# enable request header trace : default = false
#transaction.trace.header.enabled=true
# request header trace keys
transaction.trace.header.keys=

# enable request cookie trace : default = true
#transaction.trace.cookie.enabled=false
# request cookie trace keys : default JSESSIONID
transaction.trace.cookie.keys=JSESSIONID

# enable session trace : default = false
#transaction.trace.session.enabled=false
# session trace keys(class maximum depth : 2)
# ex: loginId, user:userId
transaction.trace.session.keys=

# add parameter to url (key1:maxLen,key2,maxLen)
# ex) p1:10,p2:10
#transaction.trace.parameter.keys=

# enable Async Thread transaction
#transaction.trace.async.thread.enabled=false

# Async threads to exclude package
#transaction.trace.async.package.exclude.startswith=

# Tracing transaction topology information : default = true
transaction.trace.topology.enabled=true

# gRPC Tracing : default = false
# also set 'transaction.trace.async.thread.enabled=true'
#grpc.enabled=false

# database fetch count warning
#database.fetch.warnings=10000,20000,30000

# database connection leak warning
database.conn_leak.warning=false

# jndi lookup enabled
# default : true
#jndi.lookup.enabled=false

# enable or disable whole database pool statistics monitoring
# default : true
# can override with environment : KHAN_DB_POOL_STAT_ENABLED
#database.pool.stat.enabled=false

# include patterns : comma separated datasource name patterns list to include
# can override with environment : KHAN_DB_POOL_INCLUDE_PATTERNS
#database.pool.stat.include.patterns=

# exclude patterns : comma separated datasource name patterns list to exclude
# can override with environment : KHAN_DB_POOL_EXCLUDE_PATTERNS
#database.pool.stat.exclude.patterns=

include.packages=

# exclude url patterns(Regular Expression), can use multiple regexp with comma(,)
# ex) transaction.exclude.url.patterns=/test/test.*,/abc/test.*
#transaction.exclude.url.patterns=
transaction.exclude.url.patterns=\\*

# exclude url suffix
transaction.exclude.url.suffix=.gif,.swf,.css,.hwp,.xls,.xlsx,.eot,.pptx,.ppt,.asf,.pdf,.txt,.flv,.mp3,.mp4,.doc,.html,.wmv,.jpg,.zip,.wav,.png,.ttf,.mov,.ico,.js,.woff,.xml,.htc,.NewProxyConnection,.DelegatingConnection,.SqlSessionTemplate,.CUBRIDConnection,.PoolableConnection,.WrappedConnection,/bea_wls_deployment_internal/DeploymentService,.GIF,.SWF,.CSS,.HWP,.XLS,.XLSX,.EOT,.PPTX,.PPT,.ASF,.PDF,.TXT,.FLV,.MP3,.MP4,.DOC,.HTML,.WMV,.JPG,.ZIP,.WAV,.PNG,.TTF,.MOV,.ICO,.JS,.WOFF,.XML,.HTC,.svg
transaction.exclude.url.suffix.exclude=true

# exclude http status code
# ex) transaction.exclude.http.status.codes=500,404
transaction.exclude.http.status.codes=

# Even if there is an error, it is displayed as successed(200).
# ex) transaction.ignore.error.status.codes.urls=500:/500.jsp,404:
transaction.ignore.error.status.codes.urls=

# ex) transaction.ignore.error.status.codes.urls.message=404:/test/http/rest/target.*,404:/error,500:/esvy/.*:NullPointerException
transaction.ignore.error.status.codes.urls.message=

# exclude browser user-agent : ^openmaru-health-check$(default)
transaction.exclude.user.agent.patterns=^openmaru-health-check$

# comma seperated url patterns that consider the status code to be 500
# transaction.errorpage.url.patterns=/session/force500.*,/test/test500.*

# Display when an exception is included
transaction.with.exception.view.enabled=true

# Display when an HTTP API Error is included : default error status codes - 400 more than
transaction.with.external.http.error.view.enabled=true
transaction.with.external.http.error.codes=

# Request Traffic Controller(RTC) WALL
# enabled = false (default)
#traffic.control.enabled=true

# pattern.1=/url_startswith.*, maximum allowed concurrent requests
#traffic.control.pattern.1=/test/slow.*, 100
#traffic.control.pattern.2=/test/test.*, 100
#traffic.control.pattern.3=/test/TestServlet.*, 100

# -----------------------------
# User Behavior Tracker Options
# -----------------------------
ubt.check.enabled=false
# User Behavior check type : ip, cookie
ubt.check.type=ip
# UBT check alert count
ubt.check.user.count=100
# UBT check interval(Seconds)
ubt.check.time.interval=1
# UBT check alert prevent duplication(Seconds)
ubt.check.alert.dup.prevent=30

# 2 : use KHANUSER Cookie - Default
# 1 : use JSESSION_ID Cookie
# 0 : not use cookie - use client ip
user.tracking.mode=2
# cookie option - default false
#user.tracking.secure=false
# cookie option - default false
#user.tracking.http.only=false

# 99 : last in the array
# N : index number in array (Last value without N)
# 0 : first in array
# -1 : original - Default
#user.tracking.client.ip.selection=-1

# TransactionId \uC815\uBCF4\uB97C HTTP Response Header \uC5D0 \uCD94\uAC00
enable.tid.header=true

# user think time : default 5 minutes, max 15 minutes
# Can override with KHAN_USER_THINK_TIME environment
#user.thinktime.minutes=5

# Merge by removing duplicates
user.tracking.v2.enabled=true

# Tracking by login ID, default false
user.tracking.v2.login.enabled=false
# ex) session|loginId
# ex) session|user:loginId - desction : user(session key, LoginUser class), loginId(POJO, Member variable), class maximum depth : 2
# ex) header|loginId
# ex) cookie|loginId
user.tracking.v2.login.key=session|loginId

# To Disable Servlet Filter interceptor set false, default true
#enable.filter.interceptor=false

# To Disable ibatis interceptor set false, default true
#enable.ibatis.interceptor=false

# To Disable mybatis interceptor set false, default true
#enable.mybatis.interceptor=false

# To Disable HTTP interceptor set false, default true
#enable.http.interceptor=false

# To Disable HTTP Pool interceptor set false, default true
#enable.http.pool.count=false

# To Disable SpringBatch interceptor set false, default true
#enable.springbatch.interceptor=false

# To enable logging interceptor set true, default false
enable.logging.interceptor=false

# comma separated logging levels to capture logging levels
# logging levels : TRACE,DEBUG,INFO,WARN,ERROR,FATAL
trace.logging.levels=WARN,ERROR,FATAL

# Push transaction details immediately(KAPM-1801), default : false
#push.transaction.no.delay=true

# Stop services after execute standlone application
# Only for standalone java application. default : false
#stop.services.after.execute=true

# count first request as active user
activeUser.countFirstRequest=false

user.charset.encoding=UTF-8
user.interceptor.file=user-interceptor.conf

# log directory
#log.dir=/svc/test/khan-agent/log

# log file name
log.file=khan-agent-${INSTANCEID}.log

# log level
log.level=INFO

# log files backup index( default : maintain 3 files)
log.backup.index=3

# log rotation file size : default 10M
log.rotate.size=10240000

# khanSessionManager
khan.session.manager.enabled=false

# enable session count( default: true)
active.session.count.enabled=true

# enable audit log file(default: false)
#audit.log.enabled=true
# User interceptor's user id key name(default: USER_ID)
#audit.log.userIdKey=USER_ID
# audit log directory(default: agent log directory)
#audit.log.dir=
# audit log file name(default: audit-{date: yyyy-MM-dd}.log )
#audit.log.filename=audit-{date: yyyy-MM-dd}.log
# audit log file rotating policy
#audit.log.policies=daily: 00:00
# audit log backup file counts
#audit.log.backups=3

khan-agent.conf 설정파일의 각 항목에 대한 설명은 다음 표를 참고하십시오.

khan-agent.conf 설정 상세

(JVM 환경변수(-D), 시스템 환경변수(export or set) 사용 시 괄호항목 사용)
설정 우선순위 : JVM OPTS > OS ENV > khan-agent.conf
설정파일의 모든 옵션은 "OMAPM*" 접두어를 시작으로 대문자화 및 .(점)을 *(언더바)로 변경하여 환경변수로 활용 할 수 있습니다.

설정항목(환경 변수)설명기본값즉시 적용
OMAPM_AGENT_ENABLE에이전트 활성화 여부 (OPENMARU BASE WAS Container 이미지 사용 시 가능)
application.name (OMAPM_APPLICATION_NAME)OPENMARU APM 콘솔에서 표시되는 애플리케이션 그룹의 이름을 설정합니다. 같은 이름으로 설정된 인스턴스들이 그룹핑되어 표시됩니다. 예) hostname 이 "jboss-eap-egov-65-zs95r" 와 같을 때 eap-${HOSTNAME:-:5} ⇒ eap-65N/A
khan.host (OMAPM_HOST)OPENMARU APM 서버의 IP 를 입력한다. 또는 도메인을 입력 하는 경우 http:// or ws:// (tls 의 경우 https:// or wss://)
khan.port (OMAPM_PORT)OPENMARU APM 서버의 포트 번호를 입력합니다.
khan.tls (OMAPM_TLS)TLS 활성화 여부false
khan.agent.ip
(OMAPM_AGENT_IP)
설정하지 않은 경우, 머신의 디폴트 IP 주소를 기본값으로 사용합니다. /etc/hosts 파일에 IP 주소가 등록되지 않은 경우 127.0.0.1이 선택되는 경우가 있습니다. 이 경우 khan.agent.ip에 머신 IP 주소를 입력하여 설정합니다.
user.key현재 사용하지 않음
instance.id (OMAPM_INSTANCE_ID)OPENMARU APM에 표시될 인스턴스의 이름으로 각 인스턴스들이 고유한 이름을 사용하도록 설정합니다.
apdex.threshold
(OMAPM_APDEX_THRESHOLD)
사용자 만족도 지수를 계산할 때 사용하는 사용자가 만족하는 응답시간(기본값 : 3.0, 단위 : 초)3.0
transaction.trace.enabled
(OMAPM_TRANSACTION_TRACE_ENABLED)
트랜잭션 Trace를 사용할 것인지 설정true
transaction.trace.threshold
(OMAPM_TRANSACTION_TRACE_THRESHOLD)
지정된 시간 이상의 트랜잭션들을 서버로 전송합니다.(단위 : ms)500
sql.capture.enabled
(OMAPM_SQL_CAPTURE_ENABLED)
SQL 정보를 수집할 것인지 여부를 설정true
transaction.trace.sql.parameterizeSQL 문장에 있는 ‘ ‘ 들을 모두 제거하는 옵션false
transaction.trace.sampling.interval
(OMAPM_TRANSACTION_SAMPLING_INTERVAL)
트랜잭션 정보를 샘플링하여 전송하는 설정 10으로 설정하면 동일한 URL 10번 중 1개만 전송한다.1
transaction.trace.sql.stacktrace.thresholdSQL 쿼리가 지정된 시간(ms) 이상 수행중이면, Stack Trace를 생성한다.30000
transaction.trace.sql.max.size
(OMAPM_TRANSACTION_TRACE_SQL_MAX_SIZE)
SQL 쿼리 길이를 제한하여 수집한다. Since 5.1.0-8.8-1: 제한없음O
transaction.trace.sql.parameter.max.size
(OMAPM_TRANSACTION_TRACE_SQL_PARAMETER_MAX_SIZE)
SQL 쿼리 파라미터 길이를 제한하여 수집한다. Since 5.1.0-8.840O
transaction.trace.sql.parameter.array.max.size
(OMAPM_TRANSACTION_TRACE_SQL_PARAMETER_ARRAY_MAX_SIZE)
SQL 쿼리 파라미터 갯수를 제한하여 수집한다. Since 5.1.0-8.9.7, 10.3.2128O
transaction.trace.async.thread.enabled비동기 Thread 모니터링여부. Runnable, ForkJoinTask, CompletableFuture Since 5.1.0-8.8false
transaction.trace.async.package.exclude.startswith모니터링에서 제외할 비동기 Thread (설정한 Package이름과 시작 문자열이 같은 경우 제외) Since 5.1.0-8.8.2
database.pool.stat.enable
(OMAPM_DB_POOL_STAT_ENABLED)
Connection Pool 정보 수집 여부true
database.fetch.warningsSQL ResultSet Fetch시 컴마로 구분된 지정된 개수를 Fetch하면 경고를 출력한다. 10000,20000,30000,40000 으로 설정하면 ResultSet Fetch개수가 1만,2만,3만,4만개가 되면 경고 메시지가 출력된다.10000,20000,30000O
database.conn_leak.warning
(OMAPM_DB_CONN_LEAK_WARNING)
데이터베이스 연결풀의 Leak이 발생할 경우 경고 메시지를 출력할 것인지 설정true
transaction.exclude.url.patterns트랜잭션 정보 수집에 제외할 URL 패턴을 지정합니다. 컴마로 구분하여 여러 개의 패턴을 지정할 수 있습니다. 예) /test/test.,/abc/test.
transaction.exclude.url.suffix트랜잭션 정보 수집에서 제외할 URL 확장자를 지정합니다. JPG, GIF 등 Static 컨텐츠에 대한 URL들이 제외되도록 설정되어 있습니다.
transaction.exclude.url.suffix.exclude위 설정(transaction.exclude.url.suffix)을 사용할 것인지 지정합니다.true
transaction.exclude.http.status.codeshttp 상태 코드 수집 제외
ex) transaction.exclude.http.status.codes=500,404
O
transaction.ignore.error.status.codes.urls트랜잭션이 에러(상태코드)거나 에러 Exception 로그로 WARN인 정보를 T-Map에서 정상으로 표시 (호출 통계에서도 정상으로 표시)O
transaction.ignore.error.status.codes.urls.message
(OMAPM_TRANSACTION_IGNORE_ERROR_STATUS_CODES_URLS_MESSAGE)
트랜잭션에서 특정 에러(상태코드) 와 URL, 에러 메세지 정보와 일치하는 정보를 T-Map 에서 정상으로 표시 (호출 통계에서도 정상으로 표시) 예) transaction.ignore.error.status.codes.urls.message=404:/test/http/rest/target.,404:/error,500:/esvy/.:NullPointerExceptionO
transaction.exclude.user.agent.patterns수집에서 제외한 브라우저^openmaru-health-check$
traffic.control.enabled설정된 Request URL 패턴에 대하여 동시 처리 갯수를 초과하면 Exception 을 발생시킨다. (web.xml error-code 500)false
traffic.control.pattern.INDEXtraffic.control.pattern.1=/test/slow., 100 traffic.control.pattern.2=/test/test., 100true
ubt.check.enabled클라이언트(ip, cookie)의 요청이 특정 시간에 특정 횟수를 발생 시키면 경고 알림을 발생한다.false
ubt.check.type동일 클라이언트 판단 구분 (ip, cookie)ip
ubt.check.user.count체크 횟수100
ubt.check.time.interval체크 간격(초)1
ubt.check.alert.dup.prevent중복 경고 알림 제외 시간(초)30
user.charset.encoding
(OMAPM_USER_CHARSET_ENCODING)
사용자 Character Set 인코딩을 설정합니다.UTF-8
user.interceptor.file원하는 메소드의 수행시간을 측정할 수 있도록 user-interceptor 설정 파일을 지정합니다.user-interceptor.conf
log.dir에이전트 로그 파일이 생성될 디렉터리를 지정합니다.
log.file에이전트 로그 파일의 이름을 지정합니다.
log.level에이전트 로그 레벨을 설정합니다.INFO
log.backup.index유지할 에이전트 로그파일의 개수를 지정합니다.10
log.rotate.size로그파일이 Rotate 될 크기를 지정합니다. (기본값 : 100MB)102400000
khan.session.manager.enabledOPENMARU Cluster를 사용 할 경우 활성화한다.false
active.session.count.enabled
(OMAPM_ACTIVE_SESSION_COUNT_ENABLED)
WAS 세션수를 수집 여부true
enable.http.interceptor
(OMAPM_ENABLE_HTTP_INTERCEPTOR)
HTTP 요청 정보 수집 여부(REST API 호출)trueX
enable.http.pool.count
(OMAPM_ENABLE_HTTP_POOL_COUNT)
HTTP Pool Count 수집 여부
Since 5.1.0-8.8.13, 5.1.0-10.0.3
trueX
enable.logging.interceptor
(OMAPM_ENABLE_LOGGING_INTERCEPTOR)
애플리케이션 로그를 수집할 지 결정 애플리케이션에서 설정한 SLF4J, Log4j, Log4j 2, Logback의 오류를 수집falseX
trace.logging.levels
(OMAPM_TRACE_LOGGING_LEVELS)
애플리케이션 로그를 수집할 오류 레벨을 지정 TRACE, DEBUG, INFO, WARN, ERROR, FATAL을 컴마로 구분하여 지정한다.WARN,ERROR,FATAL
transaction.trace.max.line
(OMAPM_TRANSACTION_TRACE_MAX_LINE)
트랜잭션 트레이스 상세 수집 최대 라인수2000O
user.tracking.v2.enabled
(OMAPM_USER_TRACKING_V2_ENABLED)
개선된 액티브유저 사용여부(인스턴스간 중복 제거)true
user.tracking.v2.login.enabled
(OMAPM_USER_TRACKING_V2_LOGIN_ENABLED)
로그인 아이디 액티브유저 지표 사용여부false
user.tracking.v2.login.key
(OMAPM_USER_TRACKING_V2_LOGIN_KEY)
# ex) session|loginId
# ex) session|user:loginId - desction : user(session key, LoginUser class), loginId(POJO, Member variable), class maximum depth : 2
# ex) header|loginId
# ex) cookie|loginId
transaction.trace.header.enabled
(OMAPM_TRANSACTION_TRACE_HEADER_ENABLED)
Request Header 수집 여부false
transaction.trace.header.keys
(OMAPM_TRANSACTION_TRACE_HEADER_KEYS)
Request Header 수집할 key 리스트 ,(콤마)로 구분JSESSIONID
transaction.trace.session.enabled
(OMAPM_TRANSACTION_TRACE_SESSION_ENABLED)
Session 수집 여부false
transaction.trace.session.keys
(OMAPM_TRANSACTION_TRACE_SESSION_KEYS)
SESSION 수집할 key 리스트 ,(콤마)로 구분 (POJO 객체 구분은 ":" 기호 사용 ex) loginId, user:userId
transaction.trace.parameter.keys
(OMAPM_TRANSACTION_TRACE_PARAMETER_KEYS)
URL에 매개 변수 추가 :(콜론)으로 최대 사이즈 지정 ex) p1:10,p2:10
push.transaction.no.delay
(OMAPM_PUSH_TRANSACTION_NO_DELAY)
Transaction 메시지 바로 보내기Pure Java Cron 스캐쥴 Java 실행 후 종료
stop.services.after.execute
(OMAPM_STOP_SERVICES_AFTER_EXECUTE)
Pure Java 실행 후 종료 되지 않는 경우 사용 ex) push.transaction.no.delay=true 적용 후 프로세스 종료되지 않는 경우Pure Java Cron 스캐쥴 Java 실행 후 종료

user-interceptor.conf 설정 파일

OPENMARU APM의 에이전트는 내부적으로 Java EE 및 주로 많이 사용되는 Framework들의 주요 메소드들의 수행시간을 측정하여 Transaction 상세 정보에서 표시하고 있습니다.

사용자가 작성한 애플리케이션의 수행시간을 측정하고자 할 때, user-interceptor.conf 파일의 설정을 통하여 측정할 수 있습니다.

user-interceptor.conf 파일에서 설정하는 메소드들이 너무 많은 경우 Transaction 상세정보 데이터가 매우 커서 문제가 될 가능성이 있습니다. 수행시간을 측정하기 원하는 메소드만 지정하여 설정하여야 합니다.

이외에도 개발시 활용한다면, 수행시간 측정을 원하는 메소드 상단에 @TraceMethod 어노테이션만 사용하면 수행시간을 측정하여 표시합니다. @TreaceMethod는 OPENMARU APM 에이전트를 사용할 때만 사용되며, 다른 경우엔 무시합니다.

khan-agent.conf 파일의 user-interceptor 설정파일 부분
user.interceptor.file=user-interceptor.conf

user.interceptor.file의 기본값은 user-interceptor.conf 입니다.

파일의 위치는 khan-agent.jar 파일이 있는 같은 디렉터리이면 됩니다.

Hooking할 패턴 정의 파일만 따로 보관할 수 있어 편리합니다.

아래 파일에 Rule을 정의합니다. Java 프로퍼티 파일의 규칙을 따릅니다.

#는 주석이며, package/class=method_pattern 형태로 지정합니다.

user-interceptor.conf 파일 설정 방법
  • 패키지, 클래스 이름을 지정한 특정 메소드를 Hooking하고자 할때
    메소드 명을 컴마(,)로 구분하여 지정하면 됩니다.
com/opennaru/package/ABCDEFMethodOnly=abc, def
  • 특정 패키지/클래스 내의 모든 메소드를 Hooking하고자 할때
com/opennaru/package/AllMethodsInThisClass=
  • 특정 패키지/클래스 내의 특정 이름으로 시작하는 메소드를 Hooking하고자 할때
    정규식을 사용할 수 있습니다.
com/opennaru/package/regexpMethodsInThisClass=/set.*/, /get.*/
  • 특정 패키지 하위의 모든 패키지/클래스/메소드를 Hooking하고자 할때
com/opennaru/package/allsubclasses/.*=
  • 특정 패키지 하위의 모든 패키지/클래스의 특정(정규식) 이름의 메소드 이름만 Hooking하고자 할때
com/opennaru/allsubpackagesandclasses/.*=/set.*/, /get.*/
  • 서브 패키지 이름의 구분은 '/' 나 '.' 을 모두 사용
com.opennaru.allsubpackagesandclasses/.*=/set.*/, /get.*/
  • 클래스 이름에도 정규식 사용 가능
com/opennaru/anyclassesstartwith.*=/set.*/, /get.*/

user-interceptor.conf 설정 예제

아래는 전자정부 프레임워크의 특정 메소드, 클래스들을 Hooking하여 수행시간을 측정하는 예제 파일입니다.

# egovframework.let 하위의 모든 패키지/클래스/메소드
egovframework.let/.*=

# egovframework/let/cop/bbs/service 패키지 아래 Board로 시작하는 클래스의 set으로 시작하는 메소드와 getBbs로 시작하는 메소드를 제외한 get으로 시작하는 메소드
egovframework/let/cop/bbs/service/Board.*=/set.*/, /get(?!Bbs.*).*/

# egovframework 하위 모든 패키지/클래스의 get/set으로 시작하는 모든 메소드
egovframework/.*=/set.*/, /get.*/

# 패키지 이름을 '/'로 찾을 수 있음
egovframework/let/cop/bbs/service/BoardMaster=/setBb.*/,/setRe.*/

# 패키지 이름을 '.'로 찾을 수 있음
egovframework.let.cop.bbs.service.BoardMaster=/setBb.*/,/setRe.*/

환경변수를 이용한 User Interceptor 설정 방법

user-interceptors.conf 파일에 설정한 인터셉터 설정에, OMAPM_INTERCEPTORS 환경변수를 이용하여 사용자 인터셉터를 추가 설정할 수 있다.

설정 우선순위 : JVM OPTS > OS ENV > user-interceptors.conf

세미콜론( ; )로 구분된 문자열을 입력한다.

설정항목(환경 변수)설명기본값
OMAPM_INTERCEPTORS사용자가 작성한 애플리케이션의 Class.Method 의 수행시간을 측정

실제 적용방법

예) com/opennaru/test.=set.;com/test.=get.

## 값의 양쪽에 "(쌍따음표)로 묶음
## 그렇지 않을경우 ;(세미콜론) 적용이 되지 않음
## "(쌍따음표) 없이 할 경우 \(역슬래시) 를 이용

export OMAPM_INTERCEPTORS="egovframework/let/cop/bbs/service/Board.*=/set.*/, /get(?!Bbs.*).*/;egovframework/.*="

시작 스크립트의 에이전트 옵션

WAS나 Java가 시작될 때 옵션을 다음과 같이 지정하면 WAS 에이전트가 시작된다.

export JAVA_OPTS=" $JAVA_OPTS -javaagent:/svc/test/khan-agent/khan-agent.jar "
export JAVA_OPTS=" $JAVA_OPTS -Dkhan.config.file=khan-agent-test11.conf"
export JAVA_OPTS=" $JAVA_OPTS -noverify"

khan.config.file에 파일의 이름을 지정합니다. 파일의 위치는 khan-agent.jar 파일이 있는 같은 디렉터리에 있으면 됩니다.

WAS 종류별로 에이전트 설정의 위치나 특별한 옵션이 필요한 경우가 있어 다음 장에서 상세히 설명한다.