Java Agent Guide
제목 : Java Agent Guide
작성자 : WhaTap Support
이메일 : support@whatap.io
날짜 : 2020-06-18
버전 : 1.2.2
설명 : 본 문서는 WhaTap Java 에이전트에 대해 설명합니다.
1. 지원 환경
Web Application Server (WAS) 뿐 아니라 데몬 및 배치 애플리케이션 등 JVM에서 동작하는 모든 어플리케이션에 적용 할 수 있습니다.
Java1.5 이하는 support@whatap.io 로 별도 문의 주세요.
1.1. JVM
지원 범위 | 환경 | OS | JVM 버전 |
---|---|---|---|
Fully Support |
Java |
JVM이 구동되는 모든 OS |
Java6 이상 |
Limited Support |
Java |
JVM이 구동되는 모든 OS |
Java1.5 이하 |
1.2. WAS
-
Tomcat, Jboss, JEUS, Weblogic, WebSphere 등 Java EE Spec 준수하는 모든 Application Server
https://www.oracle.com/technetwork/java/javaee/overview/compatibility-jsp-136984.html
2. 일반 설치
와탭 APM 모니터링 서비스를 사용하기 위해서는 프로젝트를 구성하고 대상 서버에 에이전트를 설치해야 합니다.
설치에 앞서 필요한 사항은 설치 사전 안내서 를 참고 해 주세요.
Linux/Unix 환경에서 서버접속 계정은 WAS 또는 애플리케이션을 관리하는 계정을 사용합니다. |
2.1. 프로젝트 생성
모니터링 프로젝트를 생성하기 위해 프로젝트 생성 버튼을 선택합니다.

Java 아이콘을 선택합니다. 프로젝트명과 데이터 서버 지역(Region), 그룹을 선택한 뒤 저장 버튼을 클릭합니다.

2.2. 라이센스 발급
생성한 프로젝트를 선택하면 설치 안내 페이지로 이동합니다.

설치 안내 페이지에서 라이센스를 발급 받습니다. 라이센스는 프로젝트단위로 고유한 값을 가집니다.

2.3. 에이전트 다운로드
라이센스를 발급 받은 후에 ‘에이전트 파일 다운로드’ 버튼이 활성화 됩니다. 해당 버튼을 눌러 와탭 에이전트 파일을 다운로드 받습니다.

서버에서 직접 다운로드 받을 수도 있습니다.
wget https://service.whatap.io/agent/whatap.agent.java.tar.gz
모니터링 대상 서버에 접속후 적절한 위치에 에이전트 파일의 압축을 해제합니다.
이 위치가 $WHATAP_HOME 이 됩니다.
tar -zxvf whatap.agent.java.tar.gz
2.4. 설정 적용
$WHATAP_HOME/whatap.conf 파일 내용에 라이선스키와 데이터 수집 서버 주소가 정상적으로 들어가 있는지를 확인합니다.
값이 없다면 설치 안내 페이지의 설정값을 복사해 붙여 넣습니다.
license={라이센스 키}
whatap.server.host={수집서버 IP}
UI를 통해 다운로드 받은 경우 whatap.conf 에 설정값이 들어가 있습니다. 서버에서 직덥 다운로드 한 경우라면 설치안내 페이지의 라이센스키와 수집 서버 주소를 별도 입력해야 합니다. |
2.5. 에이전트 적용
적용 대상(WAS, Batch 및 Daemon 과 같은 Java애플리케이션)에 javagent 옵션으로 whatap agent path를 추가 합니다.
-javaagent:/whatap/whatap.agent-#.#.#.jar
재시작 후 프로세스 정보에서 설정한 옵션이 보인다면 설정 적용이 된 것입니다.

2.6. 에이전트 적용(예)
환경별 설정 위치는 설치 페이지 및 애플리케이션 서버 별 적용 절차 에서 확인할 수 있습니다.
2.6.1. Tomcat – Linux
catalina.sh 상단에 JAVA_OPTS 을 추가 합니다.
########## WHATAP ############
WHATAP_HOME=/whatap (1)
WHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent-*.jar | sort | tail -1`
JAVA_OPTS="${JAVA_OPTS} -javaagent:${WHATAP_JAR} "
########## WHATAP ############
1 | WHATAP_HOME 을 지정합니다. |
2.6.2. Tomcat – Windows
catalina.bat 상단에 JAVA_OPTS 를 추가 합니다.
rem ########## WHATAP ############
set WHATAP_HOME=C:\whatap (1)
for /f %%f in ('dir /b /on %WHATAP_HOME%\whatap.agent-*.jar') do set last=%%f
set WHATAP_JAR=%last%
if x%JAVA_OPTS:whatap=%==x%JAVA_OPTS% (
set JAVA_OPTS=%JAVA_OPTS% -javaagent:%WHATAP_HOME%\%WHATAP_JAR%
)
rem ########## WHATAP ############
1 | WHATAP_HOME 을 지정합니다. |
2.6.3. 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
2.7. 적용 확인
생성한 프로젝트 화면에 Agent가 보여지면 적용이 완료 된 것입니다.

Agent 명의 기본값은 {type}-{ip2}-{ip3}-{port} 입니다. 속성을 추가 하거나 이름을 변경하고자 하는 경우 에이전트 네이밍 을 참고 해 주시면 됩니다. |
2.8. 에이전트 업데이트
관리 | 에이전트 업데이트
메뉴를 선택 후 최신버전
또는 최신 버전으로 모든 에이전트에 다운로드
버튼을 클릭합니다.
다운로드 된 에이전트는 어플리케이션 재시작시 자동 적용됩니다.

2.10. 에이전트 롤백
관리 | 에이전트 업데이트
메뉴를 선택 후 다른 버전들
버튼을 클릭합니다.

롤백을 원하는 버전을 선택한 후 선택된 버전으로 모든 에이전트에 다운로드
혹은 선택된 버전
버튼을 이용하여 롤백을 원하는 서버들만 롤백합니다.

이후 에이전트 설치시 수정했던 스크립트에 WHATA_JAR 설정을 롤백을 원하는 버전으로 바꿔야 합니다.

적용된 에이전트는 어플리케이션 재시작시 자동 적용됩니다.
3. 고급 설치
Tomcat 과 같은 일반적인 Servlet 기반이 아닌 경우, 특수한 환경에서도 적용 할 수 있도록 다양한 설치 방안을 제공 합니다.
프로젝트 생성 및 에이전트 다운로드는 일반 설치과정과 동일합니다.
3.1. Attach 방식
Attach 방식으로 WhaTap Agent 를 적용 할 수 있습니다.
com.sun.tools.attach API를 사용해 애플리케이션 재시작 없이 WhaTap Agent를 적용 합니다.
ps 명령을 사용해 PID 를 확인 합니다.
$ ps -ef | grep tomcat | grep -v 'grep'
ec2-user 3058 1 1 06:11 pts/0 00:00:02 /home/ec2-user/jdk1.8.0_111/bin/java -Djava.util.logging.config.file=/home/ec2-user/apache-tomcat-7.0.72/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/home/ec2-user/apache-tomcat-7.0.72/endorsed -classpath /home/ec2-user/apache-tomcat-7.0.72/bin/bootstrap.jar:/home/ec2-user/apache-tomcat-7.0.72/bin/tomcat-juli.jar -Dcatalina.base=/home/ec2-user/apache-tomcat-7.0.72 -Dcatalina.home=/home/ec2-user/apache-tomcat-7.0.72 -Djava.io.tmpdir=/home/ec2-user/apache-tomcat-7.0.72/temp org.apache.catalina.startup.Bootstrap start
확인한 PID를 파라미터로 $WHATAP_HOME/attach.sh(bat) 를 실행합니다.
$ ./attach.sh 3058
JAVA_HOME=/jdk1.8.0_111
_ ____ ______
| | /| / / / ___ /_ __/__ ____
| |/ |/ / _ \/ _ `// / / _ `/ _ \
|__/|__/_//_/\_,_//_/ \_,_/ .__/
/_/
Just Tap, Always Monitoring
WhaTap Agent version 0.4.2 20161123
Admin: ec2-user
PID: 3128
Java Path: /jdk1.8.0_111/jre
Java Version: 1.8.0_111
AttachAgent Success : [3058] org.apache.catalina.startup.Bootstrap start
프로젝트 화면에서 에이전트가 정상 등록 되었는지 확인 합니다.
Attach 는 일회성 적용 입니다. Attach 적용 후 일반 설치에 사용되는 “javaagent” 옵션을 적용 하면 애플리케이션 재기동 후에도 모니터링이 유지됩니다. |
3.2. Java 1.4 이하
JDK1.4 환경에서 와탭 모니터링은 제약사항이 있으며, 설치 방법도 차이가 있습니다.
JDK1.4를 위한 에이전트 모듈은 support@whatap.io로 요청 바랍니다. |
whatap.java14.tracer-[version].jar
3.2.1. boot.jar 생성
setup.sh를 사용하여 boot.jar파일을 생성합니다.
$setup.sh [JAVA_HOME]
만약 [JAVA_HOME]을 지정하지 않으면 현재 패스에 걸려 있는 JDK의 위치를 자동으로 인식합니다.
whatap.java14.boot-1.0.2.jar
3.3. Maven 활용
Maven pom.xml 에 에이전트를 정의해 버전과 설정을 관리 할 수 있습니다.
3.3.1. pom.xml 설정
<!-- repository 를 추가 합니다 -->
<repositories>
<repository>
<id>io.whatap</id>
<name>WhaTap maven repository</name>
<url>http://repo.whatap.io/maven</url>
</repository>
</repositories>
<!-- dependency 를 추가 합니다. -->
<dependencies>
<dependency>
<groupId>io.whatap</groupId>
<artifactId>whatap.agent</artifactId>
<version>2.0_12</version> (1)
<scope>provided</scope>
</dependency>
</dependencies>
1 | 릴리즈 노트 참고해 버전 정보 지정 합니다. |
3.4. PaaS 환경
PaaS 환경은 배포 대상 어플리케이션에 WhaTap Agent 와 설정을 포함하여 배포합니다.
3.4.1. IBM BlueMix
IBM BlueMix 는 컨테이너로 WebSphere Liberty 환경을 제공합니다. Liberty는 WebSphere Application Server 와 다른 경량화 환경으로 Spring Boot 가 동작하는 방식과 유사합니다.
설정 환경 예제 입니다. 가이드에 따른 환경 구성시 로컬 개발환경에서 생성되는 파일들은 아래와 같습니다.
whatap@vmwas01:/apps/bluemix/java-helloworld$ ls -alrt
합계 64
drwxrwxr-x 3 whatap whatap 4096 10월 29 13:13 ..
-rw-rw-r-- 1 whatap whatap 1079 10월 29 13:13 .classpath
-rw-rw-r-- 1 whatap whatap 1184 10월 29 13:13 .project
-rw-rw-r-- 1 whatap whatap 39 10월 29 13:13 .gitignore
-rw-rw-r-- 1 whatap whatap 151 10월 29 13:13 CONTRIBUTING.md
drwxrwxr-x 2 whatap whatap 4096 10월 29 13:13 .settings
-rw-rw-r-- 1 whatap whatap 2823 10월 29 13:13 pom.xml
-rw-rw-r-- 1 whatap whatap 122 10월 29 13:13 manifest.yml
-rw-rw-r-- 1 whatap whatap 3522 10월 29 13:13 README.md
-rw-rw-r-- 1 whatap whatap 11323 10월 29 13:13 LICENSE
drwxrwxr-x 3 whatap whatap 4096 10월 29 13:13 src
drwxrwxr-x 2 whatap whatap 4096 10월 29 13:13 target
drwxrwxr-x 8 whatap whatap 4096 10월 29 13:13 .git
drwxrwxr-x 6 whatap whatap 4096 10월 29 15:26 .
${APP_HOME}에서 src/main/resources/whatap-agent/ 디렉토리를 생성하고 jar 파일, conf 파일을 복사 합니다.
$ mkdir -p src/main/resources/whatap-agent/
$ cp /apps/whatap/whatap.agent.tracer-1.5.4.jar src/main/resources/whatap-agent/
$ cp /apps/whatap/whatap.conf src/main/resources/whatap-agent/
whatap.conf 설정은 PaaS 가 아닌 환경과 동일하게 적용합니다. 단, 적용 후 에이전트명 식별에 어려움이 있을 수 있으므로 상황에 맞는 에이전트명명[1] 정책을 적용 합니다.
${APP_HOME}/manifest.yml 파일에 옵션을 추가 합니다. yml 파일이므로 공백, 들여쓰기 기준을 잘 맞춰야 합니다.
---
applications:
- name: sample-java-helloworld
random-route: true
memory: 256M
path: target/JavaHelloWorldApp.war
#여기서부터 추가됩니다.
env:
JAVA_OPTS: "-javaagent:/{APPLICATION_DIR}/WEB-INF/classes/whatap-agent/whatap.agent.tracer-1.5.4.jar -Dorg.osgi.framework.bootdelegation=whatap.* "
3.4.2. Elastic Beanstalk
Elastic Beanstalk를 사용하여 배포시 Whatap 서비스를 적용하는 방법에 대하여 설명합니다.
Spring Boot 결과물을 jar로 배포 할 경우
jar형태로 배포시에는 .ebextensions의 내용이 적용되지 않아 필요한 파일들을 압축하여 zip형태로 배포합니다.
-
필요한 설정파일들
-
.elasticbeanstalk/config.yml : eb 명령을 실행하는 디렉토리 하위에 자동으로 생성
-
.ebextensions/{config_name}.config : eb 설정을 위한 파일
-
Procfile : JVM command line옵션을 설정하기 위한 파일
-
{application}.jar : 실행할 applicaion.jar파일
-
Service에 적용할 whatap.agent의 파일을 압축하여 S3(혹은 다운로드 할 수 있는 public 경로)에 업로드합니다.
$ ls agent/ paramkey.txt whatap.agent-2.0_25.jar whatap.conf
zip -r whatap-agent.zip agent
".ebextension/{config_name}.config" 파일에 download할 whatap agent경로를 입력합니다.
압축 파일 형태로 만들어 다운로드 할 수 있게 만들어 둔 경우 eb실행 시 자동으로 다운로드 받아서 압축을 풀어줍니다.
sources:
target directory:
S3경로
sources:
/home/webapp:
http://s3.ap-northeast-2.amazonaws.com/{bucket-name}/whatap-agent.zip
whatap agent의 옵션들을 추가한 JVM command를 입력하여 Procfile을 작성합니다.
web: java -javaagent:${WHATAP_JAR_FILE_PATH} -Dwhatap.name=${WHATAP_NAME} -Dwhatap.okind=${WHATAP_OKIND_NAME} -Dwhatap.server.home=${APPLICAION_PATH} -Dwhatap.conf.path=${WHATAP_HOME} -jar ${APPLICAIONT}.jar
web: java -javaagent:/home/webapp/agent/whatap.agent-2.0_25.jar -Dwhatap.name=bootTest -Dwhatap.okind=test -Dwhatap.server.home=/var/app/current -Dwhatap.conf.path=/home/webapp/agent -jar whatap-boot-test.jar
Procfile과 .ebextensions폴더와 {application}.jar파일을 압축합니다.
zip -r {application}.zip Procfile .ebextensions/ {application}.jar
".elasticbeanstalk/config.yml" 파일에 deploy할 zip파일의 경로를 추가합니다.
deploy:
artifact: /path/to/{application}.zip
eb deploy 명령어를 실행하여 배포합니다.
eb deploy
자세한 내용은 AWS 가이드 문서를 참고 부탁드립니다.
https://docs.aws.amazon.com/ko_kr/elasticbeanstalk/latest/dg/Welcome.html
3.5. Docker 환경
기존 Docker 이미지를 바탕으로 WhaTap 설정이 추가된 이미지를 빌드 합니다.
본 가이드는 Java Agent 만 설치하는 경우에 한합니다. 와탭 Kubernetes 모니터링과 함께 적용하는 경우 별도 절차를 따릅니다. |
Step -1 도커 빌드 디렉토리 생성 합니다.
mkdir -p {Docker build Dir}
Step -2 whatap.conf 파일을 생성합니다.
cat >{Docker build Dir}/whatap.conf <<EOL license=XXXXXXXXXXXXXX-XXXXXXXXXXXXXX-XXXXXXXXXXXXXX (1) whatap.server.host=xx.xx.xx.xx/yy.yy.yy.yy (2) EOL
1 | 프로젝트 라이센스키를 입력합니다. |
2 | Proxy IP 정보를 입력 합니다. |
Step -3 Dockerfile을 생성합니다.
이미지를 빌드할때 와탭 이미지에서 -javaagent 옵션에 적용할 jar파일을 복사할수 있습니다.
cat >/home/silver/whatap/docker/Dockerfile <<EOL FROM whatap/kube_mon as build #실제 이미지 생성 ( 기존 이미지에 Whatap 추가 ) # $Image_Name(이미지명) FROM $Image_Name RUN mkdir -p /whatap COPY --from=build /data/agent/micro/whatap.agent-*.jar /whatap COPY ./whatap.conf /whatap/ ... {중략} ... EOL
Step -4 JAVA_OPTS에 아래 내용을 추가합니다.
WHATAP_HOME=/whatap WHATAP_JAR=ls ${WHATAP_HOME}/whatap.agent-*.jar | sort | tail -1 export JAVA_OPTS="-javaagent:${WHATAP_JAR} "
Step -5 Docker 빌드
cd docker docker build -t $Image_Name
4. 설치 점검
4.1. 설치 에러
4.1.1. 방화벽 설정 확인
와탭 서버에 대한 TCP 아웃바운드 정책이 설정되어 있지 않으면 모니터링 정보를 전송 할 수 없으므로 방화벽 차단을 해제해야 합니다.
telnet 명령을 사용해 " Connected to <IP> " 를 확인 해야 합니다.
$ telnet 52.193.60.176 6600
Trying 52.193.60.176...
Connected to 52.193.60.176.
Escape character is '^]'.
-
수집 서버 IP 정보는 와탭 웹사이트에서 해당 프로젝트의 관리 > 에이전트 설치 메뉴에서 확인할 수 있습니다.
4.1.2. SpringBoot 2.2 이상
SpringBoot 2.2 이상에서 Embeded Tomcat 을 사용하는 경우 기본값으로 JMX관련 기능이 동작하지 않습니다.
이 경우 JMX 기능을 활성화 해야 합니다.
Since Spring Boot 2.2, JMX is disabled by default.
spring.jmx.enabled=true server.tomcat.mbeanregistry.enabled=true #tomcat embeded 인 경우
spring: jmx: enabled: true server: tomcat: mbeanregistry: enabled: true #tomcat embeded 인 경우
4.1.3. 애플리케이션 서버가 OSGi 프레임워크를 사용하는 경우
OSGI 프레임워크 구조의 애플리케이션 서버인 경우 JVM 옵션에 에이전트 패키지 prefix(whatap)를 등록해야 합니다.
Jboss EAP 6.0 이상 Jboss AS 7.0 이상 Wildfly 8.0 이상 IBM WebSphere AS 7.0 이상 등이 해당됩니다.
JBoss AS, Wildfly, JBoss EAP 6.0 이상
$JBOSS_HOME/bin/standalone.conf(domain.conf)파일에 prefix를 등록합니다.
-Djboss.modules.system.pkgs=whatap

WebSphere
-Dcom.ibm.ws.classloader.server.alwaysAllowedPackages=whatap
-
Default로 ‘*’로 지정되어 있는 경우는 별도의 설정을 필요로 하지 않습니다.
-
설정 위치는 ‘WebSphere‘를 참조합니다.
security.policy 권한 추가
grant codeBase "file:$WHATAP_HOME/-"
{
permission java.security.AllPermission;
};
4.1.4. 히트맵에 트랜잭션이 표시되지 않는 경우
IBM JDK의 경우 attach 방식으로 에이전트를 적용 한 경우 트랜잭션 정보가 수집되지 않으므로 ‘javaagent’ 방식으로 에이전트를 설치해야 합니다.
4.1.5. logmanager 관련 에러가 발생하는 경우
JBoss AS 7.0이상, JBoss EAP 6.0 이상 에서 logmanager 관련 에러가 발생한다면 JVM 옵션을 추가합니다.
-Djava.util.logging.manager에 LogManager package명 설정 -Xbootclassloader에 JBoss log manager JAR file 설정

4.1.6. MBeanServerBuilder 에러가 발생하는 경우
JBoss 5.0 이하에서 MBeanServerBuilder 관련 에러가 출력된 경우 JVM 옵션 추가 합니다.
-Djboss.platform.mbeanserver를 true로 설정합니다.

4.1.7. permission 오류가 발생하는 경우
Java Security Policy 관련 오류가 발생하는 경우, $JAVA_HOME/jre/lib/security/java.policy 파일에 권한 설정을 추가합니다.
모든 권한을 일괄 적용하고자 하는 경우, {JAVA_HOME}/jre/lib/security/java.policy 파일에 하기의 설정을 추가합니다.
grant {
permission java.security.AllPermission;
};
4.2. 에이전트 네이밍
모니터링 대상을 식별하기 위해서는 이를 구분해야 할 필요가 있으며 와탭은 오브젝트 이름과 오브젝트 아이디를 통해서 대상을 구분합니다.
오브젝트(에이전트)이름은 프로젝트 단위로 고유해야 합니다. 오브젝트 아이디/이름이 바뀌면 이전 데이터와 연결되지 않습니다 |
와탭 모니터링 서비스에서는 모니터링 대상을 오브젝트 또는 에이전트로 혼용해서 사용합니다.
4.2.1. 이름 결정 방식
추가적인 설정이 없는 경우 오브젝트 이름은 자동으로 결정 됩니다.
예) IP 주소가 10.11.12.13 인 서버에서 Tomcat 이 8080 포트로 기동된 경우 TC-12-13-8080 이라는 오브젝트 이름으로 자동 부여됩니다.
1. whatap.type을 식별한다. 2. whatap.type이 서블릿 컨테이너면 어플리케이션이 사용하는 포트를 식별 한다. 3. 포트가 식별되지 않는 경우라면 pid 를 검색 한다. 4. 식별된 정보에 IPv4 주소 3,4번째를 추가하여 최종 이름을 결정한다. 결과 : {type}-{ip2}-{ip3}-{port}
이와같은 이름 결정 방식을 사용하는 이유는 서비스 중지, 네트워크 단절 후 재 접속된 에이전트와 기존 에이전트로 부터 수신된 데이터의 연속성을 유지하기 위해서 입니다.
4.2.2. 이름 변수
와탭은 이름으로 사용할 수 있는 변수를 다음과 같이 제공 합니다.
- 오브젝트 이름 패턴에 사용할 수 있는 변수 종류
-
- 문자열
-
지정한 문자열을 사용합니다.
- {type}
-
컨테이너 타입을 자동 식별해 부여 합니다. 자동 식별 대상은 다음과 같습니다.
JAVA, TOMCAT, JBOSS, RESIN, SPRINGBOOT, JETTY, JEUS, WEBLOGIC, WEBSPHERE, UNDERTOW, PLAY - {ip0}
-
IPv4 주소 중 첫번째 수를 사용합니다.
- {ip1}
-
IPv4 주소 중 두번째 수를 사용합니다.
- {ip2}
-
IPv4 주소 중 세번째 수를 사용합니다.
- {ip3}
-
IPv4 주소 중 네번째 수를 사용합니다.
- {pid}
-
Java Process 의 pid 를 사용합니다.
- {port}
-
어플리케이션이 Listen 하는 포트를 사용합니다.
4.2.3. 이름 지정
자동으로 부여된 이름 대신 직접 이름을 정할수도 있습니다.
우선순위 |
옵션 |
설정위치 |
설명 |
1 |
-Dwhatap.name |
JVM Option |
어플리케이션명 패턴을 지정합니다. default : {type}-{ip2}-{ip3}-{port} |
2 |
-Dwhatap.oname |
JVM Option |
어플리케이션명을 고정값으로 지정합니다. |
- 오브젝트 이름의 자동부여
-
클라우드 환경에서 Scale Out환경에서는 VM이 복사되어 사용될 수 있기 때문에 오브젝트 이름이 자동 부여되는 것이 중요합니다.
- 동일 프라이빗 IP를 사용하는 환경에서 오브젝트 이름 자동 부여
-
만약 2개의 VPC환경을 만들고 동일한 private IP 를 사용하도록 네트웍을 구성한경우 두개의 VPC는 별도의 프로젝트로 분리하거나 -Dwhatap.name을 서로 다른 패턴으로 지정하여 중복되지 않도록 해야 합니다.
- 오브젝트 이름을 명시적으로 지정할때는
-
java 실행 옵션에 지정할 수 있습니다.
-Dwhatap.oname=tomcat1
- 오브젝트 이름을 패턴으로 지정하고 싶을때
-
문자열과 변수를 조합해 사용할 수 있습니다.
-Dwhatap.name=front-{ip3}-{port}
4.3. MSA 업무 그룹 구분
Auto Scale Out 환경에서 자동 등록된 에이전트의 IP / Port / Pid 정보만을 가지고 업무 단위의 정보를 인지하기 어려운 경우가 있습니다.
이 경우 okind 속성을 부여하면 쉽게 식별이 가능합니다.
이 경우 이름과 더불어 업무를 식별 할 수 있는 whatap.okind 옵션을 사용해 okind 속성을 추가 합니다.
JVM 옵션에 추가 할 수 있습니다.
-Dwhatap.okind=mobile_ui
설정 파일에 추가 할 수도 있습니다.
whatap.okind=common_api
MSA 환경이라면 okind 속성을 추가해야만 와탭이 제공하는 다양한 기능을 활용 할 수 있습니다. |
4.4. Scale In 에서 에이전트 자동 삭제
에이전트 이름을 자동부여하는 것은 Scale Out 시 운영자의 개입 없이 시스템을 자동으로 확장하기 위함입니다
그런데 Auto Scale 환경에서 Scale In이 발생하는 경우 정상적인 Shutdown으로 인식하는 것이 필요합니다.
자동 삭제를 위해서는 서버에서 에이전트로 부터 자동 삭제에 대한 메세지를 받아야 합니다. ${WHATAP_HOME}에 Java 프로세스의 whatap_{process id}.shutdown 파일이 나타나면 5초 이내에 에이전트는 서버에 “SILENT_SHUTDOWN” 이벤트를 전송합니다.
SILENT_SHUTDOWN 이벤트가 전송되고 1분 이내에 에이전트가 셧다운되면 와탭서버는 해당 에이전트를 곧바로 목록에서 제거하고 inactive이벤트도 발생키지 않습니다.
Tomcat 의 경우 shutdown.sh 에 지정 할 수 있습니다.
touch $WHATAP_HOME/whatap_$CATALINA_PID.shutdown
4.5. AES 256 암호화 적용
와탭 APM 에이전트는 수집된 데이터를 암호화하여 서버로 전송합니다.
이를 위해 XOR 연산과 AES 암호화를 사용, 평문을 128비트 단위로 나누어 암복호화를 수행합니다.
강화된 보안을 필요로 하는 경우 256비트까지 확장할 수 있습니다.
기본적으로 JCE는 128비트를 지원하기 때문에 AES 256 비트를 적용하기 위해서는 jce 업데이트가 필요 합니다.
Unsupported keysize or algorithm parameters.
##혹은,
Illegal key size or default parameters.
-
Java 8
-
Java 7
-
Java 6
-
Java 5
-
Java 1.42
링크에서 파일을 다운로드 한 후 $JAVA_HOME/jre/lib/security에 파일을 덮어씁니다.
jce 가 적용 되었다면 ${WHATAP_HOME}/whatap.conf 파일에 아래 설정을 추가합니다.
cypher_level=256
애플리케이션 재시작 이후 적용 됩니다.
4.6. 애플리케이션 환경에 따른 부가 정보 수집
애플리케이션 환경에 따라 에이전트 기본값만으로는 원하는 수준의 정보를 얻지 못할 수 있습니다. 이 경우 에이전트 설정 값을 참고해 데이터를 추가 수집 할 수 있습니다.
다음은 자주 사용되지만 보안 등을 이유로 에이전트 기본값에서 제외된 옵션입니다. 필요하다면 설정 추가로 적용 할 수 있습니다.
- SQL 파라미터를 수집합니다.
-
profile_sql_param_enabled=true
- HTTP 파라미터를 수집합니다.
-
profile_http_parameter_enabled=true
- HTTP Header 정보를 수집합니다.
-
profile_http_header_enabled=true
- 사용자 IP 정보를 HTTP Header의 Key 에서 추출합니다.
-
trace_http_client_ip_header_key=X-Forwarded-For
- 사용자 수 추적을 cookie 기반으로 합니다.
-
trace_user_method=cookie
- SAP JCO 를 사용하는 경우 SAP Function 을 추적합니다.
-
hook_httpc_sap3_enabled=true
- jedis 라이브러리를 사용하는 경우 Redis 응답시간과 파라미터를 추적합니다.
-
weaving_reserved=jedis-3.2
jedis_show_parameter=true - Spring MongoDB 를 사용하는 경우 응답시간과 파라미터를 추적합니다.
-
weaving_reserved=spring-mongodb-2.2
mongo_show_parameter=true - webflux 환경을 모니터링 합니다.
-
weaving_reserved=webflux-5.2
- okhttp 사용한 외부 호출을 추적합니다.
-
weaving_reserved=okhttp-2.7
weaving_reserved=okhttp3 - rabbitmq 호출을 추적합니다.
-
weaving_reserved=reactor-rabbitmq-1.2
weaving_reserved=spring-rabbitmq-2.1
5. 데이터
와탭 에이전트는 트랜잭션 성능, 주요 성능 통계 그리고 서비스와 자원에 대한 카운터를 수집합니다.
5.1. 트랜잭션 추적
5.1.1. 트랜잭션 시작과 종료
트랜잭션이란 사용자 브라우저의 요청을 처리하기 위한 서버 사이드의 LUW(Logical Unit of Work)를 말합니다. 개별 웹서비스(URL) 요청에 대한 처리과정이 바로 트랜잭션인 것입니다. 웹 어플리케이션에서 트랜잭션은 웹서비스(URL)에 대한 HTTP Request를 받아 Response를 반환하는 과정입니다.
애플리케이션의 성능은 이 트랜잭션들의 성능으로 요약할 수 있습니다.
트랜잭션 성능은 트랜잭션 시작에서 부터 종료시점, 그리고 응답시간및 자원 사용량 혹은 트랜잭션 호출자의 속성등의 정보들을 포함합니다.
기본적으로 트랜잭션 응답 분포와 트랜잭션 통계를 통해서 트랜잭션 성능을 분석할 수있습니다.
트랜잭션의 이름
트랜잭션의 이름은 URL입니다. 단 Get 파라미터(Query String)는 제외 됩니다.
http://www.whatap.io/hr/apply.do?name='kim'
/hr/apply.do
와탭에서는 "웹서비스 이름" 과 "트랜잭션 이름"을 혼용해서 사용합니다. 서비스 특정 URL과 그에 대한 요청을 처리하기 위한 모듈로 볼수있고 트랜잭션 그 요청에 대한 처리 하나를 의미하기 때문에 둘의 이름은 동일하게 URL이라고 할 수있습니다. |
트랜잭션 이름 정규화
MSA 기반의 시스템이 발전하면서 URL + ? 인자 파라미터 형식보다 URL 패스에 파라미터를 넣는 방식을 많이 사용하게 됩니다.
http://www.whatap.io/hr/kim/apply.do
이렇게 패스파라미터를 그대로 트랜잭션 이름으로 사용하게 되면 통계적 관점의 성능 분석이 어렵게 됩니다. 따라서 이를 정규화할 필요가 있습니다. 와탭은 이때 정규화를 위한 옵션과 기능을 제공하고 있습니다.
trace_normalize_urls=/hr/{name}/apply.do
위와 같이 설정하면 트랜잭션 이름이 /hr/kim/apply.do → /hello/:name/apply.do 로 치환되어 수집됩니다. 만약 대상 url설정은 그대로 두고 기능만off하고자 한다면 다음과 같이 옵션을 지정할 수있습니다. 기본값은 true입니다.
trace_normalize_enabled=false
5.1.2. 트랜잭션 프로파일
트랜잭션 성능이 트랜잭션 시작과 종료사이의 요약 지표들이나 속성들을 의미한다면 트랜잭션 프로파일은 트랜잭션이 수행되는 과정중이 스텝들을 추적하는 것입니다.
트랜잭션이 느리거나 오류가 있다면 그 원인을 추적하기 위해서 수행 이력을 스텝별로 추적할 필요가 있는데 이것을 트랜잭션 프로파일링이라고 합니다.
와탭이 수집하는 스텝의 종류에는 크게 SQL 스텝, HTTP CALL스탭, 메세지 스텝, SOCKET오픈 스텝, DB연결 스텝, 메소드 스텝등이 있습니다.
- DB연결 스텝
-
수집방식: START-END
RDB에 대한 연결에 대한 성능을 포함합니다. 스텝 정보에는 이름,응답시간,에러를 포함합니다. - SQL 스텝
-
수집방식: START-END
JDBC SQL에 대한 성능을 포함합니다. 스탭정보에는 연결정보,SQL문, 에러가 포함되어있습니다. - HTTP Call 스텝
-
수집방식: START-END
외부 http서비스 호출에 대한 성능을 포함합니다. 스텝 정보에는 url, host, port, 응답시간, 에러가 포함됩니다. - Message 스텝
-
수집방식: ADD
메세지 스텝을 프로파일을 수집하는 과정에서 비정형적인 모든 구간에 대한 이력을 수집할때 사용됩니다. file오픈 등등 혹은 사용자도 임의의 위치를 지정하는데 사용 할 수있습니다. - SOCKET 스탭
-
수집방식: ADD
Socket 오픈을 표현하는 스텝입니다. - METHOD 스탭
-
수집방식: START-END
메소드 응답시간을 추적합니다. - ACTIVE STATCK 스탭
-
수집방식: ADD
액티브 스탭에 대한 정보를 포함합니다. 별도 쓰레드가 생성하여 프로파일에 추가하는 방식으로 수집합니다
5.1.3. 트랜잭션 스탭 수집 방식
자바에이전트는 선형 수집 방식과 환형 수집방식을 제공합니다.
선형 수집
개별 트랜잭션 프로파일은 무한정 스텝을 수집할 수 없습니다. 트랜잭션 별로 길이가 제한된 버퍼에 프로파일 스텝을 저장합니다. 각 트랜잭션은 최대로 수집할 수있는 스텝의 수가 옵션으로 지정되어 있습니다.
- profile_step_max_count
-
default: 1024
최대로 수집가능한 스텝수 - profile_step_normal_count
-
default: 800
일반적으로 아무런 제약없이 수집되는 스텝수 - profile_step_heavy_count
-
default : 1000
normal count를 초과한 경우에 스텝은 응답시간이 느린 스텝과 액티브 스택 스텝만 수집합니다. - profile_step_heavy_time
-
default:100
heavy count이내에서의 수집되는 스텝의 기준 시간은 profile_step_heavy_time입니다.

수집되는 프로파일의 스텝 수가 heavy count를 초과하는 경우에는 액티브 스택만이 수집됩니. 단 이경우에도 최대 스텝 수는 profile_step_max_count를 넘을 수 없습니다.
5.2. Active Stack
진행중인 트랜잭션을 액티브 트랜잭션이라고 합니다. 액티브 트랜잭션에서 정기적으로 덤프한 스택을 액티브 스택이라 합니다.
와탭 에이전트는 매 10초(옵션 가능)마다 액티브 트랜잭션에 대해서 액티브스택을 덤프하고 이것을 서버에 전송합니다. (active_stack_second=10) |
5.2.1. 컴팩트한 액티브 스택 수집
액티브 스택은 스레드 덤프를 정기적으로 수행하기 때문에 잘못구현되면 에이전트에 오버헤드가 커질 수있습니다. 따라서 와탭은 에이전트 부하를 최소화하면서 액티브 스택을 수집하기 위해 다양한 옵션들을 가지고 있습니다.
서버 > 더보기 > 쓰레드 목록/덤프 메뉴에서 스레드 목록중에 "WhaTap-ActiveStackDump"쓰레드의 CPU Time을 확인하면 오버헤드를 판단할 수있습니다. |
java.lang.StringBuffer.append(StringBuffer.java:309)
java.util.regex.Matcher.appendReplacement(Matcher.java:839)
java.util.regex.Matcher.replaceAll(Matcher.java:906)
java.lang.String.replaceAll(String.java:2162)
core.log.triggers.TriggerRegister.changeNotify(TriggerRegister.java:114)
core.log.aop.handler.DaoInfo.log(DaoInfo.java:141)
core.log.aop.handler.DaoInfo.doAround(DaoInfo.java:102)
core.log.aop.reflection.profiler.AroundProfiler.invoke(AroundProfiler.java:19)
com.sun.proxy.$Proxy39.getUpdateCount(Unknown Source)
org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getNextResultSet(DefaultResultSetHandler.java:256)
org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:193)
org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
* * *
sun.reflect.GeneratedMethodAccessor140.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:606)
org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
- 최적화된 데이터 수집
-
-
트랜잭션을 수행중인 쓰레드에 대해서만 스택을 덤프합니다.
-
액티브 스택 덤프 시간 간격을 조정 할 수 있습니다. (active_stack_second=10)
-
액태브 스택의 최대 라인에 제한되어 있습니다,top라인에서 부터 기본 50라인을 수집합니다. (trace_active_callstack_depth=50)
-
액티브 스택의 각 라인은 해쉬처리되어 수집됩니다.(text는 한번만)
-
한 타임에 수집되는 최대 액티브스택 갯수도 제한 되어있습니다.(active_stack_count=100)
-
5.2.2. Background Thread에 대한 액티브 스택
@since v1.6.2
기본적으로 액티브 스택은 트랜잭션이 수행되고 있는 쓰레드의 스택을 말합니다.
하지만 일부 백그라운드 쓰레드에 대해서도 스택을 분석할 필요가 있을 수있습니다.
이때 옵션을 통해서 백그라운드 쓰레드에 대한 액티브 스택을 확보할 수있습니다.
async_stack_enabled=false
async_stack_enabled를 true로 설정하면 활성화됩니다.
active_stack_second=10
스택 덤프 간격은 포그라운드 액티브 스택 설정에 따라갑니다.
async_thread_match=http*,abc*
대상 쓰레드 이름을 지정할때는 '*' 사용하여 문자열 패턴을 지정합니다.
쓰레드 이름으로 스택 덤프 대상을 식별합니다. ","를 사용하여 match를 여러개를 지정할 수 있습니다. |
async_thread_parking_class=sun.misc.Unsafe async_thread_parking_method=park
스택의 Top메소드가 async_thread_parking에 등록된 클래스/메소드일때 쓰레드가 파킹상태에 있다고 판단하고 덤프를 생성하지 않습니다.
5.3. 통계(리스트 데이터)
와탭 에이전트는 트랜잭션정보, SQL과 같은 주요 프로파일 정보에 대해 통계정보를 수집 합니다. 매 5분마다 목록을 만들고 서버로 전송합니다.
5.3.1. 트랜잭션 통계
트랜잭션 통계를 수집합니다. 매 5분마다 최대 5000개의 URL별 수행 통계를 수집하여 서버에 전송합니다. 만약 서로다른 URL의 수가 5분동안 5000개가 넘으면 무시됩니다.
칼럼 | 설명 | 타입 |
---|---|---|
hash |
URL 해쉬 |
u4 |
count |
건수 |
u4 |
error |
에러건수 |
u4 |
time_sum |
응답시간의 합 |
u8 |
time_max |
최대 응답시간 |
u4 |
sql_count |
SQL 수행 건수 |
u4 |
sql_time |
SQL수행시간의 합 |
u8 |
sql_fetch |
SQL 패치 건수 |
u4 |
sql_fetch_time |
SQL 패치 시간의 합 |
u8 |
httpc_count |
HTTP Call건수 |
u4 |
httpc_time |
HTTP Call 시간의 합 |
u8 |
malloc_sum |
메모리 사용량 SUM |
u8 |
cpu_sum |
CPU사용량 SUM |
u8 |
malloc_sum은 trace_malloc_enabled=true로 변경해야 수집됩니다.(default: false) |
5.3.2. SQL 수행 통계
5분동안의 SQL 수행 통계를 수집합니다. 5분동안 서로다른 SQL문장이 최대 5000까지만 허용이 됩니다. 만약 하나의 Java 프로세스에서 한계를 넘는 SQL이발생하면 통계데이터에서는 버려집니다.
칼럼 | 설명 | 타입 |
---|---|---|
dbc |
DB연결 정보의 Hash |
u4 |
sql |
SQL문 Hash |
u4 |
count_total |
수행 건수 |
u4 |
count_error |
에러건수 |
u4 |
time_sum |
응답시간의 합 |
u8 |
time_max |
최대 응답시간 |
u4 |
fetch_count |
패치 건수 |
u4 |
fetch_time |
패치 시간의 합 |
u8 |
service |
SQL을 수행한 service중에 하나 |
u4 |
service(URL) hash는 5분동안 해당 SQL을 호출한 URL중 하나(마지막 호출 URL)를 분석 활용을 위해 수집합니다. |
5.3.3. HTTPCall 수행 통계
5분동안의 Http Call 수행 통계를 수집합니다. 5분동안 서로다른 Http Call문장이 최대 5000까지만 허용이 됩니다. 만약 하나의 node.js 프로세스에서 한계를 넘는 외부 Http Call이 발생하면 통계데이터에서는 버려집니다.
칼럼 | 설명 | 타입 |
---|---|---|
url |
타겟 URL hash |
u4 |
host |
Host or ip |
u4 |
port |
Tcp Port |
u4 |
count_total |
수행 건수 |
u4 |
count_error |
에러건수 |
u4 |
time_sum |
응답시간의 합 |
u8 |
time_max |
최대 응답시간 |
u4 |
service |
Http Call을 수행한 service중에 하나 |
u4 |
5.3.4. 에러 통계
5분동안 발생한 서비스 에러에 대한 통계입니다. 서로다른 에러+트랜잭션이름을 키로 발생 건수를 수집합니다. 5분당 최대 1000가지 서로다른 에러를 통계화합니다.
칼럼 | 설명 | 타입 |
---|---|---|
classHash |
에러클래스 |
u4 |
service |
트랜잭션 HASH |
u4 |
snapSeq |
스택 정보 |
u8 |
msg |
메세지 hash |
u4 |
count |
발생 건수 |
u4 |
5.3.5. IP별 호출 건수
IP별로 호출한 트랜잭션 건수을 통계적으로 수집합니다. 5분당 수집가능한 서로다른 IP수는 인스턴스당 최대 70000개 입니다.
칼럼 | 설명 | 타입 |
---|---|---|
ip |
ip주소 |
u4 |
count |
건수 |
u4 |
5.3.6. UserAgent별 호출 건수
User Agnet 문자열의 Hash별로 호출 건수를 수집합니다. 5분당 수집가능한 서로다른 UserAgent Hash는 인스턴스당 최대 500개 입니다.
칼럼 | 설명 | 타입 |
---|---|---|
hash |
hash |
u4 |
count |
건수 |
u4 |
5.3.7. 트랜잭션 Caller 통계
멀티 서버가 rest 호출로 연결된 경우 Caller와 Callee간의 연관 통계를 수집할수있다. 이 데이터를 수집하기 위해서는 다음의 옵션을 먼저 설정해야 한다.
mtrace_rate=100 mtrace_spec=v1 stat_mtrace_enabled=true

위와 같은 아키텍처에서 caller&callee통계는 api1와 api2에서만 조회할 수있습니다. 사용자 브라우저에서 호출되는 시스템에서는 Caller통계를 조회할 수 없습니다.
하지만 Caller쪽 서버에서 데이터를 전송해야하기 때문에 모든 서버에 적절한설정이 들어가야 합니다.
mtrace_rate=100 mtrace_spec=v1 stat_mtrace_enabled=true
mtrace_spec=v1 stat_mtrace_enabled=true
수집되는 통계 데이터는 다음과 같습니다. Callee쪽에서 조회되어야합니다.
칼럼 | 설명 | 타입 |
---|---|---|
caller_pcode |
Caller의 프로젝트(와탭) 코드 |
u8 |
caller_spec |
Caller의 버전 문자열 hash |
u4 |
caller_url |
Caller의 URL hash |
u4 |
spec |
Callee의 버전 문자열 hash |
u4 |
url |
Callee URL hash |
u4 |
count |
수행 건수 |
u4 |
error |
에러건수 |
u4 |
time |
응답시간의 합 |
u8 |
5.4. 성능 카운터
와탭 에이전트는 트랜잭션 프로파일 정보, 통계 정보 외 애플리케이션 성능과 관련된 다양한 정보를 수집하며 이는 크게 3가지로 분류할 수있습니다.
- Counters
-
-
User : 실시간 사용자 혹은 방문사용자
-
Service : 트랜잭션,SQL,외부호출 건수및 응답, 에러율등
-
Resource : 시스템,프로세스 자원 사용량
-
5.4.1. User Counter
사용자는 모니터링 대상 시스템을 사용하는 클라이언트를 말한다. 클라이언트에는 다른시스템 또한 포함될 수있지만 일반적으로는 브라우저를 기준으로 사용자 수를 계산 합니다.
웹시스템 성능에서 사용자는 부하를 발생시키는 시작이기 때문에 중요합니다. 사용자 추적을 위해서는 사용자는 어떤 기준으로 구분할 것이며 어떻게 카운팅 할 것인가에 대한 고려가 필요합니다.
사용자 구분
와탭 에이전트 사용자를 구분하기 위해 다양한 옵션을 제공합니다.
- RemoteIP
-
기본값은 remote ip를 사용하여 사용자를 구분하는 것입니다. 하지만 remote ip 는 실제 사용자를 구분하는데 한계가 있습니다
- Cookie(WHATAP)
-
쿠키를 사용하여 사용자를 구분할 수있습니다. 모든접속 클라이언트를 대상으로 "WHATAP"이라는 쿠키에 UUID를 저장 합니다.
trace_user_using_ip=false
- Header Key
-
http header에 전달되는 값으로 사용자를 구분할 수있습니다. .whatap.conf
user_header_ticket=USER
사용자 카운팅
사용자를 카운팅하는 방법에 따라서 다른 목적으로 사용될 수있다. 동시 사용자는 현재 시스템을 사용하는 사용자의 수를 알기 위해서 측정하고 일일 액티브 사용자는 하룻동안 해당 서비스에 관심을 갖는 사용자가 몇명인지에 대한 비즈니스적인 관리를 위해 측정합니다.
- 실시간 사용자
-
최근 5분 동안 사용자 수를 카운팅합니다. 매5초마다 shifting하면 사용자를 카운팅합니다. 각 서버에서 카운팅된 숫자는 HyperLogLog알고리즘을 통해서 머지됩니다.
- 일일 방문(액티브) 사용자(DAU)
-
하룻동안 시스템에 접속한 사용자를 카운팅합니다. 24시간 동안 접속한 사용자를 hyperloglog를 통해서 계산합니다.
와탭에서는 장기간 사용자를 카운팅 하기 위해 사용자데이터에 대한 byte block을 서버로 수집합니다. 이 데이터를 hyperloglog로 머지하면 이론적으로 한달 이상의 액티브 사용자를 계산 할 수 있습니다. |
5.4.2. Service Counter
서비스 카운터에는 트랜잭션과 트랜잭션이 사용하는 SQL혹은 외부호출등에 대한 건수 응답시간 에러건수 등에 대한 성능지표가 포함 됩니다.
- Transaction Counter
-
트랜잭션을 수행하면 측정하는 카운터입니다.
-
건수
-
응답시간
-
에러건수
-
- Active Transaction Counter
-
진행중인 트랜잭션의 수를 카운팅합니다.
-
건수
-
Active Status
진행 상태는 METHOD,SQL,HTTPC,DBC,SOCKET 5가지 상태로 고정되어있습니다.-
METHOD - 일반 함수를 호출하는 상태
-
SQL - db sql을 수행중인 상태
-
HTTPC - 외부 Http Api(서비스)를 호출중인 상태
-
DBC - DB연결을 요청한 상태, 일반적으로 Pool에서 가져옴
-
SOCKET - TCP세션을 Connecting 중인 상태
-
-
- SQL
-
SQL 수행 현황을 카운팅합니다.
-
건수
-
응답시간
-
에러 건수
-
패치 건수
-
- HTTP Call
-
외부 Http 호출에 대한 현황을 카운팅 합니다.
-
건수
-
응답시간
-
에러 건수
-
5.4.3. Resource Counter
서버자원 혹은 node 프로세스 내부의 자원 사용량을 카운팅합니다.
- CPU(sys,usr,wait,steal,irq, cores)
-
CPU사용량 % 입니다. 각 종류별로 수집됩니다. 가상환경에서만 Steal이 의미가 있습니다. Cput Core 갯수를 같이 수집하고 있습니다.
- Process CPU
-
자바 프로세스가 사용하는 CPU %입니다.
- Memory
-
시스템 메모리 사용율(%) 입니다.
- Swap
-
Swap메모리 사용율(%) 입니다.
- Disk
-
Disk는 Java Process의 Current 디렉토리의 사용율(%) 입니다.
- Heap(Total, Used, Perm)
-
Java Heap메모리의 Total, Used, Perm량 입니다. 데이터 단위는 KBytes 입니다.
- GC (Count,Time)
-
5초 동안 발생한 GC 건수와 시간의 합계입니다.
- ObjectPendingFinalizationCount
-
GC 호출되는 도중에 finalize()수행하기 위해 대기중인 객체숫자로써 이값이 커지면 GC time이 지연될 수 있습니다.
- Thread(start Count,Count, Daemon, Peak Count)
-
JVM이 실행된 이후부터 Start된 쓰레드 수, 현재 돌고 있는 스레드수, 데몬, 최대 쓰레드 수를 수집합니다. 쓰레드 풀이 필요한지에 대한 판단등을 할 수있습니다.
- DB Connection Count(active,idle)
-
Connection Pool의 idle와 active 카운트를 수집합니다.
- Tomcat Thread Pool(active, queueSize)
-
톰켓의 Executor쓰레드 풀이 설정되었을때 성능정보를 수집합니다.
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="50" minSpareThreads="2" maxQueueSize="78"/>
DB Connection Pool 카운터에 대한 이해
DB Connection Pool은 DataSource라고 합니다. WAS가 제공하는 경우가 일반적이지만 일부에서는 오픈소스 Pool을 사용하기도합니다 또한 사용량 정보가 JMX로 노출되기도 하지만 그렇지 않은 경우도 많아서 와탭은 2가지 방식을 제공하고 있습니다.
하나의 BCI에 의한 직접 조회방식과 JMX를 이용한 방식입니다. 기본은 BCI방식을 사용하고 보조 적으로 JMX를 사용할 수있도록 제공하고 있습니다.
아래는 개별 옵션별 디폴트 값과 연관되어 ByteCode Injection되는 클래스입니다.
com.zaxxer.hikari.pool.HikariPool
org.apache.commons.dbcp.BasicDataSource org.apache.commons.dbcp2.BasicDataSource org.apache.tomcat.dbcp.dbcp.BasicDataSource org.apache.tomcat.dbcp.dbcp2.BasicDataSource
org.apache.tomcat.jdbc.pool.ConnectionPool
weblogic.jdbc.common.internal.ConnectionPool
jeus.jdbc.connectionpool.ConnectionPoolImpl
org.jboss.jca.core.connectionmanager.pool.PoolStatisticsImpl
옵션을 변경한다면 BCI관련 옵션이기 때문에 재기동해야합니다. 클래스가 instrument된 후에도 추적 테이블에 등록되는 과정이 필요합니다. 따라서 실행중에 redefine을 해도 동작하지 않습니다. |
- 관련 옵션 자동 결정
dbcp_pool_enabled==true 이면 tomcat_ds_enabled=false weblogic_pool_enabled== true 이면 weblogic_ds_enabled=false
DataSource 의 현황은 JMX로 가져오려면 먼저 "옵션 자동 결정" 내용을 확인하고 관련된 pool쪽 옵션을 false로 선언하고 DataSource관련 옵션을 true로 변경해야 합니다. .DataSource관련 옵션
tomcat_ds_enabled=false weblogic_ds_enabled=false
기본값은 false입니다.
ThreadPool 카운터
ThreadPool 카운터는 JMX Mbean 정보를 통해 수집됩니다.
Tomcat 과 같이 사용 사례가 많은 경우라면 문제 없지만 특정 환경 에서는 이 지표가 수집되지 않을 수 있으며 수집을 위해서는 추가 설정을 필요로 합니다.
관련 설정은 다음과 같으며 진행이 어려운 경우 support@whatap.io 로 문의 주실 수 있습니다.
jmx_threadpool_objectname=Catalina:type=ThreadPool,name="http-bio-8080" (1)
jmx_threadpool_atter_activecount=connectionCount (2)
jmx_threadpool_atter_queuesize=maxThreads (3)
1 | jmx_threadpool_objectname : JMX ThreadPool MBean 이름을 설정 합니다. |
2 | jmx_threadpool_atter_activecount : activecount 수치를 나타내는 attribute 를 설정 합니다. |
3 | jmx_threadpool_atter_queuesize : maxThreads 수치를 나타내는 attribute 를 설정 합니다. |
JMX ThreadPool ObjectName 및 AttributeName 과 같은 Mbean 명은 JMX 모니터링 도구를 통해 확인하거나 각 WAS 별 Mbean 문서를 참고 합니다.
6. 에이전트 제어와 상태 조회
각 Java 프로세스 별로 에이전트 동작을 제어하거나 상태를 조회할 수 있습니다.
6.1. 부트 환경
에이전트가 시작하면 주요환경 정보를 모아 서버로 전송합니다. 이정보는 기동시의 에이전트 환경 상태를 확인할때 사용될 수있습니다. Yard 서버에 저장해 두기 때문에 에이전트가 종료되어도 조회할 수있습니다.
와탭 버전, OS정보, java버전, uptime등등의 정보들을 조회할 수 있습니다.
6.6. 로드된 클래스
메모리에 로딩된 클래스 목록을 조회합니다. 그리고 특정 클래스의 signuture를 확인 할수있고 redefine을 요청할 수있습니다.
Class Redefine은 BCI를 위해 사용되는 기술입니다. 이미 로딩된 클래스를 재정의 하여 모니터링 코드를 삽입합니다. |
6.8. 메소드 성능 상태
메소드 호출 빈도를 추적하고 싶을때 사용할 수있습니다. 아래 옵션에 지정된 클래스메소드들의 호출을 추적합니다.
hook_method_stat_supers hook_method_stat_interfaces hook_method_stat_patterns
6.9. DB 상태
Connection Pool의 상태를 조회합니다. "DB Connection Pool 카운터"쳅터에서 설명한 Connection Pool(DataSource)의 상태를 확인합니다.
6.10. 설정
에이전트 실행옵션을 설정할 수있습니다. whatap.conf에 값을 운영중에 변경할 수 있습니다. Configure 쳅터에서 소개하고 있는 대부분의 옵션은 whatap.conf에 적용할 수있습니다
일반적으로 설정은 런타임에 바로 reload됩니다. 다만 해당 설정의 메커니즘상 JVM이 기동될때 적용되는 옵션들은 재기동해야 할수 있습니다. |
6.11. 쓰로틀링
부하량을 제어할 수 있습니다 쓰로틀링은 디폴트 상태에서는 OFF(false)되어있습니다. whatap.conf에 관련 옵션을 설정함으로 쓰로틀링 기능을 사용할 수있습니다.
throttle_enabled=false
쓰로틀링에는 크게 봉쇄와 제한 두가지 개념으로 되어있습니다.
6.11.1. 부정한 요청 [봉쇄]
등록된 URL혹은 IP에 대해서 모든 리퀘스트를 봉쇄합니다.
throttle_blocking_url= throttle_blocking_ip=
HTTP요청이 봉쇄되면 아래 옵션에 따라 사용자 메세지가 전달됩니다. 만약 forward url이 설정되어있으면 그페이지로 사용자 응답이나가고 아니면 message가 브라우저에 리턴됩니다.
throttle_blocked_forward= throttle_blocked_message=request blocked!!
6.11.2. 과도한 요청 [제한]
1) 부하량을 제한 하는 것입니다. 동시에 처리중인 트랜잭션이 기준입니다.
throttle_limit=10000
2) 제한 방법은 둘중 하나를 선택해야 합니다.
- 제한 방법-1
-
등록된 URL에 대해서만 제한한다. 나며지페이지는 전체 진행중인 트랜잭션 수가 limit를 넘었을지라도 제한하지 않습니다.
throttle_target_urls=
- 제한 방법-2
-
모두 제한하고 등록된 페이지는 통과시킨다.
throttle_passing_url= throttle_passing_url_prefix=
3) HTTP요청이 거절되면 아래 옵션에 따라 사용자 메세지가 전달됩니다. 만약 forward url이 설정되어있으면 그페이지로 사용자 응답이나가고 아니면 message가 브라우저에 리턴됩니다.
throttle_rejected_forward= throttle_rejected_message=too many request!!
4) Reject가 발생할때 이벤트를 발령합니다.
reject_event_enabled=false
6.12. 시스템 GC/힙덤프
강제 GC를 호출할 수있습니다.
힙덤프를 수행할 수있습니다.
힙 덤프 확보를 위해서는 1.5.2버전 이상의 에이전트를 사용하고,JDK6이상이고 heapdump_enabled옵션을 true로 설정해야 합니다. |
6.13. 에이전트 로그
현재 에이전트 HOME에서 ./logs/에 로그를 기록 합니다.
## OPEN LOG FILE agent 20181106 00:00:00.610 ##
WhaTap Version 1.5.4 20180928 pid=47448
20181106 00:55:33 <47448>[A113] read java.net.SocketException
## OPEN LOG FILE agent 20181106 00:00:03.126 ##
WhaTap Version 1.5.4 20180928 pid=47333
20181106 00:55:33 <47333>[A113] read java.io.EOFException
로그 포멧은
[시간] [PID] [로그 내용]
PID가 바뀐다면 에이전트가 재기동 되었음을 의미합니다. 혹은 동일 로그에 두개의 프로세스(JVM)가 로그를 남기고 있습니다.
6.14. 에이전트 덤프
현재 진행중인 트랜잭션과 쓰레드의 스택을 덤프합니다. JDK의 쓰레드 덤프는 쓰레드 자체만을 덤프하지만 에이전트 덤프는 쓰레드와 진행중인 트랜잭션을 맵핑하여 덤프함으로 문제에 대한 다른 인사이트를 얻을 수있습니다.
12 :::thread::: 1404674 Thread-1404607 TIMED_WAITING ,blked #0,waited #17: 4cpu :::tx::: 5274572099194896286 /account/write/employee/daejun 1777ms 2cpu: sql #2 588ms: httpc #2 588ms
java.lang.Thread.sleep(Native Method)
whatap.util.ThreadUtil.sleep(ThreadUtil.java:37)
jdbc.Control.exec(Control.java:23)
jdbc.FakePreparedStatement.executeQuery(FakePreparedStatement.java:67)
com.virtual.dao.SelectDAO.execute2(SelectDAO.java:29)
com.virtual.web.Simula.execute(Simula.java:151)
com.virtual.web.Simula$1.process(Simula.java:80)
com.virtual.web.VExec.doFilter(VExec.java:14)
org.apache.catalina.filters.FilterBase.doFilter(FilterBase.java:26)
com.virtual.web.Simula.run(Simula.java:104)
6.14.1. 쓰레드 & 트랜잭션 덤프
지정한 임계상황이 되면 쓰레드와 진행중이 트랜잭션 URL을 덤프합니다.
-
액티브트랜잭션 수가 급증하거나 CPU사용량이 급증했을때 기록을 남기기 위한 기능입니다.
-
thread_dump_actx(300)이상의 액티브 트랜잭션 갯수가 쌓이거나 thread_dump_cpu(-1:disabled)이상의 CPU사용이 발생할때 JVM내의 모든 쓰레드와 그 스택을 덤프합니다. 각 쓰레드가 수행하는 URL정보도 같이 덤프합니다. (값이 -1일때는 동작하지 않습니다.)
-
한번 덤프가 발생하면 thread_dimp_interval 이상 시간이 경과되어야 다시 동작 합니다.

7. 설정
7.1. 설정 관리
7.1.1. 설정 파일
Whatap Java Agent 의 설정을 읽어드리는 기본값은 ${WHATAP_HOME}/whatap.conf 입니다.
경우에 따라 한 서버에서 여러 애플리케이션이 구동 되고, 이들에 대한 설정을 별도로 관리하고자 하는 경우 기동 스크립트에 JVM 옵션을 추가하여 지정 할 수 있습니다.
설정파일은 반드시 ${WHATAP_HOME}에 위치해야 합니다. |
# A 서비스 -Dwhatap.config=whatap_Aservice.conf
# B 서비스 -Dwhatap.config=whatap_Bservice.conf
7.1.2. 설정 추가/변경
설정의 추가 / 변경은 서버 메뉴의 설정 탭에서 사용 가능 합니다.

또는, 설정파일을 대상 서버에서 직접 편집해 사용 할 수 있습니다.
$ vi /whatap/whatap.conf
상황에 따라 기동 스크립트에 JVM -D 옵션을 통해 적용 할 수도 있습니다.
export WHATAP_OPTS="$WHATAP_OPTS -Dwhatap.name={type}-{ip4}-{port}" export WHATAP_OPTS="$WHATAP_OPTS -Dwhatap.okind=Aservice" export JAVA_OPTS="$JAVA_OPTS $WHATAP_OPTS"
7.2. 에이전트 네이밍
- whatap.name
-
Default : {type}-{ip2}-{ip3}-{port}
Type : String
에이전트 이름을 패턴으로 정의 합니다. - whatap.oname
-
Default : NONE
Type : String
에이전트 이름을 문자열로 정의 합니다. - whatap.okind
-
Default : NONE
Type : String
에이전트가 속한 그룹 단위를 정의 합니다. - whatap.onode
-
Default : NONE
Type : String
에이전트가 속한 노드 단위를 정의 합니다. - auto_oname_enabled
-
Default : false
Type : Boolean
서버에 등록될 에이전트 이름(oname)을 서버로부터 자동 부여 받는 기능을 활성화 합니다. 적용 시, -Dwhatap.name, -Dwhatap.oname 옵션은 무시됩니다. 수집 서버와의 통신을 통해 oname 을 부여 받은 이후, 에이전트의 일반적인 동작을 개시합니다. - auto_oname_prefix
-
Default : agent
Type : String
에이전트 이름을 서버로부터 자동 부여할 때 에이전트 이름의 prefix, 보통 업무 명을 사용합니다. prefix 일련번호 1~) 부여됩니다. - auto_oname_reset
-
Default : 0
Type : Int
서버로 부터 새로운 에이전트 이름을 부여받기 위해서 수정합니다. 에이전트 이름을 자동 부여하면 what.oname 이라는 시스템 환경 변수에 셋트됩니다. 한번 셋트되면 자바 인스턴스가 재기동 될 때까지 유지 되는데 리셋을 원할 때 auto_oname_reset 값을 수정합니다.(현재 설정 값과 다른 값으로 변경하면 적용됩니다.)
7.3. 에이전트 기능제어
- shutdown
-
Default : false
Type : Boolean
true 인 경우 에이전트의 모든 동작을 중지하고 서버와의 연결을 종료합니다. - enabled
-
Default : true
Type : Boolean
전체 기능을 활성화 합니다. false인 경우에도 서버와 최소한의 통신을 유지하기 위한 정보는 전송됩니다. - transaction_enabled
-
Default : true
Type : Boolean (enabled=false 인 경우 false)
트랜잭션 추적 기능을 활성화 합니다. Hitmap에 기록되는 트랜잭션 정보가 해당합니다. - counter_enabled
-
Default : true
Type : Boolean (enabled=false 인 경우 false)
성능 카운터 추적 기능을 활성화합니다. 액티브트랜잭션 수, 사용자 수, JVM 자원 사용량, Process CPU 사용량 및 DB Pool 사용량 정보등이 해당됩니다. - stat_enabled
-
Default : true
Type : Boolean (enabled=false 인 경우 false)
통계정보 추적 기능을 활성화합니다. 5 분단위로 수집되는 트랜잭션, SQL, HTTPCALL, UserAgent, Client IP 등의 통계 데이터등이 해당됩니다. - sigar_enabled
-
Default : true
Type : Boolean (enabled=false 인 경우 false)
sigar library 를 통한 OS 정보 수집을 활성화합니다. 5 초 단위로 sigar library를 통해 수집되는 CPU, Memory, Disk등의 OS 자원 데이터가 해당됩니다. - active_stack_enabled
-
Default : true
Type : Boolean (enabled=false 또는 counter_enabled=false 인 경우 false)
액티브 스택 추적을 활성화합니다. 스텍 메뉴의 탑스택, 유니크스택 그리고 액티브스택이 해당됩니다. - license
-
Default : NONE
Type : String
에이전트 설치시 서버로부터 부여받은 라이센스를 지정합니다. 라이센스에는 에이전트가 속한 프로젝트와 보안 통신을 위한 암호키를 포함하고 있습니다. - cypher_level
-
Default : 128
Type : aes_bit [128|256]
AES 보안 알고리즘에 대한 암호 레벨을 지정합니다. - encrypt_level
-
Default : 2
Type : encrypt_level [1|2|3]
와탭 에이전트는 서버로 데이터 전송시 데이터 속성에 따라 선택적으로 암호화를 하므로 높은 보안을 유지하면서도 성능상 이점을 가지고 있습니다. 이와 별개로 데이터 유형에 상관없이 일괄적인 암호화 정책을 적용하려는 경우 당 옵션을 사용할 수 있습니다.
1 - 암호화 전송 기능 사용안함 2 - SQL파라미터, Plain Text와 같은 민감한 속성에 대하여 암호화 전송 3 - 모든 항목에 대하여 암호화 전송 |
- stat_ip_enabled
-
Default : true
Type : Boolean
"통계 | 클라이언트IP" 항목의 IP 통계 사용 여부를 활성화합니다. - realtime_user_enabled
-
Default : true
Type : Boolean
"대시보드" 사용자 항목에서 사용되는 실시간 사용자 지표 수집 여부를 선택한다. - hook_direct_patch_classes
-
Default : NONE
Type : ClassFile_FullPath
직접적으로 특정 클래스를 로딩타임에 바꿔치기 하고자 할 때 사용합니다. 클래스를 컴파일한 후에 별도 파일로 만들고 그 파일의 풀패스를 지정합니다. - active_stack_second
-
Default : 10
Type : Seconds
액티브 스택을 추적하는 간격을 지정합니다.
값을 바꾸는 것을 권장하지 않습니다. |
- boot_redefine_size
-
Default : 100
Type : Int
Attach 방식이나 Watcher 방식으로 설치했을 때 이미 로딩된 클래스 중에 추적을 위해 BCI 를 새로 수행하게 됩니다. 이때 동시 redefine 하는 클래스 수를 정의합니다. - trace_component_enabled
-
Default : true
Type : Boolean
서버 | 더보기 | 컴포넌트 버전 기능을 활성화 합니다. - realtime_user_thinktime_max
-
Default : 300000
Type : MiliSeconds
실시간 사용자 측정시 동일 사용자로 인정되는 최대 호출간격을 지정합니다. - time_sync_interval_ms
-
Default : 300000
Type : MiliSeconds
에이전트와 서버간 시간 동기화 주기를 지정합니다. 동기화 하지 않을 경우 0으로 지정합니다. - detect_deadlock_enabled
-
Default : false
Type : Boolean
Java 쓰레드의 DeadLock 여부를 체크하여 감지시 이벤트를 발생시킵니다. 발생 주기는 5초 단위이며 같은 DeadLock 건에 대한 이벤트는 한시간에 한번만 발생시킵니다. - text_reset
-
Default : 0
Type : Int
와탭 에이전트는 한번 보낸 텍스트유형 데이터는 hash 처리되므로 다음날까지 재전송하지 않습니다. 이전 설정값과 다른 값을 설정하는 경우 재전송 합니다.
트랜잭션 URL, SQL String 등이 텍스트유형 데이터에 해당합니다. |
7.4. 에이전트 통신
- whatap_server_host
-
Default : 127.0.0.1,127.0.0.1
Type : ip_address
에이전트가 수집한 데이터를 전송할 서버를 지정합니다. 수집서버 이중화로 2개 이상의 IP를 가진 경우 콤마(,)로 분리하여 지정할 수 있습니다. 지정된 IP 에는 수집서버 proxy 데몬이 리스닝 상태로 서비스 되어야 합니다. - whatap_server_port
-
Default : 6600
Type : tcp_port
수집서버 PORT 를 지정합니다. 포트는 하나만 지정할 수 있으므로 whatap_server_host 에 지정된 수집서버들은 동일 PORT 를 사용해야 합니다. - tcp_so_timeout
-
Default : 60000
Type : MiliSecond
수집서버와 통신하는 TCP세션의 Socket Timeout 값을 지정합니다. - tcp_connection_timeout
-
Default : 5000
Type : MiliSecond
수집서버와 통신하는 TCP세션의 Connection Timeout 값을 지정합니다. - net_send_max_bytes
-
Default : 5242880
Type : Byte
수집서버로 데이터를 전송할 때 한번에 전송되는 최대 크기를 지정합니다. - net_send_queue1_size
-
Default : 256
Type : Int
프로파일 정보와 액티브스택을 제외한 나머지 데이터 전송에 사용될 Queue의 크기를 지정 합니다. 설정된 크기가 10 이하인 경우 10으로 지정됩니다. - net_send_queue2_size
-
Default : 512
Type : Int
프로파일 정보와 액티브스택 데이터 전송에 사용될 Queue의 크기를 지정 합니다. 설정된 크기가 10 이하인 경우 10으로 지정됩니다.
7.5. 에이전트 로그 관리
- log_root
-
Default : ${WHATAP_HOME}/logs
Type : String
에이전트 로그 경로를 지정 할 수 있습니다. - log_datasource_lookup_enabled
-
Default : true
Type : Boolean
InitialContext Lookup 시 DataSource 인 경우 로그를 기록하는 기능을 활성화 합니다. - log_rotation_enabled
-
Default : true
Type : Boolean
에이전트 로그파일을 일자별로 관리하는 기능을 활성화 합니다. - log_keep_days
-
Default : 7
Type : Day
로그파일 보관기간을 지정합니다.
7.6. 트랜잭션 프로파일링
- profile_step_normal_count
-
Default: 1000
Type : Int
트랜잭션 프로파일의 최대 스텝 수를 지정합니다. - profile_step_heavy_count
-
Default: 1020
Type : Int
Heavy한 스텝의 경우 프로파일 기본 스텝 수를 초과하더라도 정해진 값 만큼은 기록 됩니다. - profile_step_heavy_time
-
Default: 100
Type : MiliSecond
Heavy한 스텝의 기준을 지정 합니다. 지정된 값보다 수행시간이 긴 경우 profile_step_normal_count 를 초과하는 경우라도 profile_step_heavy_count 이내에서 기록됩니다. - profile_basetime
-
Default: 500
Type : MiliSecond
트랜잭션이 설정된 값 이하의 시간내에 종료된 경우 프로파일 정보를 수집하지 않습니다. 단, 5 분단위로 최초 호출된 URL, 에러가 발생한 트랜잭션에 대한 프로파일 정보는 수집됩니다. - active_stack_count
-
Default : 100
Type : Int
트랜잭션 내에서 수집하는 AtiveStack 의 최대 수를 지정합니다. - profile_method_resource_enabled
-
Default : false
Type : Boolean
프로파일에서 method 스텝이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다. - profile_position_method
-
Default : NONE
Type : String
지정한 메소드가 수행되는 시점의 StackTrace를 기록합니다. - profile_position_depth
-
Default : 50
Type : Int
position 추적을 위해 StackTrace를 기록 할 때 최대 라인 수를 지정합니다. - trace_error_callstack_depth
-
Default: 50
Type : Int
Error발생시 수집하는 StackTrace의 최대 라인 수를 지정합니다. - trace_active_callstack_depth
-
Default: 50
Type : Int
액티브스택에서 수집하는 StackTrace의 최대 라인수를 지정합니다 - trace_active_transaction_yellow_time
-
Default: 3000
Type : MiliSecond
액티브 트랜잭션의 아크이퀄라이저에서 노란색으로 표현할 기준을 지정 합니다. - trace_active_transaction_red_time
-
Default: 8000
Type : MiliSecond
액티브 트랜잭션의 아크이퀄라이저에서 빨간색으로 표현할 기준을 지정 합니다. - hook_method_patterns
-
Default : NONE
Type : String
응답시간을 측정할 메소드를 지정합니다. 마지막 (.)을 구분자로 클래스 FullName과 메소드로 구분되며 (*)로 WildCard를 사용 할 수 있습니다. 대상이 여러개인 경우 콤마(,)로 구분합니다-
Ex : hook_method_patterns=a.b.C1.*
-
- hook_method_supers
-
Default : NONE
Type : String
특정 클래스를 상속받은 메소드의 응답시간을 측정하고자 할 때 Super Class를 지정합니다. 클래스 FullName을 지정하며 대상이 여러개인 경우 콤마(,)로 구분합니다.-
Ex : hook_method_supers=a.b.C1
-
- hook_method_interfaces
-
Default : NONE
Type : String
특정 인터페이스를 구현한 메소드의 응답시간을 측정하고자 할 때 Interface를 지정합니다. 인터페이스 FullName을 지정하며 대상이 여러개인 경우 콤마(,)로 구분합니다. - hook_method_ignore_classes
-
Default : NONE
Type : String
메소드 프로파일을 설정할 때 프로파일에서 제외 하고 싶은 클래스들을 지정합니다. - hook_method_access_public_enabled
-
Default : true
Type : Boolean
메소드 프로파일을 설정할 때 public 메소드에 대해서만 별도로 대상으로 할지를 결정합니다. - hook_method_access_private_enabled
-
Default : false
Type : Boolean
메소드 프로파일을 설정할 때 private 메소드에 대해서만 별도로 대상으로 할지를 결정합니다. - hook_method_access_protected_enabled
-
Default : true
Type : Boolean
메소드 프로파일을 설정할 때 protected 메소드에 대해서만 별도로 대상으로할지를 결정합니다. - hook_method_access_none_enabled
-
Default : true
Type : Boolean
메소드 프로파일을 설정할 때 no access indicated 메소드에 대해서만 별도로 대상으로 할지를 결정합니다. - stacklog_socket_port
-
Default : 0
Type : TCP_PortNumber
목적지의 TCP포트를 지정하면 Socket.connect() 시점 StackTrace를 에이전트 로그로 기록합니다. 기본설정으로 확인되지 않는 DB 연결, HTTPC 연결등을 추적할 때 사용할 수 있습니다.
설정된 목적지로 연결시마다 매번 StackTrace를 기록하므로 성능저하를 유발할 수 있습니다. 디버깅 용도로 선별된 에이전트에 한시적으로만 사용해야 합니다. * Ex : stacklog_socket_port=1521 #DB연결 상태 추적 |
- biz_exceptions
-
Default : NONE
Type : String
비즈니스 Exception을 등록합니다. 여기에 등록되면 에러통계에서 제외됩니다. 프로파일 상세에서는 나타납니다. - ignore_exceptions
-
Default : NONE
Type : String
무시할 Exception을 등록합니다. 여기에 등록되면 에러 자체가 무시됩니다. - transaction_status_error_enable
-
Default : true
Type : Boolean
HTTP 401, 403과 같이 정상 응답이 아닌 HTTP상태 코드를 반환하는 경우 에러로 처리 합니다.
7.7. HTTP 트랜잭션 추적
- profile_http_header_enabled
-
Default : false
Type : Boolean
프로파일 내역에 http 헤더 정보를 기록하고자 할 때 사용합니다. - profile_http_header_url_prefix
-
Default : /
Type : String
프로파일 내역에 http 헤더 정보를 기록할 대상 URL의 prefix를 정의 할 때 사용합니다. - profile_http_parameter_enabled
-
Default : false
Type : Boolean
프로파일 내역에 http 파라미터 정보를 기록하고자 할 때 사용합니다. 파라미터는 별도 보안키를 입력해야 조회 할 수 있습니다.
보안 키는 WAS서버 ${WHATAP_AGENT_HOME}/paramkey.txt 파일내에 6자리로 지정합니다. paramkey.txt 파일이 존재하지 않는 경우 랜덤 값으로 자동 생성됩니다. |
- profile_http_parameter_url_prefix
-
Default : /
Type : String
프로파일 내역에 http 파라미터 정보를 기록할 대상 URL의 prefix를 정의 할 때 사용합니다. - trace_transaction_name_header_key
-
Default : NONE
Type : String
트랜잭션의 이름 끝부분에 지정한 http header key에서 추출한 값을 추가합니다. - trace_transaction_name_key
-
Default : NONE
Type : String
트랜잭션의 이름 끝부분에 지정한 http request parameter 에서 추출한 값을 추가합니다. - trace_normalize_enabled
-
Default : true
Type : Boolean
트랜잭션 URL 을 파싱하여 정규화하는 기능을 활성화합니다.
false 로 변경시 패스파라미터 파싱이 비활성화됩니다. 이 경우 통계데이터의 의미가 약화됨으로 디버그 용도로만 잠시 사용하는 것이 좋습니다. |
- trace_auto_normalize_enabled
-
Default : true
Type : Boolean
트랜잭션 URL 정규화할때 패턴값을 어노테이션에서 추출하여 자동으로 파싱하는 기능을 활성화합니다. - trace_normalize_urls
-
Default : NONE
Type : String
정규화 할 트랜잭션 URL 패턴을 정의 한다. 호출 URL 패턴을 파싱하여 패스파라미터를 제거합니다.
ex) /a/{v}/b 라고 선언하면 a/123/b ⇒ a/{v}/b 로 치환한다 여러 개를 등록할 때는 콤마(,)를 사용합니다. 치환패턴 정리 후 보완필요 |
- web_static_content_extensions
-
Default : js, htm, html, gif, png, jpg, css, swf, ico
Type : String
스태틱 컨텐츠임을 판단하는 확장자를 지정합니다. 여기에 설정된 확장자를 가진 트랜잭션들은 프로파일 추적과 카운팅이 제외됩니다. - recursive_max
-
Default : 1000000
Type : Int
트랜잭션의 재귀호출 여부 검출을 위한 옵션으로, 단일 트랜잭션으로 부터 파생되는 재귀호출 횟수를 카운트하여 이벤트 알림을 발행하기 위한 기준을 지정합니다.
HTTP URL 재귀호출을 대상으로 함 jsp:forward 를 통해 재호출 되는 케이스도 카운트에 포함됨 |
- hook_httpservlet_classes
-
Default : NONE
Type : String
HTTP 트랜잭션의 END POINT 를 추가로 지정한다. 메소드의 첫번째 2 개의 파라미터는 HttpServletRequest 와 HttpServletResponse 만 지정 가능합니다. - hook_jsp_patterns
-
Default : org.apache.jasper.servlet.JspServlet.serviceJspFile
Type : String
JSP 파일을 로딩하는 메소드를 지정합니다. 트랜잭션 호출 결과로 반환되는 JSP 정보를 프로파일에 표시합니다. 본 옵션을 통해 추가한 설정에 default 설정이 자동으로 추가됩니다. - trace_ignore_url_set
-
Default : NONE
Type : String
트랜잭션 추적에서 제외할 URL을 지정한다. - trace_ignore_url_prefix
-
Default : NONE
Type : String
트랜잭션 추적에서 제외할 URL prefix를 지정한다.
7.8. NON-Http 트랜잭션 추적
- trace_auto_transaction_enabled
-
Default : false
Type : Boolean
프로파일 대상 메소드가 트랜잭션 시작점(Javax.http.httpservlet, hook_service_*) 내에서 수행되는 경우가 아니라면 수집이 되지 않습니다. 이 경우 프로파일 대상 메소드가 트랜잭션 시작점이 되도록 지정합니다.
주로 개발환경에서 백그라운드 트랜잭션의 END POINT 를 찾아낼 때 사용합니다. |
- trace_auto_transaction_backstack_enabled
-
Default : true
Type : Boolean
trace_auto_transaction_enabled=true 이 설정된 경우에 트랜잭션 시작시 StackTrace를 기록합니다. 이를 통해 트랜잭션의 시작점을 찾아낼 수 있습니다. - trace_background_socket_enabled
-
Default : true
Type : Boolean
트랜잭션이 아닌 백그라운드 쓰레드에 의한 소켓이 오픈될 때도 이를 기록합니다. - async_stack_enabled
-
Default : false
Type : Boolean
백그라운드 쓰레드에 대한 Active Stack 기능 사용 여부를 선택합니다. - async_thread_match
-
Default : NONE
Type : String
액티브 스택을 덤프할 백그라운드 쓰레드 이름을 지정한다. ","로여러개를 지정할 수있습니다. 이름을 지정할때는 "Thread-" 처럼 ""를 사용해서 비교 패턴을 사용할 수 있습니다. - async_thread_parking_class
-
Default : sun.misc.Unsafe
Type : String
스택의 Top메소드가 async_thread_parking에 등록된 클래스/메소드일때 쓰레드가 파킹상태에 있다고 판단하고 덤프를 생성하지 않습니다. - hook_service_patterns
-
Default : NONE
Type : String
NON-Http 트랜잭션 추적을 위한 시작점 패턴을 설정한다. - hook_serivce_ignore_methods
-
Default : NONE
Type : String
hook_service_patterns 에서 설정된 내역 중 시작점으로 불필요한 메소드를 추가 할 수 있다. - hook_service_supers
-
Default : NONE
Type : String
NON-Http 트랜잭션 추적을 위한 시작점의 공통 분모가 특정 클래스의 메소드를 상속받은 경우라면 이를 설정한다. - hook_service_interfaces
-
Default : NONE
Type : String
NON-Http 트랜잭션 추적을 위한 시작점의 공통 분모가 특정 인터페이스를 구현한 경우라면 이를 설정한다. - hook_service_access_public_enabled
-
Default : true
Type : Boolean
Non Http Demon 프로세스의 트랜잭션을 지정할 때 public 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다 - hook_service_access_private_enabled
-
Default : true
Type : Boolean
Non Http Demon 프로세스의 트랜잭션을 지정할 때 private 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다 - hook_service_access_protected_enabled
-
Default : true
Type : Boolean
Non Http Demon 프로세스의 트랜잭션을 지정할 때 protected 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다 - service_name_mode
-
Default : full
Type : String
트랜잭션 명을 지정하기 위해 full,class,method,string,arg 5가지 옵션을 사용할 수있습니다.full : Full Class이름 사용 class : Class 이름 서비스 명으로 사용 method : Method이름을 서비스 명으로 사용 string : 문자열중에서 첫번째 파라미터를 서비스 명으로 사용 arg : 파라미터중에서 service_name_index옵션에 지정한 인덱스이 파라미터를 서비스 명으로 사용
7.9. 트랜잭션 연계 추적
- mtrace_enabled
-
Default : false
Type : Boolean
트랜잰션 연계 추적 기능(MTID)을 사용 여부를 설정합니다. MTID 를 추적하면 등록된 모든 애플리케이션간의 호출을 확인 할 수 있습니다. - mtrace_rate
-
Default : 10
Type : Percentage
최초 트랜잭션이 발생할 때 발급받는 MTID(Multi Transaction ID)의 발급비율을 설정하는 옵션입니다. - mtrace_caller_key
-
Default : x-wtap-mst
Type : String
MTID 추적에 사용할 Caller Key Name을 정합니다. - mtrace_callee_key
-
Default : x-wtap-tx
Type : String
MTID 추적에 사용할 Callee Key Name을 정합니다. - mtrace_send_url_length
-
Default : 80
Type : Int
Http Caller는 Callee에게 자신의 URL을 넘져줍니다. 이때 URL길이를 제한하고 있습니다. 이 길이를 지정합니다. - mtrace_callee_id_send_enabled
-
Default : false
Type : Boolean
MTID 추적시 HTTPC 호출과 함께 발행된 Callee ID를 프로파일에 표현합니다. - mtrace_callee_id_recv_enabled
-
Default : false
Type : Boolean
MTID 추적시 수신한 Callee ID를 프로파일에 표현합니다. - mtrace_alltx_enabled
-
Default : false
Type : Boolean
log4j와 같은 로깅 시스템과 연계하기 위해서 모든 트랜잭션의 mtid를 추적할수있습니다. - mtrace_basetime
-
Default : 100
Type : Miliseconds
mtrace_alltx_enabled=true하면 너무 많은 로그가 남을 수있습니다. 이때는 프로파일 로깅량을 줄일 필요가 있습니다. - stat_mtrace_enabled
-
Default : false
Type : Boolean
Caller와 Callee의 상관 관계 통계를 수집합니다.
Caller에 적용하면 Caller의 상세 정보를 보내주고 Callee에 적용되면 url단위 Caller-Callee 호출통계를 수집서버로 전송합니다.
7.10. DB, SQL
- dbcp_pool_enabled
-
Default : true
Type : Boolean
JMX를 사용하지 않고 DBCP의 DB Connection 정보를 추적하기 위해 사용됩니다. - hikari_pool_enabled
-
Default : false
Type : Boolean
JMX를 사용하지 않고 hikari pool의 DB Connection 정보를 추적하기 위해 사용됩니다. - tomcat_ds_enabled
-
Default : false
Type : Boolean
JMX를 사용하여 Tomcat DB Connection Pool 정보를 추적하는 기능을 활성화 합니다. - tomcat_pool_enabled
-
Default : true
Type : Boolean
JMX를 사용하지 않고 Tomcat DB Connection Pool 정보를 추적하는 기능을 활성화 합니다. - weblogic_ds_enabled
-
Default : false
Type : Boolean
JMX를 사용하여 Weblogic DB Connection Pool 정보를 추적하는 기능을 활성화 합니다. - weblogic_pool_enabled
-
Default : true
Type : Boolean
JMX를 사용하지 않고 Weblogic DB Connection Pool 정보를 추적하는 기능을 활성화 합니다. - jeus_pool_enabled
-
Default : true
Type : Boolean
JMX를 사용하지 않고 JEUS DB Connection Pool 정보를 추적하는 기능을 활성화 합니다. - profile_connection_open_enabled
-
Default : true
Type : Boolean
프로파일 내역에 DBConnection 오픈 정보를 기록합니다. - profile_dbc_close
-
Default : false
Type : Boolean (profile_connection_open_enabled=true 에서만 동작)
프로파일 내역에 DBConnection 클로즈 정보를 기록합니다. - profile_sql_param_enabled
-
Default : false
Type : Boolean
프로파일 내역에 SQL 파라미터 정보를 기록하고자 할 때 사용합니다. 파라미터는 별도 보안키를 입력해야 조회 할 수 있습니다.
보안 키는 WAS서버 ${WHATAP_AGENT_HOME}/paramkey.txt 파일내에 6자리로 지정합니다. paramkey.txt 파일이 존재하지 않는 경우 랜덤 값으로 자동 생성됩니다. |
- profile_sql_resource_enabled
-
Default : false
Type : Boolean
프로파일에서 SQL 이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다. - profile_update_count
-
Default : false
Type : Boolean
excuteUpdate() 메소드를 통해 SQL UPDATE문이 수행된 경우 UPDATE 건수를 수집합니다. - custom_pool_classes
-
Default : NONE
Type : String
pre-define되지 않는 별도의 Connection Pool을 사용하는 경우 해당 클래스 명을 지정한다. - ds_update_interval
-
Default : 5000
Type : MiliSeconds
DB Connection 정보 Count 주기를 설정한다. - profile_position_sql
-
Default : false
Type : Boolean
SQL이 수행되는 시점의 StackTrace를 기록한다. - trace_dbc_leak_enabled
-
Default : false
Type : Boolean
DBConnection Leak 을 추적하는 기능을 활성화합니다.
Connection Wrapper를 사용해 Leak을 추적하기에 운영 서비스에 영향을 미칠 수 있으므로 반드시 테스트후 적용해야 합니다. |
- trace_dbc_leak_fullstack_enabled
-
Default : false
Type : Boolean
DBConnection Leak이 감지되는 경우 해당 시점 StackTrace를 수집합니다.
옵션 적용시 CPU 사용량이 다소 증가할 수 있습니다. PeakTime시 적용을 피하고 문제해결 용도로만 한시적으로 적용 할 것을 권고합니다. |
- trace_sql_normalize_enabled
-
Default : true
Type : Boolean
SQL 문에서 리터럴 부분을 축출하여 SQL 문을 정규화하는 기능을 활성화합니다. - profile_error_jdbc_fetch_max
-
Default : 10000
Type : Int
SQL Fetch Count(ResultSet.next() 호출 건 수)가 지정한 값을 초과하면 TOO MANY Fetch 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를 하지 않습니다. - profile_error_sql_time_max
-
Default : 30000
Type : MiliSecond
SQL 수행시간이 지정한 값을 초과하면 TOO SLOW 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를 하지 않습니다. - hook_connection_open_patterns
-
Default : NONE
Type : String
DB Connection Open 시 호출되는 메소드를 등록합니다. 미리 지정되지 않은 Connection Pool 의 getConnection을 등록하는 것이 일반적입니다.-
Ex : hook_connection_open_patterns=mypool.ConPool.getConnection
-
- hook_jdbc_con_classes
-
Default : NONE
Type : String
미등록 되었던 JDBC Connection 클래스를 지정합니다.-
Ex : hook_jdbc_con_classes=mypool.ConPool
-
- hook_jdbc_pstmt_classes
-
Default : NONE
Type : String
미등록 되었던 jdbc PreparedStatement 클래스를 지정합니다. 주의할 점은 생성자 파라미터에 SQL 문자열이 전달되는 구조여야 합니다.-
Ex : org.apache.derby.impl.jdbc.EmbedPreparedStatement
-
- hook_jdbc_cstmt_classes
-
Default : NONE
Type : String
미등록 되었던 jdbc CallableStatement 클래스를 지정합니다.-
Ex : org.apache.derby.impl.jdbc.EmbedCallableStatement
-
- hook_jdbc_stmt_classes
-
Default : NONE
Type : String
미등록 되었던 JDBC Statement 클래스를 지정합니다.-
Ex : org.apache.derby.impl.jdbc.EmbedStatement
-
- hook_jdbc_rs_classes
-
Default : NONE
Type : String
미등록되었던 JDBC ResultSet 클래스를 지정합니다.-
Ex : org.apache.derby.impl.jdbc.EmbedResultSet
-
- hook_jdbc_wrapping_driver_patterns
-
Default : NONE
Type : String
DB2 드라이버처럼 난독 처리된 JDBC 드라이버는 hook_jdbc_xxx 옵션으로 직접 BCI 가 어렵다. 이런 경우 Wrapper 방식으로 SQL 추적할 수 있는데 이때 Driver.connect 를 지정하여 추적하게 됩니다. - debug_dbc_stack_enabled
-
Default : false
Type : Boolean
DB Connection 시점의 StackTrace 를 프로파일에 저장합니다. 어플리케이션에서 사용하는 Connection Pool 정보를 얻기위해 사용됩니다.
7.11. HTTPC, API Call
- profile_error_httpc_time_max
-
Default : 10000
Type : MiliSecond
HTTPC 수행시간이 지정한 값을 초과하면 TOO SLOW 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를 하지 않습니다. - profile_httpc_resource_enabled
-
Default : false
Type : Boolean
프로파일에서 HTTP Call 스텝이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다. - profile_position_httpc
-
Default : false
Type : Boolean
HTTPC가 수행되는 시점의 StackTrace를 기록합니다. - trace_httpc_normalize_enabled
-
Default : true
Type : Boolean
트랜잭션내 HTTPC URL 을 파싱하여 정규화하는 기능을 활성화합니다. - trace_httpc_normalize_urls
-
Default : NONE
Type : String
정규화 할 HTTPC URL 패턴을 정의 한다. 호출 URL 패턴을 파싱하여 패스파라미터를 제거합니다.
ex) /a/{v}/b 라고 선언하면 a/123/b ⇒ a/{v}/b 로 치환한다 여러 개를 등록할 때는 콤마(,)를 사용합니다. 치환패턴 정리 후 보완필요 |
- hook_httpc_patterns
-
Default : NONE
Type : String
HTTP Call 을 수행하는 클래스를 지정합니다.
7.12. Plug-in
- hook_trace_helper_patterns
-
Default : NONE
Type : String
메소드 실행 및 종료 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다
plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다. $WHATAP_HOME/plugin/TraceHelperStart.x $WHATAP_HOME/plugin/TraceHelperEnd.x |
- hook_trace_helper_end_patterns
-
Default : NONE
Type : String
메소드 종료 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다.
plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다. $WHATAP_HOME/plugin/TraceHelperEnd.x |
- hook_trace_helper_start_patterns
-
Default : NONE
Type : String
메소드 시작 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다.
plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다. $WHATAP_HOME/plugin/TraceHelperStart.x |
7.13. 사용자 수
- trace_user_enabled
-
Default : true
Type : Boolean
실시간 사용자 집계 여부를 지정합니다.
사용자 추적 옵션이 중복 설정 된 경우 동작 우선순위 1. trace_user_using_ip 2. trace_user_using_jsession 3. user_header_ticket |
- trace_user_cookie_limit
-
Default: 2048
Type : Int
사용자 집계를 위해 쿠키를 발행하는 경우 기존 쿠키가 너무 많다면 쿠키 오버플로어가 발생 할 수 있습니다. 이를 회피하기 위해 limit 를 지정합니다. - trace_user_using_ip
-
Default : true
Type : Boolean
실시간 사용자 집계시 IP 를 기반으로 합니다. - trace_user_using_jsession
-
Default : false
Type : Boolean
실시간 사용자 집계시 SESSIONID 를 기반으로 합니다. - trace_http_client_ip_header_key
-
Default : NONE
Type : String
Remote Address 를 http header의 특정 key값으로 대체합니다.예) trace_http_client_ip_header_key=X-Forwarded-For
WEB/WAS 앞에 L4와 같은 로드밸런서가 위치한 경우 Client의 IP가 아닌 L4의 IP가 Remote Address가 되는 경우가 있습니다. 이 상황에서 실제 Client IP정보가 http header에 특정 key 값으로 기록되는 경우라면 해당 key로 대체 할 수 있습니다. |
- user_header_ticket
-
Default : NONE
Type : String
HTTP Header 의 특정 값으로 사용자 수를 집계하고자 하는 경우 해당 Key값을 지정합니다.
7.14. 부하량 제어
- throttle_enabled
-
Default : false
Type : Boolean
어플리케이션의 최대 동시 처리 수를 제한하는 쓰로틀링 기능을 활성화합니다. throttle_ 으로 시작하는 모든 옵션은 throttle_enabled=true 상태에서만 동작합니다.
쓰로틀링 제어와 관련한 정책은 다음과 같은 우선순위를 가지고 있습니다. 1. Block : URL, 사용자IP 기준으로 서비스를 차단하며 가장 우선하여 적용됩니다. 2. Passing : Passing에 적용된 URL들은 Reject 정책보다 우선합니다. 3. Reject : Block, Passing 정책 이후에 Reject 정책이 적용됩니다. |
- throttle_limit
-
Default: 10000
Type : Int
에이전트별 동시 처리되는 요청(트랜잭션)수가 지정한 값을 넘으면 추가로 도달하는 요청은 reject됩니다. - throttle_rejected_message
-
Default : too many request!!
Type : String
쓰로틀링 제한시 사용자에게 전달될 메시지를 정의합니다. - throttle_rejected_forward
-
Default : NONE
Type : URL
사용자 요청이 limit 값을 넘어 reject 될 때 사용자에게 전달되는 안내 페이지 URL을 정의합니다. throttle_rejected_message와 동시에 설정된 경우 throttle_rejected_forward 가 우선적용 됩니다.
안내페이지가 동일한 컨테이너에서 서비스 되는 경우, 이 역시 동시처리 수에 산정 되므로 제귀호출로 인한 장애요소가 될 수 있습니다. 그러므로 안내 페이지는 static html 페이지로 만들거나 외부에 있어야 합니다. |
- reject_event_enabled
-
Default : false
Type : Boolean
사용자 요청이 Reject된 경우 이벤트 알람을 발생할 지를 정의합니다. - reject_event_interval
-
Default: 30000
Type : MiliSecond
Reject에 대한 이벤트 알람 발생이후 설정된 시간동안 중복된 이벤트에 대하여 알람 발생을 하지 않습니다. - throttle_blocking_url
-
Default: NONE
Type : String
throttle_limit을 초과하지 않는 경우라도 블럭킹(처리 거부) 할 URL 을 지정합니다. 시스템 장애를 유발하는 URL을 긴급하게 블럭킹 하기 위해 사용할 수 있습니다. - throttle_blocking_ip
-
Default: NONE
Type : ip_address
사용자 IP를 기준으로 블럭킹하고자 할 때 지정합니다. 디도스 공격이나 잘못된 사용자를 IP 기반으로 차단 할 때 사용할 수 있습니다. 여러개인 경우 콤마(,)를 사용합니다. - throttle_target_urls
-
Default: NONE
Type : URL
등록된 URL을 대상으로만 쓰로틀 기능을 적용한다. 여러개인 경우 콤마(,) 로 구분합니다. - throttle_passing_url
-
Default: NONE
Type : String
throttle_limit을 초과하는 경우라도 처리되어야 할 URL이 있는 경우 지정합니다. 여러개인 경우 콤마(,)를 사용합니다. - throttle_passing_url_prefix
-
Default: NONE
Type : String
throttle_limit을 초과하는 경우라도 처리되어야 할 URL들을 prefix로 경우 지정합니다. 여러개인 경우 콤마(,)를 사용합니다. - throttle_blocked_message
-
Default : request blocked!!
Type : String
요청이 블러킹 된 사용자에게 전달할 메시지를 정의합니다. - throttle_blocked_forward
-
Default : NONE
Type : URL
요청이 블러킹 된 사용자에게 전달할 URL을 정의합니다. throttle_blocked_message와 동시에 설정된 경우 throttle_blocked_forward 가 우선적용 됩니다.
7.15. 에이전트 알림 설정
- recursive_event_interval
-
Default : 300000
Type : MiliSeconds
트랜잭션의 재귀 호출에 대한 이벤트 알림 발행 간격을 지정합니다. - reject_event_enabled
-
Default : false
Type : Boolean
서비스 거절(호출 부하 제한/거절))시 이벤트 알림 발행 여부를 지정합니다. - reject_event_interval
-
Default : 300000
Type : MiliSeconds
서비스 거절(호출 부하 제한/거절))시 이벤트 알림 발행 간격을 지정합니다. - httpc_event_enabled
-
Default : false
Type : Boolean
HTTPC 연결오류 발생시 이벤트 알림 발행 여부를 지정합니다. - httpc_event_interval
-
Default : 300000
Type : MiliSeconds
HTTPC 연결오류 발생시 이벤트 알림 발행 간격을 지정합니다. - heap_event_enabled
-
Default : false
Type : Boolean
힙 사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다. - heap_event_percent
-
Default : 90
Type : Percentage
힙사용량 이벤트 알림 발행 기준 임계치를 지정합니다. - heap_event_duration
-
Default : 30000
Type : MiliSeconds
힙사용량 이벤트 알림 발행 기준 지속시간을 지정합니다. - heap_event_interval
-
Default : 300000
Type : MiliSeconds
힙사용량 이벤트 알림 발행 간격을 지정합니다. - heap_event_action
-
Default : NONE
Type : String
힙사용량 이벤트 발생 시 실행할 동적 로딩 코드 지정
($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨) |
- disk_event_enabled
-
Default : false
Type : Boolean
디스크사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다. - disk_event_percent
-
Default : 90
Type : Percentage
디스크사용량 이벤트 알림 발행 기준 임계치를 지정합니다. - disk_event_interval
-
Default : 300000
Type : MiliSeconds
디스크사용량 이벤트 알림 발행 간격을 지정합니다. - disk_event_action
-
Default : NONE
Type : String
디스크사용량 이벤트 발생 시 실행할 동적 로딩 코드 지정
($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨) |
- cpu_event_enabled
-
Default : false
Type : Boolean
CPU 사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다. - cpu_event_percent
-
Default : 90
Type : Percentage
CPU 사용량 이벤트 알림 발행 기준 임계치를 지정합니다. - cpu_event_duration
-
Default : 30000
Type : MiliSeconds
CPU 사용량 이벤트 알림 발행 기준 지속시간을 지정합니다. - cpu_event_interval
-
Default : 300000
Type : MiliSeconds
CPU 사용량 이벤트 알림 발행 간격을 지정합니다. - cpu_event_action
-
Default : NONE
Type : String
CPU 사용량 이벤트 발생 시, 실행할 동적 로딩 코드에 전달할 ID를 지정합니다.
($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨) |
- dbc_dup_event_enabled
-
Default : false
Type : Boolean
DB Connection 이 중복 할당 되었을 때 이벤트 알림 발행여부를 지정합니다. - dbc_dup_event_fullstack_enabled
-
Default : false
Type : Boolean
DB Connection 이 중복 할당 될때 Stack 확보 여부를 지정합니다. - exception_event_enabled
-
Default : false
Type : Boolean
Exception 발생 시 이벤트 알림 발행 여부를 지정합니다. - exception_event_interval
-
Default : 60000
Type : MiliSeconds
Exception 발생 시 이벤트 알림 발행 간격을 지정합니다. - exception_event_set
-
Default : Null
Type : String
대상 Exception 을 지정합니다. 여러개 지정할 경우 ','로 구분자를 사용합니다. - exception_event_action
-
Default : Null
Type : String
이벤트 발생 시 실행할 동적 로딩 코드
($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨) |
7.16. 성능 카운터 & 통계 확장
- addin_monitor_num
-
Default : 0
Type : Int
성능 카운터 확장을 위해 추가 선언할 클래스 수 addin_monitor_num에 설정한 수만큰 addin_monitor_x를 선언합니다. - addin_monitor_0
-
Default : 0
Type : Int
클래스 이름을 지정한다. 이클래스들은 모두 whatap.agent.AddinMonitor의 구현 클래스 입니다.
addin_monitor_num=2 addin_monitor_0=a.a.Class1 addin_monitor_1=a.a.Class2
- stat_domain_enabled
-
Default : false
Type : Boolean
도메인별 트랜잭션 통계를 수집합니다. - stat_domain_max_count
-
Default : 7000
Type : Int
5분동안 한 JVM에서 수집할 도메인별 트랜잭션 통계의 최대 레코드 수입니다. - stat_mtrace_enabled
-
Default : false
Type : Boolean
멀티 서버 트랜잭션에서 Callser&Callee간에 버전별 의존성 통계를 수집합니다. - mtrace_spec
-
Default: v1
Type : String
현 인스턴스의 애플리케이션 버전을 지정합니다. 임의의 문자열을 지정할 수 있습니다. 이 데이터는 호출통계를 위해 사용됩니다. - stat_mtrace_max_count
-
Default : 7000
Type : Int
멀티 서버 트랜잭션에서 Callser&Callee간에 버전별 의존성 통계의 최대 레코드 수입니다. - stat_login_enabled
-
Default : false
Type : Boolean
로그인별 트랜잭션 통계를 수집합니다. - stat_login_max_count
-
Default : 7000
Type : Int
5분동안 한 JVM에서 수집할 로그인별 트랜잭션 통계의 최대 레코드 수입니다. - stat_referer_enabled
-
Default : false
Type : Boolean
Referer별 트랜잭션 통계를 수집합니다. - stat_referer_max_count
-
Default : 7000
Type : Int
5분동안 한 JVM에서 수집할 Referer별 트랜잭션 통계의 최대 레코드 수입니다. - stat_tx_max_count
-
Default : 5000
Type : Int
트랜잭션 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다. - stat_sql_max_count
-
Default : 5000
Type : Int
SQL 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다. - stat_httpc_max_count
-
Default : 5000
Type : Int
Http Call 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다. - stat_error_max_count
-
Default : 1000
Type : Int
Error 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다. - stat_useragent_max_count
-
Default : 500
Type : Int
User Agent 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.
7.17. 일반 로그 & GC 로그 모니터링
- watchlog_enabled
-
Default : false
Type : Boolean
로그 모니터링을 활성화합니다. - watchlog_check_interval
-
Default : 2000
Type : Int
로그를 감시하는 주기입니다. 매 간격으로 로그 파일에 기록이 추가되었는지 확인합니다. - watchlog_read_count
-
Default : 8
Type : Int
로그를 읽어들이는 최대 횟수입니다. 한번에 watchlog_buffer_size만큼 읽어드립니다. - watchlog_buffer_size
-
Default : 131072(128k)
Type : Int
한번에 읽어들이는 로그 사이즈 입니다. - watchlog.LOGKEY
-
watchlog.LOGKEY.enabled=false
watchlog.LOGKEY.file=
watchlog.LOGKEY.words=
watchlog.LOGKEY.silent=10000
watchlog.LOGKEY.check_interval=1000
하나의 로그 파일을 감시하기 위한 설정입니다. file을 지정하고 감시한 word를 여러개를 ','이용하여 설정합니다. check_interval간격으로 로그를 감시하다가 키워드가 발견되면 경고하는 방식입니다. 한번 경고가 나가면 silent 만큼 경고를 멈춤니다. - gclog_enabled
-
Default : false
Type : Boolean
GC 로그 모니터링을 활성화합니다. - gclog_file
-
Default : Null
Type : File Name
GC 로그 파일경로를 지정합니다. - gclog_check_interval
-
Default : 2000
Type : Int
GC 로그를 감시하는 주기입니다. 매 간격으로 로그 파일에 기록이 추가되었는지 확인합니다. - gclog_word
-
Default : Full GC
Type : word
감시할 키워드를 등록합니다. 기본은 Full GC가 발생하면 정보를 서버에 전송하고 저장합니다.
7.18. 토폴로지 맵
- tx_caller_meter_enabled
-
Default : false
Type : Boolean
토폴로지맵에서 외부 호출정보를 표현합니다. mtrace_enabled=true 인 경우 동작합니다. - sql_dbc_meter_enabled
-
Default : false
Type : Boolean
토폴로지맵에서 SQL 호출정보를 표현합니다. - httpc_host_meter_enabled
-
Default : false
Type : Boolean
토폴로지맵에서 httpc outbound 정보를 표현합니다. - actx_meter_enabled
-
Default : false
Type : Boolean
토폴로지맵에서 액티브 트랜잭션 상태를 표현합니다.
8. 부가 정보
8.1. 애플리케이션 서버별 적용 절차
애플리케이션 서버 | 설정 위치 |
---|---|
SpringBoot |
시작 스크립트 |
Tomcat |
$CATALINA_HOME/bin/catalina.sh(bat) |
JBoss 5.0 이하 |
$JBOSS_HOME/bin/run.conf |
JBoss 7.0 이상 EAP 6.0이상 |
$JBOSS_HOME/bin/standalone.conf(domain.conf) |
WebLogic |
$WEBLOGIC_HOME/user_projects/domains/사용자도메인/bin/startWebLogic.sh(bat) |
WebSphere |
admin console 접속 |
Jeus7 |
$JEUS_HOME/domains/jeus_domain/config.xml |
Jeus6 |
$JEUS_HOME/config/$hostname/JEUSMain.xml |
Resin |
$RESIN_HOME/conf/resin.properties |
Jetty |
watch_jetty.sh(bat) |
play2 |
$PLAY_HOME/framework/build |
Liberty |
${server.config.dir}/jvm.options |
8.1.1. SpringBoot
시작 스크립트 jvm 옵션에 -javaagent를 추가합니다.
java -javaagent:{whatap.agent-x.x.x.jar의 full path} -jar {application jar}
8.1.2. Tomcat on Windows Service
Tomcat을 Windows 인스톨러로 설치한 경우 "Tomcat Service Manager" 에 옵션 적용 합니다.
Tomcat Service Manager 를 관리자 권한으로 실행합니다.
파일명 : %TOMCAT_HOME%\bin\tomcat8w.exe 또는 tomcat7w.exe

Java 탭 Java Options 항목에 에이전트 옵션을 추가 합니다.
-javaagent:%AGENT_FILE%

8.1.3. JBoss
JVM 옵션에 -javaagent 및 -Djboss.modules.system.pkgs에 설정을 추가합니다.
- JBOSS 7.0 이상 EAP 6.0이상
-
-Djboss.modules.system.pkgs=whatap 추가
#!/bin/sh
########## WHATAP ############
WHATAP_HOME=/home/ec2-user/whatap
WHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent-*.jar | sort | tail -1`
JAVA_OPTS="${JAVA_OPTS} -javaagent:${WHATAP_JAR} -Djboss.modules.system.pkgs=whatap "
########## WHATAP ############
8.1.4. WebLogic
- 설정 위치
-
$WEBLOGIC_HOME/user_projects/domains/사용자도메인/bin/startWebLogic.sh(bat)
-
javaagent 프로퍼티 설정을 추가합니다.
-

8.1.5. WebSphere
-
웹브라우저를 통해 admin console에 로그인 합니다.

-
Servers > Server Type > WebSphere application servers 메뉴를 통해 에이전트를 설치할 서버를 선택합니다.

-
선택된 서버 Configuration 탭에 Server Infrastructure의 Java and Process Management > Process definition 메뉴를 선택합니다.

-
Additional Properties의 Java Virtual Machine 메뉴를 선택합니다.

-
WEBSHERE의 서비스 포트를 확인합니다.

-
Configuration 탭의 Generic JVM arguments에 -javaagent와 -Dwhatap.port를 추가합니다.

8.1.6. Jeus
-
Jeus 설정 파일에서 JVM 옵션을 설정합니다
설정 파일 위치 | |
---|---|
Jeus7 |
$JEUS_HOME/domains/jeus_domain/config.xml 에서 jvm-option에 -javaagent 옵션을 추가합니다. |
Jeus6 |
$JEUS_HOME/config/$hostname/JEUSMain.xml 에서 command-option에 -javaagent 옵션을 추가합니다. |
<domain>
<servers>
<server>
<name>server1</name>
<jvm-config>
<jvm-option>
-Xmx1024m -XX:MaxPermSize=128m
-javaagent:/whatap/whatap.agent-2.0_19.jar
</jvm-option>
</jvm-config>
</server>
</servers>
</domain>

-
애플리케이션 서버를 재시작 합니다.
jdown && jboot
-
애플리케이션 서버 로그와 에이전트 로그를 통해 에이전트가 정상적으로 기동하였는지, 에러가 발생하지 않았는지 확인합니다.
로그 파일 위치 |
|
에이전트 |
$WHATAP_HOME/logs/whatap-{SERVER_NAME}-{DATE}.log |
JEUS6 |
$JEUS_HOME/logs/$NODE_NAME/JeusServer.log |
JEUS7 |
$JEUS_HOME/domains/$HOST_NAME/servers/$NODE_NAME/logs/JeusServer.log |
$JEUS_HOME/domains/$HOST_NAME/servers/$NODE_NAME/logs/JeusServer.log

-
에이전트가 애플리케이션 서버의 종류와 애플리케이션 서버의 서비스 container명을 인식했는지 확인합니다.
와탭 사이트에서 whatap.name과 whatap.type을 확인합니다. service.whatap.io 로그인 > 프로젝트 선택 > 서버 메뉴 선택 > 더보기 > Boot Environment 메뉴 선택을 통해 확인합니다.
whatap.type에는 애플리케이션 서버의 종류가 명시되어야 하며, whatap.name의 마지막 요소가 container이름 이어야 합니다.

8.1.7. Jetty
JVM 옵션에 -javaagent와 -Dwhatap.port를 추가합니다.
$JETTY_HOME/bin/jetty.sh 파일에 JVM 파일 옵션을 추가합니다.

또는, 옵션을 적용하여 Jetty를 기동합니다.
$ java -javaagent:/home/vagrant/whatap/whatap.agent-2.0_10.jar -Dwhatap.port=8080 -jar start.jar &
8.1.8. Resin
-
Resin 설정 파일에서 JVM 옵션을 설정합니다.
설정 파일 위치 |
|
Resin 4.x |
$RESIN_HOME/conf/resin.properties 에서 jvm-arg를 추가하여 -javaagent 옵션을 설정합니다. |
(중략)
<resin xmlns="http://caucho.com/ns/resin">
<cluster id="web-tier">
<server-default>
<jvm-arg>-Xmx1024m -XX:MaxPermSize=128m -javaagent:/whatap/whatap.agent-#.#_#.jar</jvm-arg>
</server-default>
...
</cluster>
</resin>
(중략)
-
애플리케이션 서버를 재시작 합니다.
-
애플리케이션 서버 로그와 에이전트 로그를 통해 에이전트가 정상적으로 기동 되었는지 에러가 발생하지 않았는지 확인합니다.
로그 파일 위치 |
|
에이전트 |
$WHATAP_HOME/logs/whatap-{SERVER_NAME}-{DATE}.log |
RESIN4.x |
$RESIN_HOME/log/jvm-app-#.log |
8.1.9. Play
$PLAY_HOME/framework/build 에 에이전트 옵션을 설정합니다. 별도 사용하는 시작/중지 스크립트가 있다면 그곳에 적용합니다.
#! /usr/bin/env sh
########## WHATAP START ############
WHATAP_HOME=/apps/whatap
WHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent-*.jar | sort | tail -1`
JAVA_OPTS="${JAVA_OPTS} -Dwhatap.play2=2.2.6 -javaagent:${WHATAP_JAR} " (1)
########## WHATAP END ############
if [ -z "${PLAY_VERSION}" ]; then
PLAY_VERSION="2.2.6"
(중략)
1 | Play는 기본 설정 이외 -Dwhatap.play2=2.2.6 옵션이 추가되어야 합니다. |
8.2. 호환성 검증표
8.2.1. WAS
Java 버전 별로 다양한 WAS에서 와탭 에이전트 호환성 테스트를 수행한 결과입니다.
표시되지 않은 버전은 support@whatap.io 로 문의 바랍니다. |
Tomcat
WAS Ver. |
java se6 (jdk1.6.0) |
java se7 (jdk1.7.0_80) |
java se8 (jdk1.8.0_91) |
tomcat6 |
ok |
ok |
ok |
tomcat7 |
ok |
ok |
ok |
tomcat8 |
not ok |
ok |
ok |
tomcat9 |
not ok |
not ok |
ok |
WAS Ver. |
open jdk6 (1.6.0_45) |
open jdk7 (1.7.0_80) |
open jdk8 (1.8.0_91) |
tomcat6 |
ok |
ok |
ok |
tomcat7 |
ok |
ok |
ok |
tomcat8 |
not ok |
ok |
ok |
tomcat9 |
not ok |
not ok |
ok |
WAS Ver. |
ibm-java-x86_64-60 |
ibm-java-x86_64-71 |
ibm-java-x86_64-80 |
tomcat6 |
ok |
ok |
ok |
tomcat7 |
ok |
ok |
ok |
tomcat8 |
not ok |
ok |
ok |
tomcat9 |
not ok |
not ok |
ok |
Jeus
WAS Ver. |
java se6 (jdk1.6.0) |
java se7 (jdk1.7.0_80) |
java se8 (jdk1.8.0_91) |
jeus6 |
ok |
ok |
not ok |
jeus7 |
ok |
ok |
not ok |
WAS Ver. |
open jdk6 (1.6.0_45) |
open jdk7 (1.7.0_80) |
open jdk8 (1.8.0_91) |
jeus6 |
ok |
ok |
not ok |
jeus7 |
ok |
ok |
not ok |
WAS Ver. |
ibm-java-x86_64-60 |
ibm-java-x86_64-71 |
ibm-java-x86_64-80 |
jeus6 |
ok |
ok |
not ok |
jeus7 |
ok |
ok |
ok |
JBOSS
JDK 6 이상 버전에서 지원되는 JBOSS Comunity, EAP, Wildfly의 모든 버전을 지원 합니다.
WAS Ver. |
java se6 (jdk1.6.0) |
java se7 (jdk1.7.0_80) |
java se8 (jdk1.8.0_91) |
jboss EAP 7.0 (standalone) |
not ok |
not ok |
ok |
jboss EAP 6.1.1 (standalone) |
not ok |
ok |
not ok |
jboss EAP 6.2 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.3 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.4 (standalone) |
not ok |
ok |
ok |
jboss EAP 7.0 (domain) |
not ok |
not ok |
ok |
jboss AS 5.1.0 (default) |
ok |
ok |
ok |
WAS Ver. |
open jdk6 (1.6.0_45) |
open jdk7 (1.7.0_80) |
open jdk8 (1.8.0_91) |
jboss EAP 7.0 (standalone) |
not ok |
not ok |
ok |
jboss EAP 6.1.1 (standalone) |
not ok |
ok |
not ok |
jboss EAP 6.2 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.3 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.4 (standalone) |
not ok |
ok |
ok |
jboss EAP 7.0 (domain) |
not ok |
not ok |
ok |
jboss AS 5.1.0 (default) |
ok |
ok |
ok |
WAS Ver. |
ibm-java-x86_64-60 |
ibm-java-x86_64-71 |
ibm-java-x86_64-80 |
jboss EAP 7.0 (standalone) |
not ok |
not ok |
ok |
jboss EAP 6.1.1 (standalone) |
not ok |
ok |
not ok |
jboss EAP 6.2 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.3 (standalone) |
not ok |
ok |
ok |
jboss EAP 6.4 (standalone) |
not ok |
ok |
ok |
jboss EAP 7.0 (domain) |
|||
jboss AS 5.1.0 (default) |
ok |
ok |
ok |
Jetty
WAS Ver. |
java se6 (jdk1.6.0) |
java se7 (jdk1.7.0_80) |
java se8 (jdk1.8.0_91) |
Jetty 8.1.21 |
not ok |
ok |
ok |
Jetty 9.2.18 |
not ok |
ok |
ok |
Jetty 9.3.12 |
not ok |
not ok |
ok |
WAS Ver. |
ibm-java-x86_64-60 |
ibm-java-x86_64-71 |
ibm-java-x86_64-80 |
Jetty 8.1.21 |
not ok |
ok |
ok |
Jetty 9.2.18 |
not ok |
ok |
ok |
Jetty 9.3.12 |
not ok |
not ok |
ok |
8.2.2. DataSource
와탭 에이전트가 WAS가 제공하는 Connection pool을 사용하는 웹 애플리케이션의 DB 트랜잭션 프로파일링 기능 여부에 대해 검증한 결과입니다.
Tomcat
DB |
JDBC Driver 화일명 |
JDBC Ver. |
JDK Ver. |
호환성 |
Mysql |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
MariaDB |
mariadb-java-client-1.4.6.jar |
1.4.6 |
JDK 1.7.0_80 |
ok |
PostgreSQL |
postgresql-9.4.1209.jre7.jar |
9.4.1209 |
JDK 1.7.0_80 |
ok |
AWS aurora |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
Oracle |
ojdbc6-11.2.0.2.0.jar |
11.2.0.2.0 |
JDK 1.7.0_80 |
ok |
DB2 |
db2jcc.jar, db2jcc_license_cu.jar |
1.4.2 |
JDK 1.7.0_80 |
ok |
Jeus
DB |
JDBC Driver 화일명 |
JDBC Ver. |
JDK Ver. |
호환성 |
Mysql |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
MariaDB |
mariadb-java-client-1.4.6.jar |
1.4.6 |
JDK 1.7.0_80 |
ok |
PostgreSQL |
postgresql-9.4.1209.jre7.jar |
9.4.1209 |
JDK 1.7.0_80 |
ok |
AWS aurora |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
Oracle |
ojdbc6-11.2.0.2.0.jar |
11.2.0.2.0 |
JDK 1.7.0_80 |
ok |
DB2 |
db2jcc.jar, db2jcc_license_cu.jar |
1.4.2 |
JDK 1.7.0_80 |
ok |
WebSphere
DB |
JDBC Driver 화일명 |
JDBC Ver. |
JDK Ver. |
호환성 |
Mysql |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
Oracle |
ojdbc6-11.2.0.2.0.jar |
11.2.0.2.0 |
JDK 1.7.0_80 |
ok |
JBoss
DB |
JDBC Driver 화일명 |
JDBC Ver. |
JDK Ver. |
호환성 |
Mysql |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
MariaDB |
mariadb-java-client-1.4.6.jar |
1.4.6 |
JDK 1.7.0_80 |
ok |
PostgreSQL |
postgresql-9.4.1209.jre7.jar |
9.4.1209 |
JDK 1.7.0_80 |
ok |
AWS aurora |
mysql-connector-java-5.1.39-bin.jar |
5.1.39 |
JDK 1.7.0_80 |
ok |
Oracle |
ojdbc6-11.2.0.2.0.jar |
11.2.0.2.0 |
JDK 1.7.0_80 |
ok |
DB2 |
db2jcc.jar, db2jcc_license_cu.jar |
1.4.2 |
JDK 1.7.0_80 |
ok |