3. WAS 에이전트 설치
이 장에서 하는 일
WAS 에이전트는 Java 애플리케이션 안에서 일어나는 일을 수집합니다. 사용자 요청 한 건이 어떤 경로로 처리됐는지, 어느 SQL 이 느렸는지, 외부 API 호출이 얼마나 걸렸는지, 힙 메모리와 GC 가 어떤 상태인지를 봅니다.
왜 필요한가 — 서버 자원은 멀쩡한데 응답이 느린 경우가 많습니다. 그 원인은 대개 특정 SQL, 외부 연동 지연, 커넥션 풀 고갈처럼 애플리케이션 안쪽에 있습니다. 시스템 에이전트로는 보이지 않는 영역입니다.
어떻게 붙나 — 애플리케이션 코드는 고치지 않습니다. WAS 기동 옵션에
-javaagent:khan-agent.jar 한 줄을 넣으면, JVM 이 클래스를 적재할 때 에이전트가 측정 코드를
자동으로 끼워 넣습니다. 설치의 본질은 이 옵션을 넣고 WAS 를 재기동하는 것입니다.
어디에 설치하나 — 모니터링할 WAS 인스턴스마다 한 벌씩. 같은 서버에 WAS 가 여러 개면 인스턴스마다 설정 파일을 따로 둡니다.
설치를 마치면 — 콘솔에 해당 인스턴스가 나타나고 트랜잭션이 실시간으로 흐릅니다.
설치 흐름
| 단계 | 하는 일 | 왜 |
|---|---|---|
| 1 | 설치 파일 내려받기 | 사용하는 Java 버전에 맞는 에이전트를 받습니다 |
| 2 | WAS 서버에 압축 풀기 | WAS 가 읽을 수 있는 자리에 둡니다 |
| 3 | 접속 정보와 인스턴스 이름 설정 | 어느 APM 서버로 보낼지, 콘솔에 어떤 이름으로 보일지 정합니다 |
| 4 | 기동 옵션에 -javaagent 추가 | 이 한 줄이 에이전트를 JVM 에 붙입니다 |
| 5 | WAS 재기동 | 옵션은 기동 시점에만 적용됩니다 |
4단계에서 옵션을 어느 파일에 넣는지는 WAS 제품마다 다릅니다. 제품별 위치와 예제는 4. WAS 종류별 에이전트 설정 방법에 있습니다.
WAS 에이전트 다운로드
콘솔에서 설치 파일을 내려받습니다. 설치형과 클라우드는 내려받는 화면만 다르고, 파일을 받은 뒤 절차는 같습니다.
설정 > 가이드 & 다운로드
OPENMARU APM 콘솔에 로그인하여 설치에 사용할 파일을 다운로드합니다.

다운로드 또는 마우스 오른쪽 "링크 주소 복사"를 이용하여 클립보드에 복사합니다.
Java버전이 1.5라면 APM WAS Agent for Java 1.5 Install File - Ver. 5.1.0파일을 다운로드 받습니다.
설치 대상이 원격 Linux 서버라면, 복사한 링크 주소를 그 서버에서 wget 으로 바로 받는 편이
빠릅니다. 아래는 명령 형태의 예시이며, 주소는 방금 복사한 값을 씁니다.
- WAS 에이전트 다운로드
$ wget "<복사한 링크 주소>"
[클라우드 전용] 에이전트 설치 안내 > WAS AGENT 탭
클라우드 APM 을 쓰는 경우 내려받는 자리가 다릅니다.

WAS AGENT 탭의 "Download WAS Agent" 로 내려받거나 Copy 버튼으로 링크를 클립보드에 복사합니다. 파일을 받은 뒤부터는 위와 같습니다.
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 중 -로 구분하여 두번째 자리에 있는 문자열 추가
WAS 에이전트 설정 파일
에이전트의 동작은 압축을 푼 디렉터리의 khan-agent.conf 한 파일이 정합니다.
설치 파일에 기본값이 채워진 상태로 들어 있으므로, 처음에는 아래 네 항목만 고치면 됩니다.
1) 꼭 고쳐야 하는 것
application.name=MyGroup # 콘솔에 표시할 애플리케이션 그룹 이름
khan.host=192.168.0.77 # APM 서버 주소
khan.port=80 # APM 서버 포트
instance.id=khan11 # 이 WAS 인스턴스의 이름 (그룹 안에서 구분됩니다)
application.name— 같은 이름을 쓴 인스턴스끼리 한 그룹으로 묶여 보입니다. 서비스 단위로 정하십시오.khan.host·khan.port— 에이전트가 데이터를 보낼 곳입니다. 값이 틀리면 WAS 는 정상 기동되지만 콘솔에 아무것도 나타나지 않습니다.instance.id— 콘솔에서 이 인스턴스를 가리키 는 이름입니다. 같은 그룹 안에서 겹치지 않게 정하십시오. 자동으로 만들려면 앞 절의 WAS 서버 인스턴스 이름 설정 방법을 참고하십시오.
여기까지만 고치고 WAS 를 재기동하면 모니터링이 시작됩니다. 아래는 필요할 때 조정하는 것들입니다.
2) 무엇을 얼마나 수집할지 — 트랜잭션 Trace
느린 요청의 처리 경로를 남길지, 어느 정도부터 남길지를 정합니다.
transaction.trace.enabled=true # 상세 추적 사용 여부
transaction.trace.threshold=500 # 이 시간(ms)을 넘은 요청만 상세히 남긴다
transaction.trace.max.line=2000 # 한 요청에 남길 최대 줄 수
threshold 를 낮출수록 더 많이 남지만 저장 용량과 부하가 함께 늘어납니다. 기본값
500ms 로 시작해 필요할 때 조정하십시오.
3) SQL 을 어떻게 남길지
sql.capture.enabled=true # SQL 수집 여부
transaction.trace.sql.parameterize=false # 바인드 값을 그대로 남길지 여부
transaction.trace.sql.parameter.max.size=40 # 남길 파라미터 값의 최대 길이
parameterize=false 는 실제 바인드 값을 그대로 남깁니다. 주민등록번호·연락처 같은 값이
쿼리 파라미터로 들어간다면 true 로 두어 값을 감추십시 오.
4) 무엇을 빼고 볼지 — URL 필터링
정적 파일이나 헬스 체크 요청까지 트랜잭션으로 세면 통계가 왜곡됩니다. 기본값에 이미 흔한 확장자와 헬스 체크 패턴이 들어 있습니다.
transaction.exclude.url.suffix=.gif,.css,.js,.png,… # 확장자로 제외
transaction.exclude.url.patterns= # 정규식으로 제외
transaction.exclude.user.agent.patterns=^openmaru-health-check$
5) 서비스 만족도 기준 — APDEX
apdex.threshold=3.0 # 이 시간(초) 안에 끝나면 "만족"으로 셉니다
이 값의 4배를 넘으면 "불만" 으로 셉니다. 서비스 성격에 맞춰 정하십시오 — 조회 위주 화면은 낮게, 배치성 요청이 섞이면 높게 잡습니다.
설정을 바꾼 뒤
대부분의 항목은 WAS 를 재기동해야 적용됩니다. 재기동 없이 반영되는 항목은 다음 절의 표에서 "즉시 적용" 열로 확인할 수 있습니다.
전체 항목과 기본값은 WAS 에이전트 설정 상세에 주제별로 정리되어
있습니다. 같은 값을 JVM 옵션(-D)이나 환경변수로도 줄 수 있으며, 우선순위는
JVM 옵션 > 환경변수 > khan-agent.conf 입니다.
khan-agent.conf 설정파일의 각 항목에 대한 설명은 다음 표를 참고하십시오.
WAS 에이전트 설정 상세
(JVM 환경변수(-D), 시스템 환경변수(export or set) 사용 시 괄호항목 사용)
설정 우선순위 : JVM OPTS > OS ENV > khan-agent.conf
설정파 일의 모든 옵션은 "OMAPM*" 접두어를 시작으로 대문자화 및 .(점)을 *(언더바)로 변경하여 환경변수로 활용 할 수 있습니다.
기본 설정 (연결 및 인스턴스)
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
| — | OMAPM_AGENT_ENABLE | 에이전트 활성화 여부 (OPENMARU BASE WAS Container 이미지 사용 시 가능) | ||
application.name | OMAPM_APPLICATION_NAME | OPENMARU APM 콘솔에서 표시되는 애플리케이션 그룹의 이름을 설정합니다. 같은 이름으로 설정된 인스턴스들이 그룹핑되어 표시됩니다. 예) hostname 이 "jboss-eap-egov-65-zs95r" 와 같을 때 eap-${HOSTNAME:-:5} ⇒ eap-65 | N/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 |
트랜잭션 Trace 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
transaction.trace.enabled | OMAPM_TRANSACTION_TRACE_ENABLED | 트랜잭션 Trace를 사용할 것인지 설정 | true | |
transaction.trace.threshold | OMAPM_TRANSACTION_TRACE_THRESHOLD | 지정된 시간 이상의 트랜잭션들을 서버로 전송합니다.(단위 : ms) | 500 | |
transaction.trace.sampling.interval | OMAPM_TRANSACTION_SAMPLING_INTERVAL | 트랜잭션 정보를 샘플링하여 전송하는 설정 10으로 설정하면 동일한 URL 10번 중 1개만 전송합니다. | 1 | |
transaction.trace.max.line | OMAPM_TRANSACTION_TRACE_MAX_LINE | 트랜잭션 트레이스 상세 수집 최대 라인수 | 2000 | O |
transaction.trace.async.thread.enabled | — | 비동기 Thread 모니터링여부. Runnable, ForkJoinTask, CompletableFuture Since 5.1.0-8.8 | false | |
transaction.trace.async.package.exclude.startswith | — | 모니터링에서 제외할 비동기 Thread (설정한 Package이름과 시작 문자열이 같은 경우 제외) Since 5.1.0-8.8.2 | ||
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 |
SQL 수집 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
sql.capture.enabled | OMAPM_SQL_CAPTURE_ENABLED | SQL 정보를 수집할 것인지 여부를 설정 | true | |
transaction.trace.sql.parameterize | — | SQL 문장에 있는 ' ' 들을 모두 제거하는 옵션 | false | |
transaction.trace.sql.stacktrace.threshold | — | SQL 쿼리가 지정된 시간(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.8 | 40 | O |
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.2 | 128 | O |
데이터베이스 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
database.pool.stat.enable | OMAPM_DB_POOL_STAT_ENABLED | Connection Pool 정보 수집 여부 | true | |
database.fetch.warnings | — | SQL ResultSet Fetch 건수가 지정한 값에 이르면 경고를 남긴다. 쉼표로 여러 단계를 지정한다 — 예: 10000,20000,30000,40000 으로 두면 1만·2만·3만·4만 건에서 각각 경고가 나옵니다. | 없음 (설정해야 동작) | O |
database.conn_leak.warning | OMAPM_DB_CONN_LEAK_WARNING | 데이터베이스 연결풀의 Leak이 발생할 경우 경고 메시지를 출력할 것인지 설정 | true |
URL 필터링 및 에러 처리
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
transaction.exclude.url.patterns | — | 트랜잭션 정보 수집에 제외할 URL 패턴을 지정 컴마(,)로 구분하여 여러 개의 패턴 지정 가능 ex) /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.codes | — | http 상태 코드 수집 제외 ex) transaction.exclude.http.status.codes=500,404 | O | |
transaction.ignore.error.status.codes.urls | — | 트랜잭션이 에러(상태코드)거나 에러 Excepㄷㄴㅅtion 로그로 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/.:NullPointerException | O | |
transaction.exclude.user.agent.patterns | — | 수집에서 제외한 브라우저 | ^openmaru-health-check$ |
트래픽 제어 (Request Traffic Controller)
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
traffic.control.reject.enabled | — | 설정된 Request URL 패턴에 대하여 동시 요청 수가 제한을 초과할 때 RejectedException 발생 (web.xml error-page) | false | |
traffic.control.thread.dump.enabled | — | 설정된 Request URL 패턴에 대하여 동시 요청 수가 제한을 초과할 때 Thread Dump 수집 | false | |
traffic.control.pattern.INDEX | — | traffic.control.pattern.1=/test/slow., 100 traffic.control.pattern.2=/test/test., 100 |
사용자 행동 추적 (User Behavior Tracker)
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
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 |
사용자 추적 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
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 : 5 # ex) header\ |
인터셉터 / 로깅 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
enable.http.interceptor | OMAPM_ENABLE_HTTP_INTERCEPTOR | HTTP 요청 정보 수집 여부(REST API 호출) | true | X |
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 | true | X |
enable.logging.interceptor | OMAPM_ENABLE_LOGGING_INTERCEPTOR | 애플리케이션 로그를 수집할 지 결정 애플리케이션에서 설정한 SLF4J, Log4j, Log4j 2, Logback의 오류를 수집 | false | X |
trace.logging.levels | OMAPM_TRACE_LOGGING_LEVELS | 애플리케이션 로그를 수집할 오류 레벨을 지정 TRACE, DEBUG, INFO, WARN, ERROR, FATAL을 컴마로 구분하여 지정합니다. | WARN,ERROR,FATAL |
로그 / 세션 / 기타 설정
설정 항목 (khan-agent.conf) | 환경 변수 | 설명 | 기본값 | 즉시 적용 |
|---|---|---|---|---|
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.enabled | — | OPENMARU Cluster를 사용 할 경우 활성화합니다. | false | |
active.session.count.enabled | OMAPM_ACTIVE_SESSION_COUNT_ENABLED | WAS 세션수를 수집 여부 | true | |
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 설정
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
세미콜론( ; )로 구분된 문자열을 입력합니다.
설정 항목 (khan-agent.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"
khan.config.file에 파일의 이름을 지정합니다. 파일의 위치는 khan-agent.jar 파일이 있는 같은 디렉터리에 있으면 됩니다.
WAS 종류별로 에이전트 설정의 위치나 특별한 옵션이 필요한 경우가 있어 다음 장에서 상세히 설명합니다.