스크립트 플러그인
Java 에이전트에서 제공하는 플러그인 옵션을 통해 사용자가 원하는 코드를 트레이스 데이터에 주입하거나 메소드 수행 전후로 부가 정보를 추가하는 방법을 제공합니다. 메소드 시작/종료 시점에 특정 코드를 실행할 위치를 설정하는 옵션과 사용자 정의 pool을 모니터링하기 위한 클래스 설정 방법을 포함합니다. 실제 플러그인 적용 사례를 통해 구체적인 활용 방안을 제시하며, 모니터링의 유연성과 세밀함을 높일 수 있는 다양한 설정 예시와 API 사용법을 안내합니다.
플러그인 옵션
Java 에이전트 플러그인은 메소드 시작/종료 부분에 삽입해 실행 합니다. 플러그인을 적용할 위치(클래스, 메소드)는 에이전트 옵션으로 설정할 수 있습니다.
-
hook_trace_helper_start_patterns메소드 시작 부분에 트레이스 플러그인을 삽입할 지점(클래스, 메소드)을 설정합니다. 플러그인 코드는
$WHATAP_HOME/plugin/TraceHelperStart.x 파일에 작성하세요. -
hook_trace_helper_end_patterns메소드 종료 부분에 트레이스 플러그인을 삽입할 지점(클래스, 메소드)를 설정합니다. 플러그인 코드는
$WHATAP_HOME/plugin/TraceHelperEnd.x 파일에 작성하세요. -
hook_trace_helper_patterns메소드 시작/종료 양쪽에 트레이스 플러그인을 삽입할 지점(클래스, 메소드)을 설정합니다. 플러그인 코드는
$WHATAP_HOME/plugin/TraceHelperStart.x,$WHATAP_HOME/plugin/TraceHelperEnd.x 파일에 각각 작성하세요. -
custom_pool_classes사용자 정의 pool을 모니터링 하기 위해 pool 사용량 정보를 가진 클래스를 설정합니다. 플러그인 코드는
$/WHATAP_HOME/plugin/CustomPool.x에 작성합니다.
플러그인 설정 예시
여러 개의 클래스를 설정하는 경우 쉼표(,)를 구분자로 이용하세요. 패키지 이름의 문자열 일부 혹은 전부를 '*'로 치환할 수 있습니다.
-
패키지와 메소드 이름을 설정하는 경우
whatap.bytecode.instrument.PluginTestA.testA,whatap.bytecode.instrument.PluginTestB.testB -
패키지와 메소드 이름을
*로 치환하는 경우*PluginTestA.testA,whatap.bytecode.instrument.PluginTestB.**.testA, *PluginTestB.testB -
전체를 대상으로 하는 경우
*.* -
Custom Pool을 설정하는 경우
Custom Pool은 식별자@패키지 명 형태로 설정합니다.
예시, Class 명 앞에
whatap_plugin_guide라는 식별자를 설정니다. 식별자와 클래스는 @로 구분합니다.whatap_plugin_guide@com.ibm.ws.connectionpool.monitor.ConnectionPoolStats
플러그인 코드 작성 예시
대부분의 경우 오브젝트를 반환하므로 명시적 type casting 처리가 필요합니다. 다음은 플러그인 코드 작성 예시입니다.
설정한 메소드 시작 시간을 트레이스에 기록하기
-
Java 에이전트
hook_trace_helper_patterns옵션에 적용할 메소드를 whatap.conf 파일에 작성하세요.$WHATAP_HOME/whatap.confhook_trace_helper_patterns=org.apache.catalina.connector.RequestFacade.* -
TraceHelperStart.x 파일에 플러그인 코드를 작성하세요.
$WHATAP_HOME/plugin/TraceHelperStart.x// String prefix에 클래스명, 메소드명을 대입하세요.
String prefix = $point.class1 + "." + $point.method;
// 와탭 트레이스 속성 명칭을 `prefix` + "st" 로 현재 시간을 설정하세요.
$ctx.setAttribute(prefix + "st", new Long(System.currentTimeMillis()));
// 트레이스 정보에 현재 시간을 추가하세요.
$ctx.profile(prefix + " Start", new java.util.Date().toString());
트레이스 내역에 메소드 시작시간을 다음과 같이 표시합니다.
