설치 점검

WAS 다시 시작

애플리케이션 서버를 다시 시작합니다.
구동 로그를 확인했을 때 다음과 같은 WhaTap 캐릭터 로그가 보인다면 JAVA_OPTS 설정이 완료된 것입니다.

Nov 16, 2016 3:06:40 AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deployment of web application directory /var/lib/tomcat7/webapps/ROOT has finished in 577 ms
Nov 16, 2016 3:06:40 AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Nov 16, 2016 3:06:40 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 3984 ms
_  	 ____       ______
| | /| / / /  ___ /_  __/__ ____
| |/ |/ / _ \/ _ `// / / _ `/ _ \
|__/|__/_//_/\_,_//_/  \_,_/ .__/
        	             /_/
Just Tap, Always Monitoring
WhaTap Agent version 0.3.9 20161115

에이전트 연결 확인

생성한 프로젝트 화면에 Agent가 나타나면 적용이 완료된 것입니다.

Screenshot 2020 12 03 test 14737   Application Monitoring4
Figure 1. 프로젝트
Agent 명의 기본값은 {type}-{ip2}-{ip3}-{port}입니다.
속성을 추가하거나 이름을 변경하고자 하는 경우 에이전트 설정하기 / 애플리케이션 / 네이밍을 확인해 보세요.

엔드포인트 설정

엔드포인트 (Endpoint)란 트랜잭션이 시작되는 지점을 의미합니다.
HTTP 서블릿의 경우 HttpServlet.service() 혹은 Filter.doFilter()가 트랜잭션의 시작이고 이곳을 트랜잭션 엔드포인트라고 합니다.

Back Stack 확보

사용하는 TCP 포트를 알고 있는 경우

소켓 통신 데몬, DB 작업을 수행하는 배치와 같이 트랜잭션에서 사용되는 TCP 포트가 명확한 경우 "stacklog_socket_port" 옵션을 사용하여 Back Stack을 확보할 수 있습니다.

stacklog_socket_port 옵션을 통해 확보된 Back Stack 정보 Agent 로그에서 확인할 수 있습니다.

whatap.conf
#오라클 1521포트를 사용하는 것이 명확한 DB 배치 데몬인 경우
stacklog_socket_port=1521

사용하는 Method를 알고 있는 경우

트랜잭션에서 사용되는 Method를 대략이나마 알고 있는 경우 메소드 프로파일링 옵션을 사용하여 Back Stack을 확보할 수 있습니다. 사용하는 메소드를 알고 있더라도 트랜잭션 엔드포인트보다 먼저 호출되는 경우라면 적절한 포인트를 찾기 어려워집니다. 따라서 트랜잭션 수행 과정 중에 사용되는 메소드를 지정해야 합니다.

whatap.conf
# 메소드 프로파일을 설정합니다.
hook_method_patterns=io.whatap.KnownClass.knownMethod,*.IKnowClassName.*
# 프로파일 대상 메소드가 트랜잭션 시작점이 되도록 지정합니다.
trace_auto_transaction_enabled=true
# 트랜잭션 시작 시 StackTrace를 기록합니다.
trace_auto_transaction_backstack_enabled=true

사전 정보가 불명확한 경우

  1. [서버] [더보기] [로디드 클래스]의 목록을 바탕으로 사용될만한 클래스, 메소드를 유추할 수 있습니다. 이후 메소드 프로파일 설정을 통하여 Back Stack를 시도합니다.

  2. [서버] [더보기] [스레드 목록]에서 전체 스레드를 확인 후 이들 중 실제 트랜잭션에 해당하는 스레드의 StackTrace 를 확보하여 유추합니다. 또는 kill -3를 통한 javacore나 jstack 명령어를 통한 수행 시점 StackTrace를 확보합니다. 이후 메소드 프로파일 설정을 통하여 Back Stack를 시도합니다.

엔드포인트 선별

Back Stack 확보를 통해 확보한 Stack 정보로 트랜잭션 엔드포인트를 추정합니다.

확보한 Stack이 다음과 같다면, execute, process, run 중 하나의 메소드가 트랜잭션 엔드포인트가 될 수 있음을 메소드 명으로 유추할 수 있습니다. 이후 디컴파일, 소스분석 과정등을 통해 이들 중 엔드포인트로서 적절한 메소드를 찾아냅니다.

Sample Stack
jdbc.FakePreparedStatement.executeQuery(FakePreparedStatement.java),
com.virtual.dao.SelectDAO.execute2(SelectDAO.java:29),
com.virtual.web.SimulaNonHttp.execute(SimulaNonHttp.java:147), (1)
com.virtual.web.SimulaNonHttp.process(SimulaNonHttp.java:76), (2)
com.virtual.web.SimulaNonHttp.run(SimulaNonHttp.java:100) (3)
1 execute
2 process
3 run
프로파일 정보는 트랜잭션 종료와 함께 전송하고 서버에서는 이를 히트맵 하나의 점으로 표현합니다.
트랜잭션 엔드포인트 선별의 중요한 기준은 "종료" 여부입니다.

엔드포인트 지정

명확한 Endpoint를 알고 있는 경우라면 다른 과정 없이 트랜잭션 엔드포인트 지정 해주시면 됩니다. 선별한 트랜잭션 엔드포인트를 hook_service_patterns, hook_httpservlet_classes 옵션을 사용하여 설정합니다.

whatap.conf
#Non-HTTP인 경우 hook_service_patterns 사용
hook_service_patterns=com.virtual.web.SimulaNonHttp.process

#HTTP인 경우 hook_httpservlet_classes 사용
hook_httpservlet_classes=io.whatap.KnownServletClass

이름 정의

대부분의 경우 메소드 명칭으로 충분히 트랜잭션을 구분할 수 있습니다. 그래서 와탭은 메소드의 첫번째 String 파라미터를 트랜잭션 이름으로 사용합니다. 그런데 문자열 파라미터가 없는 경우에는 커스터마이징을 해야하는데 이때 와탭의 플러그인을 사용합니다.

Object url =((java.util.HashMap)$point.getArgs()[0]).get("url");
$ctx.service((String)url);
//println(“url=“+url);
Plugin에 관한 자세한 설명은 통합하기 / Java Plugin에서 확인해 보세요.

옵션

다양한 옵션은 NON HTTP 트랜잭션 추적 항목에서 확인해 보세요.