+ All Categories
Home > Documents > Java Agent Guide · 2020-04-22 · Chapter 3. 고급 설치 Tomcat 과 같은 일반적인 Servlet...

Java Agent Guide · 2020-04-22 · Chapter 3. 고급 설치 Tomcat 과 같은 일반적인 Servlet...

Date post: 09-May-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
82
Java Agent Guide WhaTap Support Version 1.2.1
Transcript

Java Agent GuideWhaTap Support

Version 1.2.1

Table of ContentsJava Agent Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  1

1. 지원 환경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  21.1. JVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2

1.2. WAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2

1.3. Framework / Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2

1.4. DataSource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  2

2. 일반 설치 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  32.1. 프로젝트 생성 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3

2.2. 라이센스 발급 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  4

2.3. 에이전트 다운로드 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5

2.4. 설정 적용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6

2.5. 에이전트 적용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  6

2.6. 에이전트 적용(예) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  7

2.7. 적용 확인 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8

2.8. 에이전트 업데이트 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  8

2.9. 에이전트 삭제 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9

3. 고급 설치 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  103.1. Attach 방식 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  10

3.2. Java 1.4 이하 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  10

3.3. Maven 활용. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  12

3.4. PaaS 환경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  12

3.5. Docker 환경 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  13

4. 설치 후 점검 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  154.1. 설치 에러. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  15

4.2. 에이전트 네이밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  18

4.3. MSA 업무 그룹 구분 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  20

4.4. Scale In 에서 에이전트 자동 삭제 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  21

4.5. AES 256 암호화 적용 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  21

5. 데이터 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  235.1. 트랜잭션 추적 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  23

5.2. Active Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  26

5.3. 통계(리스트 데이터) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  27

5.4. 성능 카운터 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  31

6. 에이전트 제어와 상태 조회 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  376.1. 부트 환경. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.2. 환경 변수. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.3. 컴포넌트 버전 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.4. 쓰레드 목록/덤프 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.5. 힙 히스토그램 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.6. 로드된 클래스 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.7. 오픈 소켓. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.8. 메소드 성능 상태 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  37

6.9. DB 상태 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  38

6.10. 설정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  38

6.11. 쓰로틀링 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  38

6.12. 시스템 GC/힙덤프 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  39

6.13. 에이전트 로그 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  39

6.14. 에이전트 덤프 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  40

7. 설정 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  427.1. 설정 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  42

7.2. 에이전트 네이밍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  42

7.3. 에이전트 기능제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  43

7.4. 에이전트 통신 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  45

7.5. 에이전트 로그 관리. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  46

7.6. 트랜잭션 프로파일링 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  47

7.7. HTTP 트랜잭션 추적. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  49

7.8. NON-Http 트랜잭션 추적 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  51

7.9. 트랜잭션 연계 추적. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  53

7.10. DB, SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  54

7.11. HTTPC, API Call . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  57

7.12. Plug-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  58

7.13. 사용자 수. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  58

7.14. 부하량 제어 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  59

7.15. 에이전트 알림 설정. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  61

7.16. 성능 카운터 & 통계 확장 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  63

7.17. 일반 로그 & GC 로그 모니터링 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  65

7.18. 토폴로지 맵 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  66

8. 부가 정보 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  678.1. 애플리케이션 서버별 적용 절차 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  67

8.2. 호환성 검증표 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  76

Java Agent Guide제목 : Java Agent Guide작성자 : WhaTap Support이메일 : [email protected]날짜 : 2020-01-08버전 : 1.2.1

설명 : 본 문서는 WhaTap Java 에이전트에 대해 설명합니다.

Preface

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 1

Chapter 1. 지원 환경Web Application Server (WAS) 뿐 아니라 데몬 및 배치 애플리케이션 등 JVM에서 동작하는 모든 어플리케이션에 적용 할 수 있습니다.Java1.4 이하, Java9 이상 버전은 [email protected] 로 문의 주시면 제공 드립니다.

1.1. JVMTable 1. JVM

제품 환경 OS JVM 버전

애플리케이션 모니터링 Agent Java JVM이 구동되는 모든 OS Java1.4 이상Java11 이하

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

1.3. Framework / Library• Spring Boot Project

• Akka HTTP 및 Play Framework 등 비동기 Framework

• 이외 Java EE Spec 준수 Application Server 에서 동작하는 모든 라이브러리

1.4. DataSource• Generic JDBC (any JDBC compliant driver)

• DB2 JDBC

• Derby JDBC

• H2 JDBC

• jTDS JDBC

• MariaDB JDBC

• Microsoft SQL Server JDBC

• MySQL mysql-connector-java

• Oracle ojdbc14, ojdbc5, ojdbc6, ojdbc7, ojdbc8

• Postgres JDBC

• Tibero

• Jedis Redis driver

1.1. JVM

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 2

Chapter 2. 일반 설치와탭 APM 모니터링 서비스를 사용하기 위해서는 모니터링 프로젝트를 구성하고 대상 서버에 모니터링 에이전트를 설치해야 합니다.

설치에 앞서 필요한 사항은 설치 사전 안내서 를 참고 해 주세요.

2.1. 프로젝트 생성모니터링 프로젝트를 생성하기 위해 프로젝트 생성 버튼을 선택합니다.

Figure 1. 첫 로그인

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

2.1. 프로젝트 생성

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 3

Figure 2. 프로젝트 생성 팝업

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

2.2. 라이센스 발급

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 4

Figure 3. 신규 프로젝트

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

Figure 4. 설치 안내 페이지 - 1

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

2.3. 에이전트 다운로드

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 5

Figure 5. 설치 안내 페이지 - 2

설치 할 서버에서 직접 다운로드 받을 수도 있습니다.

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 파일 내용에 라이선스키와 데이터 수집 서버 주소가 정상적으로 들어가 있는지를 확인합니다.값이 없다면 설치 안내 페이지의 설정값을 복사해 붙여 넣습니다.

whatap.conf

license={라이센스 키}whatap.server.host={수집서버 IP}

UI를 통해 다운로드 받은 경우 whatap.conf 에 설정값이 들어가 있습니다.서버에서 직덥 다운로드 한 경우라면 설치안내 페이지에서 보여지는 라이센스키와 수집 서버 주소를 별도 입력해야 합니다.

2.5. 에이전트 적용적용 대상(WAS, Batch 및 Daemon 과 같은 Java애플리케이션)에 javagent 옵션으로 whatap agent path를 추가 합니다.

2.4. 설정 적용

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 6

JVM_OPTS

-javaagent:/whatap/whatap.agent.tracer-#.#.#.jar

재시작 후 프로세스 정보에서 설정한 옵션이 보인다면 설정 적용이 된 것입니다.

Figure 6. ps -ef |grep java

2.6. 에이전트 적용(예)환경별 설정 위치는 설치 페이지 및 애플리케이션 서버 별 적용 절차 에서 확인할 수 있습니다.

2.6.1. Tomcat – Linuxcatalina.sh 상단에 JAVA_OPTS 을 추가 합니다.

catalina.sh

WHATAP_HOME=/whatap ①########## WHATAP ############WHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent.tracer-*.jar | sort | tail -1`JAVA_OPTS="${JAVA_OPTS} -javaagent:${WHATAP_JAR} "########## WHATAP ############

① WHATAP_HOME 을 지정합니다.

2.6.2. Tomcat – Windowscatalina.bat 상단에 JAVA_OPTS 를 추가 합니다.

catalina.bat

rem ########## WHATAP ############set WHATAP_HOME=C:\whatap ①for /f %%f in ('dir /b /on %WHATAP_HOME%\whatap.agent.tracer-*.jar') do set last=%%fset WHATAP_JAR=%last%if x%JAVA_OPTS:whatap=%==x%JAVA_OPTS% (  set JAVA_OPTS=%JAVA_OPTS% -javaagent:%WHATAP_HOME%\%WHATAP_JAR%)rem ########## WHATAP ############

① WHATAP_HOME 을 지정합니다.

2.6.3. WAS 재기동애플리케이션 서버를 재기동 합니다.구동 로그를 확인 했을때 다음과 같은 WhaTap 캐릭터 로그가 보인다면 JAVA_OPTS 설정이 정상 적용 된 것입니다.

2.6. 에이전트 적용(예)

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 7

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

2.7. 적용 확인생성한 프로젝트 화면에 Agent가 보여지면 적용이 완료 된 것입니다.

Figure 7. 프로젝트

Agent 명의 기본값은 {type}-{ip2}-{ip3}-{port} 입니다.속성을 추가 하거나 이름을 변경하고자 하는 경우 에이전트 네이밍 을 참고 해 주시면 됩니다.

2.8. 에이전트 업데이트관리 | 에이전트 업데이트 메뉴를 선택 후 다운로드 또는 모든 서버에 다운로드 버튼을 클릭합니다.

다운로드 된 에이전트는 어플리케이션 재시작시 자동 적용됩니다.

2.7. 적용 확인

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 8

Figure 8. 관리 - 에이전트 업데이트

2.9. 에이전트 삭제애플리케이션 서버 JVM 옵션의 -javaagent 설정을 삭제 후 애플리케이션 서버를 재기동 합니다. 이후 $WHATAP_HOME 을 삭제 합니다.

2.9. 에이전트 삭제

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 9

Chapter 3. 고급 설치Tomcat 과 같은 일반적인 Servlet 기반이 아닌 경우, 특수한 환경에서도 적용 할 수 있도록 다양한 설치 방안을 제공 합니다.프로젝트 생성 및 에이전트 다운로드는 일반 설치과정과 동일합니다.

3.1. Attach 방식Attach 방식으로 WhaTap Agent 를 적용 할 수 있습니다.com.sun.tools.attach API를 사용해 애플리케이션 재시작 없이 WhaTap Agent를 적용 합니다.

ps 명령을 사용해 PID 를 확인 합니다.

Tomcat - 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 $pid

$ ./attach.sh 3058

JAVA_HOME=/jdk1.8.0_111_ ____ ______| | /| / / / ___ /_ __/__ ____| |/ |/ / _ \/ _ `// / / _ `/ _ \|__/|__/_//_/\_,_//_/ \_,_/ .__/  /_/Just Tap, Always MonitoringWhaTap Agent version 0.4.2 20161123Admin: ec2-userPID: 3128Java Path: /jdk1.8.0_111/jreJava Version: 1.8.0_111AttachAgent Success : [3058] org.apache.catalina.startup.Bootstrap start

프로젝트 화면에서 에이전트가 정상 등록 되었는지 확인 합니다.

Attach 는 일회성 적용 입니다.Attach 적용 후 일반 설치에 사용되는 “javaagent” 옵션을 적용 하면 애플리케이션 재기동 후에도 모니터링이 유지됩니다.

3.2. Java 1.4 이하JDK1.4 환경에서 와탭 모니터링은 제약사항이 있으며, 설치 방법도 차이가 있습니다.

JDK1.4를 위한 에이전트 모듈은 [email protected]로 요청 바랍니다.

3.1. Attach 방식

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 10

whatap.java14.tracer-[version].jar

3.2.1. boot.jar 생성setup.sh를 사용하여 boot.jar파일을 생성합니다.

$setup.sh [JAVA_HOME]

만약 [JAVA_HOME]을 지정하지 않으면 현재 패스에 걸려 있는 JDK의 위치를 자동으로 인식합니다.

setup.sh 결과 파일

whatap.java14.boot-1.0.2.jar

3.2.2. bootclasspath에 설치bootclasspath 옵션을 사용해 빌드된 jar와 tracer jar를 prepend로 추가합니다.

java 실행 옵션

-Xbootclasspath/p:${WHATAP_HOME}/whatap.java14.boot-1.0.2.jar:${WHATAP_HOME}/whatap.java14.tracer-1.0.2.jar

3.2.3. 제약 사항jdk1.4에서는 기능 제약있습니다.

동적 프로파일링이 안됩니다.액티브스택이 동작하지 않습니다.최신 기능이 동작하지 않습니다.

아래의 기능들이 동작하지 않습니다.

대분류 소분류 항목

대시보드 액티브 트랜잭션 실시간 스택트레이스

스택 탑 스택 전체 항목

스택 유니크 스택 전체 항목

스택 엑티브 스택 전체 항목

서버 더보기 컴포넌트 버전

서버 더보기 스레드 목록

서버 더보기 힙 히스토그램

서버 더보기 로드된 클래스

서버 더보기 오픈 소켓

서버 더보기 Method Perf Stat

서버 더보기 에이전트 덤프

3.2. Java 1.4 이하

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 11

3.3. Maven 활용Maven pom.xml 에 에이전트를 정의해 버전과 설정을 관리 할 수 있습니다.

3.3.1. pom.xml 설정repository 와 dependency

<!-- 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_07</version> ①  <scope>provided</scope>  </dependency></dependencies>

① 릴리즈 노트 참고해 버전 정보 지정 합니다.

3.3.2. whatap.conf 설정일반 설치와 동일하게 whatap.conf 를 설정 합니다.

whatap.conf 와 paramkey.txt 는 agent jar 파일과 동일한 경로에 둡니다.

3.3.3. javaagent 옵션 적용JVM 옵션에 추가 합니다.

-javaagent:/path/to/whatap.agent-{version}.jar

3.4. PaaS 환경PaaS 환경은 배포 대상 어플리케이션에 WhaTap Agent 와 설정을 포함하여 배포합니다.

3.4.1. IBM BlueMixIBM BlueMix 는 컨테이너로 WebSphere Liberty 환경을 제공합니다. Liberty는 WebSphere Application Server 와 다른 경량화 환경으로 SpringBoot 가 동작하는 방식과 유사합니다.

설정 환경 예제 입니다. 가이드에 따른 환경 구성시 로컬 개발환경에서 생성되는 파일들은 아래와 같습니다.

3.3. Maven 활용

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 12

whatap@vmwas01:/apps/bluemix/java-helloworld$ ls -alrt합계 64drwxrwxr-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.mddrwxrwxr-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 LICENSEdrwxrwxr-x 3 whatap whatap 4096 10월 29 13:13 srcdrwxrwxr-x 2 whatap whatap 4096 10월 29 13:13 targetdrwxrwxr-x 8 whatap whatap 4096 10월 29 13:13 .gitdrwxrwxr-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 파일이므로 공백, 들여쓰기 기준을 잘 맞춰야 합니다.

manifest.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.5. Docker 환경기존 Docker 이미지를 바탕으로 WhaTap 설정이 추가된 이미지를 빌드 합니다.

Step -1 도커 빌드 디렉토리 생성 합니다.

mkdir -p {Docker build Dir}

Step -2 whatap.conf 파일을 생성합니다.

cat >{Docker build Dir}/whatap.conf <<EOLlicense=XXXXXXXXXXXXXX-XXXXXXXXXXXXXX-XXXXXXXXXXXXXX ①whatap.server.host=xx.xx.xx.xx/yy.yy.yy.yy ②EOL

① 프로젝트 라이센스키를 입력합니다.

3.5. Docker 환경

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 13

② Proxy IP 정보를 입력 합니다.

Step -3 Dockerfile을 생성합니다.이미지를 빌드할때 와탭 이미지에서 -javaagent 옵션에 적용할 jar파일을 복사할수 있습니다.

cat >/home/silver/whatap/docker/Dockerfile <<EOLFROM whatap/kube_mon as build#실제 이미지 생성 ( 기존 이미지에 Whatap 추가 )# $Image_Name(이미지명)FROM $Image_NameRUN mkdir -p /whatapCOPY --from=build /data/agent/micro/whatap.agent.tracer-*.jar /whatapCOPY ./whatap.conf /whatap/... {중략} ...EOL

Step -4 JAVA_OPTS에 아래 내용을 추가합니다.

WHATAP_HOME=/whatapWHATAP_JAR=ls ${WHATAP_HOME}/whatap.agent.tracer-*.jar | sort | tail -1export JAVA_OPTS="-javaagent:${WHATAP_JAR} -Dwhatap.micro.enabled=true "

Step -5 Docker 빌드

cd dockerdocker build -t $Image_Name

Step -6 environment variable

env:- name: NODE_IPvalueFrom: {fieldRef: {fieldPath: status.hostIP}}- name: NODE_NAMEvalueFrom: {fieldRef: {fieldPath: spec.nodeName}}- name: POD_NAMEvalueFrom: {fieldRef: {fieldPath: metadata.name}}

3.5. Docker 환경

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 14

Chapter 4. 설치 후 점검

4.1. 설치 에러

4.1.1. 방화벽 설정 확인와탭 서버에 대한 TCP 아웃바운드 정책이 설정되어 있지 않으면 모니터링 정보를 전송 할 수 없으므로 방화벽 차단을 해제해야 합니다.

telnet 명령을 사용해 " Connected to <IP> " 를 확인 해야 합니다.

telnet

$ telnet 52.193.60.176 6600Trying 52.193.60.176...Connected to 52.193.60.176.Escape character is '^]'.

• 수집 서버 IP 정보는 와탭 웹사이트에서 해당 프로젝트의 관리 > 에이전트 설치 메뉴에서 확인할 수 있습니다.

4.1.2. 애플리케이션 서비스 포트가 감지되지 않는 경우어플리케이션 기동 시간이 1분 이상이거나 일반적이지 않은 구조에서 포트 감지에 실패하는 경우, 에이전트는 포트 대신 PID(프로세스 ID)를전송합니다.포트는 고정값인 반면 PID는 재기동시 달라지므로 이 경우 어플리케이션의 연속성 식별이 어려울 수 있습니다.

이 경우 JVM 옵션에 whatap.port 속성을 추가 후 애플리케이션 서버를 재기동합니다.

JAVA_OPTS

JAVA_OPTS="${JAVA_OPTS} -Dwhatap.port=8080 "

애플리케이션 서버 별 JVM 옵션 설정 파일은 ‘애플리케이션 서버 별 적용절차’에서 확인할 수 있습니다.

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

4.1. 설치 에러

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 15

Figure 9. JBOSS .EAP 7.0 예시

WebSphere

 -Dcom.ibm.ws.classloader.server.alwaysAllowedPackages=whatap

• Default로 ‘*’로 지정되어 있는 경우는 별도의 설정을 필요로 하지 않습니다.

• 설정 위치는 ‘WebSphere‘를 참조합니다.

security.policy 권한 추가

$WEBSPHERE_HOME/properties/server.policy 또는 $WEBSPHERE_PROFILE_HOME/properties/server.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. 설치 에러

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 16

Figure 10. 설정 추가 예

4.1.6. MBeanServerBuilder 에러가 발생하는 경우JBoss 5.0 이하에서 MBeanServerBuilder 관련 에러가 출력된 경우 JVM 옵션 추가 합니다.

-Djboss.platform.mbeanserver를 true로 설정합니다.

Figure 11. 설정 추가 예

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;};

java.io.FilePermission 오류가 발생하는 경우

4.1. 설치 에러

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 17

$JAVA_HOME/jre/lib/security/java.policy 파일에 하기의 설정을 추가합니다.

grant {  ...  permission java.io.FilePermission {오류 메세지에서 확인된 패키지 경로}, "read"};

java.util.PropertyPermission 오류가 발생하는 경우

$JAVA_HOME/jre/lib/security/java.policy 파일에 하기의 설정을 추가합니다.

grant {  ...  permission java.util.PropertyPermission {오류 메세지에서 확인된 패키지 경로}, "read"};

4.1.8. Sigar library를 로딩하지 못하는 경우$WHATAP_HOME/lib1/*.so 파일에 실행 권한이 있는지 확인 후 없다면 실행 권한을 부여합니다.

$ sudo chmod +x *.so

AIX 7에서 $WHATAP_HOME/lib1 하위에 libsigar-ppc64-aix-7.so 파일이 없어 오류가 발생한 경우 파일을 복사 합니다.

$ cp libsigar-ppc64-aix-5.so libsigar-ppc64-aix-7.so

4.2. 에이전트 네이밍모니터링 대상을 식별하기 위해서는 이를 구분해야 할 필요가 있으며 와탭은 오브젝트 이름과 오브젝트 아이디를 통해서 대상을 구분합니다.

오브젝트(에이전트)이름은 프로젝트 단위로 고유해야 합니다.오브젝트 아이디/이름이 바뀌면 이전 데이터와 연결되지 않습니다

와탭 모니터링 서비스에서는 모니터링 대상을 오브젝트 또는 에이전트로 혼용해서 사용합니다.

4.2. 에이전트 네이밍

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 18

4.2.1. 이름 결정 방식추가적인 설정이 없는 경우 오브젝트 이름은 자동으로 결정 됩니다.

예) IP 주소가 10.11.12.13 인 서버에서 Tomcat 이 8080 포트로 기동된 경우 TC-12-13-8080 이라는 오브젝트 이름으로 자동 부여됩니다.

whatap.oname 설정이 없는 경우 (기본값)

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. 이름 지정자동으로 부여된 이름 대신 직접 이름을 정할수도 있습니다.

4.2. 에이전트 네이밍

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 19

우선순위 옵션 설정위치 설명

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 속성을 부여하면 쉽게 식별이 가능합니다.

전형적인 Docker 환경의 모습입니다.

• 각 에이전트는 잘게 쪼개어 놓은 MSA (Micro Service Architecture) 구성 요소 입니다.

• 에이전트들은 자동으로 Scale In/Out 됩니다.

• 어떤 IP를 가진 서버에서 어떤 pid 로 어플리케이션이 기동 될 지는 예측 할 수 없습니다.

이 경우 이름과 더불어 업무를 식별 할 수 있는 whatap.okind 옵션을 사용해 okind 속성을 추가 합니다.

JVM 옵션에 추가 할 수 있습니다.

JAVA_OPTS

-Dwhatap.okind=mobile_ui

설정 파일에 추가 할 수도 있습니다.

whatap.conf

whatap.okind=common_api

MSA 환경이라면 okind 속성을 추가해야만 와탭이 제공하는 다양한 기능을 활용 할 수 있습니다.

4.3. MSA 업무 그룹 구분

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 20

4.4. Scale In 에서 에이전트 자동 삭제에이전트 이름을 자동부여하는 것은 Scale Out 시 운영자의 개입 없이 시스템을 자동으로 확장하기 위함입니다 그런데 Auto Scale 환경에서 Scale In이 발생하는 경우 정상적인 Shutdown으로 인식하는 것이 필요합니다.

자동 삭제를 위해서는 서버에서 에이전트로 부터 자동 삭제에 대한 메세지를 받아야 합니다. ${WHATAP_HOME}에 Java 프로세스의 {processid}.shutdown 파일이 나타나면 5초 이내에 에이전트는 서버에 “SILENT_SHUTDOWN” 이벤트를 전송합니다.

SILENT_SHUTDOWN 이벤트가 전송되고 1분 이내에 에이전트가 셧다운되면 와탭서버는 해당 에이전트를 곧바로 목록에서 제거하고inactive이벤트도 발생키지 않습니다.

Tomcat 의 경우 shutdown.sh 에 지정 할 수 있습니다.

$TOMCAT_HOME/bin/shutdown.sh

touch $WHATAP_HOME/$CATALINA_PID.shutdown

4.5. AES 256 암호화 적용와탭 APM 에이전트는 수집된 데이터를 암호화하여 서버로 전송합니다.이를 위해 XOR 연산과 AES 암호화를 사용, 평문을 128비트 단위로 나누어 암복호화를 수행합니다.

강화된 보안을 필요로 하는 경우 256비트까지 확장할 수 있습니다.기본적으로 JCE는 128비트를 지원하기 때문에 AES 256 비트를 적용하기 위해서는 jce 업데이트가 필요 합니다.

기본 환경에서 AES 256 적용시 오류

Unsupported keysize or algorithm parameters.##혹은,Illegal key size or default parameters.

• Java 8

◦ https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

• Java 7

◦ http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

• Java 6

◦ http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

• Java 5

◦ http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR

• Java 1.42

◦ http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#7503-jce-1.4.2-oth-JPR

링크에서 파일을 다운로드 한 후 $JAVA_HOME/jre/lib/security에 파일을 덮어씁니다.

jce 가 적용 되었다면 ${WHATAP_HOME}/whatap.conf 파일에 아래 설정을 추가합니다.

cypher_level=256 설정을 추가합니다.

cypher_level=256

4.4. Scale In 에서 에이전트 자동 삭제

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 21

애플리케이션 재시작 이후 적용 됩니다.

4.5. AES 256 암호화 적용

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 22

Chapter 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

이렇게 패스파라미터를 그대로 트랜잭션 이름으로 사용하게 되면 통계적 관점의 성능 분석이 어렵게 됩니다. 따라서 이를 정규화할 필요가있습니다. 와탭은 이때 정규화를 위한 옵션과 기능을 제공하고 있습니다.

whatap.conf

 trace_normalize_urls=/hr/{name}/apply.do

위와 같이 설정하면 트랜잭션 이름이 /hr/kim/apply.do → /hello/:name/apply.do 로 치환되어 수집됩니다. 만약 대상 url설정은 그대로 두고기능만off하고자 한다면 다음과 같이 옵션을 지정할 수있습니다. 기본값은 true입니다.

whatap.conf

 trace_normalize_enabled=false

5.1. 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 23

5.1.2. 트랜잭션 프로파일트랜잭션 성능이 트랜잭션 시작과 종료사이의 요약 지표들이나 속성들을 의미한다면 트랜잭션 프로파일은 트랜잭션이 수행되는 과정중이 스텝들을추적하는 것입니다.

트랜잭션이 느리거나 오류가 있다면 그 원인을 추적하기 위해서 수행 이력을 스텝별로 추적할 필요가 있는데 이것을 트랜잭션 프로파일링이라고합니다.

와탭이 수집하는 스텝의 종류에는 크게 SQL 스텝, HTTP CALL스탭, 메세지 스텝, SOCKET오픈 스텝, DB연결 스텝, 메소드 스텝등이 있습니다.

DB연결 스텝

수집방식: START-ENDRDB에 대한 연결에 대한 성능을 포함합니다. 스텝 정보에는 이름,응답시간,에러를 포함합니다.

SQL 스텝

수집방식: START-ENDJDBC SQL에 대한 성능을 포함합니다. 스탭정보에는 연결정보,SQL문, 에러가 포함되어있습니다.

HTTP Call 스텝

수집방식: START-END외부 http서비스 호출에 대한 성능을 포함합니다. 스텝 정보에는 url, host, port, 응답시간, 에러가 포함됩니다.

Message 스텝

수집방식: ADD메세지 스텝을 프로파일을 수집하는 과정에서 비정형적인 모든 구간에 대한 이력을 수집할때 사용됩니다. file오픈 등등 혹은 사용자도 임의의위치를 지정하는데 사용 할 수있습니다.

SOCKET 스탭

수집방식: ADDSocket 오픈을 표현하는 스텝입니다.

METHOD 스탭

수집방식: START-END메소드 응답시간을 추적합니다.

ACTIVE STATCK 스탭

수집방식: ADD액티브 스탭에 대한 정보를 포함합니다. 별도 쓰레드가 생성하여 프로파일에 추가하는 방식으로 수집합니다

5.1.3. 트랜잭션 스탭 수집 방식자바에이전트는 선형 수집 방식과 환형 수집방식을 제공합니다.

선형 수집

개별 트랜잭션 프로파일은 무한정 스텝을 수집할 수 없습니다. 트랜잭션 별로 길이가 제한된 버퍼에 프로파일 스텝을 저장합니다. 각 트랜잭션은최대로 수집할 수있는 스텝의 수가 옵션으로 지정되어 있습니다.

profile_step_max_count

default: 1024최대로 수집가능한 스텝수

5.1. 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 24

profile_step_normal_count

default: 800일반적으로 아무런 제약없이 수집되는 스텝수

profile_step_heavy_count

default : 1000normal count를 초과한 경우에 스텝은 응답시간이 느린 스텝과 액티브 스택 스텝만 수집합니다.

profile_step_heavy_time

default:100heavy count이내에서의 수집되는 스텝의 기준 시간은 profile_step_heavy_time입니다.

Figure 12. Profile Step Buffer

수집되는 프로파일의 스텝 수가 heavy count를 초과하는 경우에는 액티브 스택만이 수집됩니. 단 이경우에도 최대 스텝 수는profile_step_max_count를 넘을 수 없습니다.

환형 수집

선형 수집은 프로파일에서 앞부분을 수집하고 버퍼사이즈를 넘으면 나중 내용을 버리지만 반대로 환형 수집은 앞부분의 스텝을 버리는 방식입니다.

circular_profile_enabled=true

Figure 13. Profile Step Circular Buffer

버퍼 사이즈는 profile_step_max_count에 설정합니다.

profile_step_max_count=1024

5.1. 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 25

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기본적으로 액티브 스택은 트랜잭션이 수행되고 있는 쓰레드의 스택을 말합니다. 하지만 일부 백그라운드 쓰레드에 대해서도 스택을 분석할 필요가

5.2. Active Stack

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 26

있을 수있습니다. 이때 옵션을 통해서 백그라운드 쓰레드에 대한 액티브 스택을 확보할 수있습니다.

async_stack_enabled=false

async_stack_enabled를 true로 설정하면 활성화됩니다.

active_stack_second=10

스택 덤프 간격은 포그라운드 액티브 스택 설정에 따라갑니다.

async_thread_match=http*,abc*

대상 쓰레드 이름을 지정할때는 '*' 사용하여 문자열 패턴을 지정합니다.

쓰레드 이름으로 스택 덤프 대상을 식별합니다. ","를 사용하여 match를 여러개를 지정할 수 있습니다.

async_thread_parking_class=sun.misc.Unsafeasync_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

5.3. 통계(리스트 데이터)

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 27

malloc_sum은 trace_malloc_enabled=true로 변경해야 수집됩니다.(default: false)

5.3.2. SQL 수행 통계5분동안의 SQL 수행 통계를 수집합니다. 5분동안 서로다른 SQL문장이 최대 5000까지만 허용이 됩니다. 만약 하나의 node.js 프로세스에서 한계를넘는 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

5.3. 통계(리스트 데이터)

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 28

칼럼 설명 타입

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간의 연관 통계를 수집할수있다. 이 데이터를 수집하기 위해서는 다음의 옵션을 먼저 설정해야한다.

whatap.conf

mtrace_rate=100mtrace_spec=v1stat_mtrace_enabled=true

Figure 14. MSA 시스템

위와 같은 아키텍처에서 caller&callee통계는 api1와 api2에서만 조회할 수있습니다. 사용자 브라우저에서 호출되는 시스템에서는 Caller통계를조회할 수 없습니다.

하지만 Caller쪽 서버에서 데이터를 전송해야하기 때문에 모든 서버에 적절한설정이 들어가야 합니다.

whatap.conf of [front]

mtrace_rate=100mtrace_spec=v1stat_mtrace_enabled=true

5.3. 통계(리스트 데이터)

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 29

whatap.conf of [api1] & [api2]

mtrace_spec=v1stat_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.3.8. 트랜잭션 도메인 통계와탭에이전트는 도메인별 트랜잭션 통계를 수집할 수 있습니다. 하나의 서버에 비즈니스적인 이유등으로 여러개의 도메인을 분리하여 서비스 하는시스템에서는 도메인 별 분석이 필요할 수있습니다. 그래서 front서버에서 유효하다

whatap.conf

stat_domain_enabled=true

수집되는 데이터는 도메인별 URL의 처리 현황을 파악할 수있습니다

칼럼 설명 타입

domain 서비스 도메인 hash u4

url 트랜잭션 URL hash u4

count 수행 건수 u4

error 에러건수 u4

time 응답시간의 합 u8

5.3.9. 트랜잭션 REFERER 통계와탭에이전트는 Referer별 트랜잭션 통계를 수집할 수 있습니다. 업무에 따라서는 Referer별 분석이 필요할 수있습니다.

whatap.conf

stat_domain_enabled=true

수집되는 데이터는 도메인별 URL의 처리 현황을 파악할 수있습니다

칼럼 설명 타입

referer Referer hash u4

5.3. 통계(리스트 데이터)

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 30

칼럼 설명 타입

url 트랜잭션 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를 저장 합니다.

whatap.conf

trace_user_using_ip=false

Header Key

http header에 전달되는 값으로 사용자를 구분할 수있습니다. .whatap.conf

user_header_ticket=USER

사용자 카운팅

사용자를 카운팅하는 방법에 따라서 다른 목적으로 사용될 수있다. 동시 사용자는 현재 시스템을 사용하는 사용자의 수를 알기 위해서 측정하고 일일액티브 사용자는 하룻동안 해당 서비스에 관심을 갖는 사용자가 몇명인지에 대한 비즈니스적인 관리를 위해 측정합니다.

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 31

실시간 사용자

최근 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가지 상태로 고정되어있습니다.

1. METHOD - 일반 함수를 호출하는 상태

2. SQL - db sql을 수행중인 상태

3. HTTPC - 외부 Http Api(서비스)를 호출중인 상태

4. DBC - DB연결을 요청한 상태, 일반적으로 Pool에서 가져옴

5. SOCKET - TCP세션을 Connecting 중인 상태

SQL

SQL 수행 현황을 카운팅합니다.

• 건수

• 응답시간

• 에러 건수

• 패치 건수

HTTP Call

외부 Http 호출에 대한 현황을 카운팅 합니다.

• 건수

• 응답시간

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 32

• 에러 건수

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를 사용할 수있도록 제공하고있습니다.

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 33

아래는 개별 옵션별 디폴트 값과 연관되어 ByteCode Injection되는 클래스입니다.

hikari_pool_enabled=false

com.zaxxer.hikari.pool.HikariPool

dbcp_pool_enabled=true

org.apache.commons.dbcp.BasicDataSourceorg.apache.commons.dbcp2.BasicDataSourceorg.apache.tomcat.dbcp.dbcp.BasicDataSourceorg.apache.tomcat.dbcp.dbcp2.BasicDataSource

tomcat_pool_enabled=true

org.apache.tomcat.jdbc.pool.ConnectionPool

weblogic_pool_enabled=true

weblogic.jdbc.common.internal.ConnectionPool

jeus_pool_enabled=true

jeus.jdbc.connectionpool.ConnectionPoolImpl

jboss_pool_enabled=true

org.jboss.jca.core.connectionmanager.pool.PoolStatisticsImpl

옵션을 변경한다면 BCI관련 옵션이기 때문에 재기동해야합니다. 클래스가 instrument된 후에도 추적 테이블에 등록되는 과정이필요합니다. 따라서 실행중에 redefine을 해도 동작하지 않습니다.

관련 옵션 자동 결정

dbcp_pool_enabled==true 이면 tomcat_ds_enabled=falseweblogic_pool_enabled== true 이면 weblogic_ds_enabled=false

DataSource 의 현황은 JMX로 가져오려면 먼저 "옵션 자동 결정" 내용을 확인하고 관련된 pool쪽 옵션을 false로 선언하고 DataSource관련 옵션을true로 변경해야 합니다. .DataSource관련 옵션

tomcat_ds_enabled=falseweblogic_ds_enabled=false

기본값은 false입니다.

ThreadPool 카운터

ThreadPool 카운터는 JMX Mbean 정보를 통해 수집됩니다.Tomcat 과 같이 사용 사례가 많은 경우라면 문제 없지만 특정 환경 에서는 이 지표가 수집되지 않을 수 있으며 수집을 위해서는 추가 설정을 필요로합니다.

관련 설정은 다음과 같으며 진행이 어려운 경우 [email protected] 로 문의 주실 수 있습니다.

whatap.conf

jmx_threadpool_objectname=Catalina:type=ThreadPool,name="http-bio-8080" ①jmx_threadpool_atter_activecount=connectionCount ②jmx_threadpool_atter_queuesize=maxThreads ③

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 34

① jmx_threadpool_objectname : JMX ThreadPool MBean 이름을 설정 합니다.

② jmx_threadpool_atter_activecount : activecount 수치를 나타내는 attribute 를 설정 합니다.

③ jmx_threadpool_atter_queuesize : maxThreads 수치를 나타내는 attribute 를 설정 합니다.

JMX ThreadPool ObjectName 및 AttributeName 과 같은 Mbean 명은 JMX 모니터링 도구를 통해 확인하거나 각 WAS 별 Mbean 문서를 참고합니다.

Jconsole 사용시

Figure 15. ObjectName : Catalina:type=ThreadPool,name="http-bio-8080"

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 35

Figure 16. ActiveName : connectionCount, QueueName : maxThreads

관련 문서 참고시

사용 중인 WAS, 프레임워크 관련 문서를 참고해 Mbean 정보를 확인 할 수도 있습니다.

• 예) Websphere Liberty

결과 확인

설정이 정상적으로 되었다면 카운터에서 데이터를 조회 할 수 있습니다.

Figure 17. 정상 상태

5.4. 성능 카운터

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 36

Chapter 6. 에이전트 제어와 상태 조회각 Java 프로세스 별로 에이전트 동작을 제어하거나 상태를 조회할 수 있습니다.

6.1. 부트 환경에이전트가 시작하면 주요환경 정보를 모아 서버로 전송합니다. 이정보는 기동시의 에이전트 환경 상태를 확인할때 사용될 수있습니다. Yard서버에 저장해 두기 때문에 에이전트가 종료되어도 조회할 수있습니다.

와탭 버전, OS정보, java버전, uptime등등의 정보들을 조회할 수 있습니다.

6.2. 환경 변수에이전트에서는 현재의 환경 변수를 조회할 수있습니다. 화면에서 요청을 받았을때 조회됩니다. 따라서 프로세스가 정지된 상태에서는 조회할 수없습니다.

6.3. 컴포넌트 버전현재 로딩되어 사용되고 있는 jar 파일과 그 버전을 조회할 수있습니다.

6.4. 쓰레드 목록/덤프JVM내에서 실행되고 있는 쓰레드 목록과 개별쓰레드의 상세 스택을 확인 할 수있습니다. 또한 전체 쓰레드를 덤프할 수도 있습니다.

6.5. 힙 히스토그램JVM메모리에 올라가 있는 객체 목록들을 조회합니다.

JDK5이하 버전에서는 동작하지 않습니다.

6.6. 로드된 클래스메모리에 로딩된 클래스 목록을 조회합니다. 그리고 특정 클래스의 signuture를 확인 할수있고 redefine을 요청할 수있습니다.

Class Redefine은 BCI를 위해 사용되는 기술입니다. 이미 로딩된 클래스를 재정의 하여 모니터링 코드를 삽입합니다.

6.7. 오픈 소켓와탭은 Socket이 열릴때마다 타겟 주소를 목록을 메모리에 기록해둡니다. 그정보를 조회합니다.

6.8. 메소드 성능 상태메소드 호출 빈도를 추적하고 싶을때 사용할 수있습니다. 아래 옵션에 지정된 클래스메소드들의 호출을 추적합니다.

6.1. 부트 환경

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 37

hook_method_stat_supershook_method_stat_interfaceshook_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

6.9. DB 상태

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 38

등록된 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.12. 시스템 GC/힙덤프

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 39

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 이상 시간이 경과되어야 다시 동작 합니다.

6.14.2. 쓰레드 CPU 덤프동작중인 쓰레드중에서 CPU를 많이 사용하고 있는 쓰레드를 찾고자 할때 사용합니다. 프로세스의 CPU가 높을때 CPU를 많이 사용하는 로직을찾아야 하는데 배치잡이나 쓰레드의 수행시간이 짧으면 찾기 어려운 문제가 있습니다. 이때 쓰레드 CPU덤프를 활용할 수 있습니다.

6.14. 에이전트 덤프

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 40

6.14. 에이전트 덤프

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 41

Chapter 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. 설정 추가/변경설정의 추가 / 변경은 서버 메뉴의 설정 탭에서 사용 가능 합니다.

Figure 18. 서버 메뉴

또는, 설정파일을 대상 서버에서 직접 편집해 사용 할 수 있습니다.

편집

$ vi /whatap/whatap.conf

상황에 따라 기동 스크립트에 JVM -D 옵션을 통해 적용 할 수도 있습니다.

JVM 옵션

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에이전트 이름을 패턴으로 정의 합니다.

7.1. 설정 관리

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 42

whatap.oname

Default : NONEType : String에이전트 이름을 문자열로 정의 합니다.

whatap.okind

Default : NONEType : String에이전트가 속한 그룹 단위를 정의 합니다.

whatap.onode

Default : NONEType : String에이전트가 속한 노드 단위를 정의 합니다.

auto_oname_enabled

Default : falseType : Boolean서버에 등록될 에이전트 이름(oname)을 서버로부터 자동 부여 받는 기능을 활성화 합니다. 적용 시, -Dwhatap.name, -Dwhatap.oname 옵션은무시됩니다. 수집 서버와의 통신을 통해 oname 을 부여 받은 이후, 에이전트의 일반적인 동작을 개시합니다.

auto_oname_prefix

Default : agentType : String에이전트 이름을 서버로부터 자동 부여할 때 에이전트 이름의 prefix, 보통 업무 명을 사용합니다. prefix 일련번호 1~) 부여됩니다.

auto_oname_reset

Default : 0Type : Int서버로 부터 새로운 에이전트 이름을 부여받기 위해서 수정합니다. 에이전트 이름을 자동 부여하면 what.oname 이라는 시스템 환경 변수에셋트됩니다. 한번 셋트되면 자바 인스턴스가 재기동 될 때까지 유지 되는데 리셋을 원할 때 auto_oname_reset 값을 수정합니다.(현재 설정 값과다른 값으로 변경하면 적용됩니다.)

7.3. 에이전트 기능제어shutdown

Default : falseType : Booleantrue 인 경우 에이전트의 모든 동작을 중지하고 서버와의 연결을 종료합니다.

enabled

Default : trueType : Boolean전체 기능을 활성화 합니다. false인 경우에도 서버와 최소한의 통신을 유지하기 위한 정보는 전송됩니다.

transaction_enabled

Default : trueType : Boolean (enabled=false 인 경우 false)트랜잭션 추적 기능을 활성화 합니다. Hitmap에 기록되는 트랜잭션 정보가 해당합니다.

counter_enabled

7.3. 에이전트 기능제어

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 43

Default : trueType : Boolean (enabled=false 인 경우 false)성능 카운터 추적 기능을 활성화합니다. 액티브트랜잭션 수, 사용자 수, JVM 자원 사용량, Process CPU 사용량 및 DB Pool 사용량 정보등이해당됩니다.

stat_enabled

Default : trueType : Boolean (enabled=false 인 경우 false)통계정보 추적 기능을 활성화합니다. 5 분단위로 수집되는 트랜잭션, SQL, HTTPCALL, UserAgent, Client IP 등의 통계 데이터등이 해당됩니다.

sigar_enabled

Default : trueType : Boolean (enabled=false 인 경우 false)sigar library 를 통한 OS 정보 수집을 활성화합니다. 5 초 단위로 sigar library를 통해 수집되는 CPU, Memory, Disk등의 OS 자원 데이터가해당됩니다.

active_stack_enabled

Default : trueType : Boolean (enabled=false 또는 counter_enabled=false 인 경우 false)액티브 스택 추적을 활성화합니다. 스텍 메뉴의 탑스택, 유니크스택 그리고 액티브스택이 해당됩니다.

license

Default : NONEType : String에이전트 설치시 서버로부터 부여받은 라이센스를 지정합니다. 라이센스에는 에이전트가 속한 프로젝트와 보안 통신을 위한 암호키를 포함하고있습니다.

cypher_level

Default : 128Type : aes_bit [128|256]AES 보안 알고리즘에 대한 암호 레벨을 지정합니다.

encrypt_level

Default : 2Type : encrypt_level [1|2|3]와탭 에이전트는 서버로 데이터 전송시 데이터 속성에 따라 선택적으로 암호화를 하므로 높은 보안을 유지하면서도 성능상 이점을 가지고 있습니다.이와 별개로 데이터 유형에 상관없이 일괄적인 암호화 정책을 적용하려는 경우 당 옵션을 사용할 수 있습니다.

1 - 암호화 전송 기능 사용안함2 - SQL파라미터, Plain Text와 같은 민감한 속성에 대하여 암호화 전송3 - 모든 항목에 대하여 암호화 전송

stat_ip_enabled

Default : trueType : Boolean"통계 | 클라이언트IP" 항목의 IP 통계 사용 여부를 활성화합니다.

realtime_user_enabled

Default : trueType : Boolean"대시보드" 사용자 항목에서 사용되는 실시간 사용자 지표 수집 여부를 선택한다.

7.3. 에이전트 기능제어

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 44

hook_direct_patch_classes

Default : NONEType : ClassFile_FullPath직접적으로 특정 클래스를 로딩타임에 바꿔치기 하고자 할 때 사용합니다. 클래스를 컴파일한 후에 별도 파일로 만들고 그 파일의 풀패스를지정합니다.

active_stack_second

Default : 10Type : Seconds액티브 스택을 추적하는 간격을 지정합니다.

값을 바꾸는 것을 권장하지 않습니다.

boot_redefine_size

Default : 100Type : IntAttach 방식이나 Watcher 방식으로 설치했을 때 이미 로딩된 클래스 중에 추적을 위해 BCI 를 새로 수행하게 됩니다. 이때 동시 redefine 하는클래스 수를 정의합니다.

trace_component_enabled

Default : trueType : Boolean서버 | 더보기 | 컴포넌트 버전 기능을 활성화 합니다.

realtime_user_thinktime_max

Default : 300000Type : MiliSeconds실시간 사용자 측정시 동일 사용자로 인정되는 최대 호출간격을 지정합니다.

time_sync_interval_ms

Default : 300000Type : MiliSeconds에이전트와 서버간 시간 동기화 주기를 지정합니다. 동기화 하지 않을 경우 0으로 지정합니다.

detect_deadlock_enabled

Default : falseType : BooleanJava 쓰레드의 DeadLock 여부를 체크하여 감지시 이벤트를 발생시킵니다. 발생 주기는 5초 단위이며 같은 DeadLock 건에 대한 이벤트는 한시간에한번만 발생시킵니다.

text_reset

Default : 0Type : Int와탭 에이전트는 한번 보낸 텍스트유형 데이터는 hash 처리되므로 다음날까지 재전송하지 않습니다. 이전 설정값과 다른 값을 설정하는 경우 재전송합니다.

트랜잭션 URL, SQL String 등이 텍스트유형 데이터에 해당합니다.

7.4. 에이전트 통신

7.4. 에이전트 통신

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 45

whatap_server_host

Default : 127.0.0.1,127.0.0.1Type : ip_address에이전트가 수집한 데이터를 전송할 서버를 지정합니다. 수집서버 이중화로 2개 이상의 IP를 가진 경우 콤마(,)로 분리하여 지정할 수 있습니다.지정된 IP 에는 수집서버 proxy 데몬이 리스닝 상태로 서비스 되어야 합니다.

whatap_server_port

Default : 6600Type : tcp_port수집서버 PORT 를 지정합니다. 포트는 하나만 지정할 수 있으므로 whatap_server_host 에 지정된 수집서버들은 동일 PORT 를 사용해야 합니다.

tcp_so_timeout

Default : 60000Type : MiliSecond수집서버와 통신하는 TCP세션의 Socket Timeout 값을 지정합니다.

tcp_connection_timeout

Default : 5000Type : MiliSecond수집서버와 통신하는 TCP세션의 Connection Timeout 값을 지정합니다.

net_send_max_bytes

Default : 5242880Type : Byte수집서버로 데이터를 전송할 때 한번에 전송되는 최대 크기를 지정합니다.

net_send_queue1_size

Default : 256Type : Int프로파일 정보와 액티브스택을 제외한 나머지 데이터 전송에 사용될 Queue의 크기를 지정 합니다. 설정된 크기가 10 이하인 경우 10으로지정됩니다.

net_send_queue2_size

Default : 512Type : Int프로파일 정보와 액티브스택 데이터 전송에 사용될 Queue의 크기를 지정 합니다. 설정된 크기가 10 이하인 경우 10으로 지정됩니다.

7.5. 에이전트 로그 관리log_datasource_lookup_enabled

Default : trueType : BooleanInitialContext Lookup 시 DataSource 인 경우 로그를 기록하는 기능을 활성화 합니다.

log_rotation_enabled

Default : trueType : Boolean에이전트 로그파일을 일자별로 관리하는 기능을 활성화 합니다.

log_keep_days

Default : 7

7.5. 에이전트 로그 관리

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 46

Type : Day로그파일 보관기간을 지정합니다.

7.6. 트랜잭션 프로파일링profile_step_normal_count

Default: 1000Type : Int트랜잭션 프로파일의 최대 스텝 수를 지정합니다.

profile_step_heavy_count

Default: 1020Type : IntHeavy한 스텝의 경우 프로파일 기본 스텝 수를 초과하더라도 정해진 값 만큼은 기록 됩니다.

profile_step_heavy_time

Default: 100Type : MiliSecondHeavy한 스텝의 기준을 지정 합니다. 지정된 값보다 수행시간이 긴 경우 profile_step_normal_count 를 초과하는 경우라도profile_step_heavy_count 이내에서 기록됩니다.

profile_basetime

Default: 500Type : MiliSecond트랜잭션이 설정된 값 이하의 시간내에 종료된 경우 프로파일 정보를 수집하지 않습니다. 단, 5 분단위로 최초 호출된 URL, 에러가 발생한트랜잭션에 대한 프로파일 정보는 수집됩니다.

active_stack_count

Default : 100Type : Int트랜잭션 내에서 수집하는 AtiveStack 의 최대 수를 지정합니다.

profile_method_resource_enabled

Default : falseType : Boolean프로파일에서 method 스텝이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다.

profile_position_method

Default : NONEType : String지정한 메소드가 수행되는 시점의 StackTrace를 기록합니다.

profile_position_depth

Default : 50Type : Intposition 추적을 위해 StackTrace를 기록 할 때 최대 라인 수를 지정합니다.

trace_error_callstack_depth

Default: 50Type : IntError발생시 수집하는 StackTrace의 최대 라인 수를 지정합니다.

7.6. 트랜잭션 프로파일링

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 47

trace_active_callstack_depth

Default: 50Type : Int액티브스택에서 수집하는 StackTrace의 최대 라인수를 지정합니다

trace_active_transaction_yellow_time

Default: 3000Type : MiliSecond액티브 트랜잭션의 아크이퀄라이저에서 노란색으로 표현할 기준을 지정 합니다.

trace_active_transaction_red_time

Default: 8000Type : MiliSecond액티브 트랜잭션의 아크이퀄라이저에서 빨간색으로 표현할 기준을 지정 합니다.

hook_method_patterns

Default : NONEType : String응답시간을 측정할 메소드를 지정합니다. 마지막 (.)을 구분자로 클래스 FullName과 메소드로 구분되며 (*)로 WildCard를 사용 할 수 있습니다.대상이 여러개인 경우 콤마(,)로 구분합니다

• Ex : hook_method_patterns=a.b.C1.*

hook_method_supers

Default : NONEType : String특정 클래스를 상속받은 메소드의 응답시간을 측정하고자 할 때 Super Class를 지정합니다. 클래스 FullName을 지정하며 대상이 여러개인 경우콤마(,)로 구분합니다.

• Ex : hook_method_supers=a.b.C1

hook_method_interfaces

Default : NONEType : String특정 인터페이스를 구현한 메소드의 응답시간을 측정하고자 할 때 Interface를 지정합니다. 인터페이스 FullName을 지정하며 대상이 여러개인 경우콤마(,)로 구분합니다.

hook_method_ignore_classes

Default : NONEType : String메소드 프로파일을 설정할 때 프로파일에서 제외 하고 싶은 클래스들을 지정합니다.

hook_method_access_public_enabled

Default : trueType : Boolean메소드 프로파일을 설정할 때 public 메소드에 대해서만 별도로 대상으로 할지를 결정합니다.

hook_method_access_private_enabled

Default : falseType : Boolean메소드 프로파일을 설정할 때 private 메소드에 대해서만 별도로 대상으로 할지를 결정합니다.

7.6. 트랜잭션 프로파일링

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 48

hook_method_access_protected_enabled

Default : trueType : Boolean메소드 프로파일을 설정할 때 protected 메소드에 대해서만 별도로 대상으로할지를 결정합니다.

hook_method_access_none_enabled

Default : trueType : Boolean메소드 프로파일을 설정할 때 no access indicated 메소드에 대해서만 별도로 대상으로 할지를 결정합니다.

stacklog_socket_port

Default : 0Type : TCP_PortNumber목적지의 TCP포트를 지정하면 Socket.connect() 시점 StackTrace를 에이전트 로그로 기록합니다. 기본설정으로 확인되지 않는 DB 연결, HTTPC연결등을 추적할 때 사용할 수 있습니다.

설정된 목적지로 연결시마다 매번 StackTrace를 기록하므로 성능저하를 유발할 수 있습니다. 디버깅 용도로 선별된 에이전트에한시적으로만 사용해야 합니다. * Ex : stacklog_socket_port=1521 #DB연결 상태 추적

biz_exceptions

Default : NONEType : String비즈니스 Exception을 등록합니다. 여기에 등록되면 에러통계에서 제외됩니다. 프로파일 상세에서는 나타납니다.

ignore_exceptions

Default : NONEType : String무시할 Exception을 등록합니다. 여기에 등록되면 에러 자체가 무시됩니다.

transaction_status_error_enable

Default : trueType : BooleanHTTP 401, 403과 같이 정상 응답이 아닌 HTTP상태 코드를 반환하는 경우 에러로 처리 합니다.

7.7. HTTP 트랜잭션 추적profile_http_header_enabled

Default : falseType : Boolean프로파일 내역에 http 헤더 정보를 기록하고자 할 때 사용합니다.

profile_http_header_url_prefix

Default : /Type : String프로파일 내역에 http 헤더 정보를 기록할 대상 URL의 prefix를 정의 할 때 사용합니다.

profile_http_parameter_enabled

Default : falseType : Boolean프로파일 내역에 http 파라미터 정보를 기록하고자 할 때 사용합니다. 파라미터는 별도 보안키를 입력해야 조회 할 수 있습니다.

7.7. HTTP 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 49

보안 키는 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 : NONEType : String트랜잭션의 이름 끝부분에 지정한 http header key에서 추출한 값을 추가합니다.

trace_transaction_name_key

Default : NONEType : String트랜잭션의 이름 끝부분에 지정한 http request parameter 에서 추출한 값을 추가합니다.

trace_normalize_enabled

Default : trueType : Boolean트랜잭션 URL 을 파싱하여 정규화하는 기능을 활성화합니다.

false 로 변경시 패스파라미터 파싱이 비활성화됩니다. 이 경우 통계데이터의 의미가 약화됨으로 디버그 용도로만 잠시 사용하는것이 좋습니다.

trace_auto_normalize_enabled

Default : trueType : Boolean트랜잭션 URL 정규화할때 패턴값을 어노테이션에서 추출하여 자동으로 파싱하는 기능을 활성화합니다.

trace_normalize_urls

Default : NONEType : 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, icoType : String스태틱 컨텐츠임을 판단하는 확장자를 지정합니다. 여기에 설정된 확장자를 가진 트랜잭션들은 프로파일 추적과 카운팅이 제외됩니다.

recursive_max

Default : 1000000Type : Int트랜잭션의 재귀호출 여부 검출을 위한 옵션으로, 단일 트랜잭션으로 부터 파생되는 재귀호출 횟수를 카운트하여 이벤트 알림을 발행하기 위한기준을 지정합니다.

7.7. HTTP 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 50

HTTP URL 재귀호출을 대상으로 함jsp:forward 를 통해 재호출 되는 케이스도 카운트에 포함됨

hook_httpservlet_classes

Default : NONEType : StringHTTP 트랜잭션의 END POINT 를 추가로 지정한다. 메소드의 첫번째 2 개의 파라미터는 HttpServletRequest 와 HttpServletResponse 만 지정가능합니다.

hook_jsp_patterns

Default : org.apache.jasper.servlet.JspServlet.serviceJspFileType : StringJSP 파일을 로딩하는 메소드를 지정합니다. 트랜잭션 호출 결과로 반환되는 JSP 정보를 프로파일에 표시합니다. 본 옵션을 통해 추가한 설정에default 설정이 자동으로 추가됩니다.

trace_ignore_url_set

Default : NONEType : String트랜잭션 추적에서 제외할 URL을 지정한다.

trace_ignore_url_prefix

Default : NONEType : String트랜잭션 추적에서 제외할 URL prefix를 지정한다.

7.8. NON-Http 트랜잭션 추적trace_auto_transaction_enabled

Default : falseType : Boolean프로파일 대상 메소드가 트랜잭션 시작점(Javax.http.httpservlet, hook_service_*) 내에서 수행되는 경우가 아니라면 수집이 되지 않습니다. 이경우 프로파일 대상 메소드가 트랜잭션 시작점이 되도록 지정합니다.

주로 개발환경에서 백그라운드 트랜잭션의 END POINT 를 찾아낼 때 사용합니다.

trace_auto_transaction_backstack_enabled

Default : trueType : Booleantrace_auto_transaction_enabled=true 이 설정된 경우에 트랜잭션 시작시 StackTrace를 기록합니다. 이를 통해 트랜잭션의 시작점을 찾아낼 수있습니다.

trace_background_socket_enabled

Default : trueType : Boolean트랜잭션이 아닌 백그라운드 쓰레드에 의한 소켓이 오픈될 때도 이를 기록합니다.

async_stack_enabled

Default : falseType : Boolean백그라운드 쓰레드에 대한 Active Stack 기능 사용 여부를 선택합니다.

7.8. NON-Http 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 51

async_thread_match

Default : NONEType : String액티브 스택을 덤프할 백그라운드 쓰레드 이름을 지정한다. ","로여러개를 지정할 수있습니다. 이름을 지정할때는 "Thread-" 처럼 ""를 사용해서비교 패턴을 사용할 수 있습니다.

async_thread_parking_class

Default : sun.misc.UnsafeType : String스택의 Top메소드가 async_thread_parking에 등록된 클래스/메소드일때 쓰레드가 파킹상태에 있다고 판단하고 덤프를 생성하지 않습니다.

hook_service_patterns

Default : NONEType : StringNON-Http 트랜잭션 추적을 위한 시작점 패턴을 설정한다.

hook_serivce_ignore_methods

Default : NONEType : Stringhook_service_patterns 에서 설정된 내역 중 시작점으로 불필요한 메소드를 추가 할 수 있다.

hook_service_supers

Default : NONEType : StringNON-Http 트랜잭션 추적을 위한 시작점의 공통 분모가 특정 클래스의 메소드를 상속받은 경우라면 이를 설정한다.

hook_service_interfaces

Default : NONEType : StringNON-Http 트랜잭션 추적을 위한 시작점의 공통 분모가 특정 인터페이스를 구현한 경우라면 이를 설정한다.

hook_service_access_public_enabled

Default : trueType : BooleanNon Http Demon 프로세스의 트랜잭션을 지정할 때 public 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다

hook_service_access_private_enabled

Default : trueType : BooleanNon Http Demon 프로세스의 트랜잭션을 지정할 때 private 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다

hook_service_access_protected_enabled

Default : trueType : BooleanNon Http Demon 프로세스의 트랜잭션을 지정할 때 protected 메소드에 대해서만 Access 권한을 기준으로 on/off 를 지정합니다

service_name_mode

Default : fullType : String트랜잭션 명을 지정하기 위해 full,class,method,string,arg 5가지 옵션을 사용할 수있습니다.

7.8. NON-Http 트랜잭션 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 52

full : Full Class이름 사용class : Class 이름 서비스 명으로 사용method : Method이름을 서비스 명으로 사용string : 문자열중에서 첫번째 파라미터를 서비스 명으로 사용arg : 파라미터중에서 service_name_index옵션에 지정한 인덱스이 파라미터를 서비스 명으로 사용

7.9. 트랜잭션 연계 추적mtrace_enabled

Default : falseType : Boolean트랜잰션 연계 추적 기능(MTID)을 사용 여부를 설정합니다. MTID 를 추적하면 등록된 모든 애플리케이션간의 호출을 확인 할 수 있습니다.

mtrace_rate

Default : 10Type : Percentage최초 트랜잭션이 발생할 때 발급받는 MTID(Multi Transaction ID)의 발급비율을 설정하는 옵션입니다.

mtrace_caller_key

Default : x-wtap-mstType : StringMTID 추적에 사용할 Caller Key Name을 정합니다.

mtrace_callee_key

Default : x-wtap-txType : StringMTID 추적에 사용할 Callee Key Name을 정합니다.

mtrace_send_url_length

Default : 80Type : IntHttp Caller는 Callee에게 자신의 URL을 넘져줍니다. 이때 URL길이를 제한하고 있습니다. 이 길이를 지정합니다.

mtrace_callee_id_send_enabled

Default : falseType : BooleanMTID 추적시 HTTPC 호출과 함께 발행된 Callee ID를 프로파일에 표현합니다.

mtrace_callee_id_recv_enabled

Default : falseType : BooleanMTID 추적시 수신한 Callee ID를 프로파일에 표현합니다.

mtrace_alltx_enabled

Default : falseType : Booleanlog4j와 같은 로깅 시스템과 연계하기 위해서 모든 트랜잭션의 mtid를 추적할수있습니다.

mtrace_basetime

Default : 100Type : Milisecondsmtrace_alltx_enabled=true하면 너무 많은 로그가 남을 수있습니다. 이때는 프로파일 로깅량을 줄일 필요가 있습니다.

7.9. 트랜잭션 연계 추적

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 53

stat_mtrace_enabled

Default : falseType : BooleanCaller와 Callee의 상관 관계 통계를 수집합니다.Caller에 적용하면 Caller의 상세 정보를 보내주고 Callee에 적용되면 url단위 Caller-Callee 호출통계를 수집서버로 전송합니다.

7.10. DB, SQLdbcp_pool_enabled

Default : trueType : BooleanJMX를 사용하지 않고 DBCP의 DB Connection 정보를 추적하기 위해 사용됩니다.

hikari_pool_enabled

Default : falseType : BooleanJMX를 사용하지 않고 hikari pool의 DB Connection 정보를 추적하기 위해 사용됩니다.

tomcat_ds_enabled

Default : falseType : BooleanJMX를 사용하여 Tomcat DB Connection Pool 정보를 추적하는 기능을 활성화 합니다.

tomcat_pool_enabled

Default : trueType : BooleanJMX를 사용하지 않고 Tomcat DB Connection Pool 정보를 추적하는 기능을 활성화 합니다.

weblogic_ds_enabled

Default : falseType : BooleanJMX를 사용하여 Weblogic DB Connection Pool 정보를 추적하는 기능을 활성화 합니다.

weblogic_pool_enabled

Default : trueType : BooleanJMX를 사용하지 않고 Weblogic DB Connection Pool 정보를 추적하는 기능을 활성화 합니다.

jeus_pool_enabled

Default : trueType : BooleanJMX를 사용하지 않고 JEUS DB Connection Pool 정보를 추적하는 기능을 활성화 합니다.

profile_connection_open_enabled

Default : trueType : Boolean프로파일 내역에 DBConnection 오픈 정보를 기록합니다.

profile_dbc_close

Default : falseType : Boolean (profile_connection_open_enabled=true 에서만 동작)

7.10. DB, SQL

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 54

프로파일 내역에 DBConnection 클로즈 정보를 기록합니다.

profile_sql_param_enabled

Default : falseType : Boolean프로파일 내역에 SQL 파라미터 정보를 기록하고자 할 때 사용합니다. 파라미터는 별도 보안키를 입력해야 조회 할 수 있습니다.

보안 키는 WAS서버 ${WHATAP_AGENT_HOME}/paramkey.txt 파일내에 6자리로 지정합니다.paramkey.txt 파일이 존재하지 않는 경우 랜덤 값으로 자동 생성됩니다.

profile_sql_resource_enabled

Default : falseType : Boolean프로파일에서 SQL 이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다.

profile_update_count

Default : falseType : BooleanexcuteUpdate() 메소드를 통해 SQL UPDATE문이 수행된 경우 UPDATE 건수를 수집합니다.

custom_pool_classes

Default : NONEType : Stringpre-define되지 않는 별도의 Connection Pool을 사용하는 경우 해당 클래스 명을 지정한다.

ds_update_interval

Default : 5000Type : MiliSecondsDB Connection 정보 Count 주기를 설정한다.

profile_position_sql

Default : falseType : BooleanSQL이 수행되는 시점의 StackTrace를 기록한다.

trace_dbc_leak_enabled

Default : falseType : BooleanDBConnection Leak 을 추적하는 기능을 활성화합니다.

Connection Wrapper를 사용해 Leak을 추적하기에 운영 서비스에 영향을 미칠 수 있으므로 반드시 테스트후 적용해야 합니다.

trace_dbc_leak_fullstack_enabled

Default : falseType : BooleanDBConnection Leak이 감지되는 경우 해당 시점 StackTrace를 수집합니다.

옵션 적용시 CPU 사용량이 다소 증가할 수 있습니다.PeakTime시 적용을 피하고 문제해결 용도로만 한시적으로 적용 할 것을 권고합니다.

trace_sql_normalize_enabled

Default : true

7.10. DB, SQL

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 55

Type : BooleanSQL 문에서 리터럴 부분을 축출하여 SQL 문을 정규화하는 기능을 활성화합니다.

profile_error_jdbc_fetch_max

Default : 10000Type : IntSQL Fetch Count(ResultSet.next() 호출 건 수)가 지정한 값을 초과하면 TOO MANY Fetch 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를하지 않습니다.

profile_error_sql_time_max

Default : 30000Type : MiliSecondSQL 수행시간이 지정한 값을 초과하면 TOO SLOW 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를 하지 않습니다.

hook_connection_open_patterns

Default : NONEType : StringDB Connection Open 시 호출되는 메소드를 등록합니다. 미리 지정되지 않은 Connection Pool 의 getConnection을 등록하는 것이 일반적입니다.

• Ex : hook_connection_open_patterns=mypool.ConPool.getConnection

hook_jdbc_con_classes

Default : NONEType : String미등록 되었던 JDBC Connection 클래스를 지정합니다.

• Ex : hook_jdbc_con_classes=mypool.ConPool

hook_jdbc_pstmt_classes

Default : NONEType : String미등록 되었던 jdbc PreparedStatement 클래스를 지정합니다. 주의할 점은 생성자 파라미터에 SQL 문자열이 전달되는 구조여야 합니다.

• Ex : org.apache.derby.impl.jdbc.EmbedPreparedStatement

hook_jdbc_cstmt_classes

Default : NONEType : String미등록 되었던 jdbc CallableStatement 클래스를 지정합니다.

• Ex : org.apache.derby.impl.jdbc.EmbedCallableStatement

hook_jdbc_stmt_classes

Default : NONEType : String미등록 되었던 JDBC Statement 클래스를 지정합니다.

• Ex : org.apache.derby.impl.jdbc.EmbedStatement

hook_jdbc_rs_classes

Default : NONEType : String미등록되었던 JDBC ResultSet 클래스를 지정합니다.

7.10. DB, SQL

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 56

• Ex : org.apache.derby.impl.jdbc.EmbedResultSet

hook_jdbc_wrapping_driver_patterns

Default : NONEType : StringDB2 드라이버처럼 난독 처리된 JDBC 드라이버는 hook_jdbc_xxx 옵션으로 직접 BCI 가 어렵다. 이런 경우 Wrapper 방식으로 SQL 추적할 수있는데 이때 Driver.connect 를 지정하여 추적하게 됩니다.

debug_dbc_stack_enabled

Default : falseType : BooleanDB Connection 시점의 StackTrace 를 프로파일에 저장합니다. 어플리케이션에서 사용하는 Connection Pool 정보를 얻기위해 사용됩니다.

7.11. HTTPC, API Callprofile_error_httpc_time_max

Default : 10000Type : MiliSecondHTTPC 수행시간이 지정한 값을 초과하면 TOO SLOW 에러로 처리됩니다. 0으로 설정하는 경우 에러 처리를 하지 않습니다.

profile_httpc_resource_enabled

Default : falseType : Boolean프로파일에서 HTTP Call 스텝이 수집될 때 해당 스텝에서 사용한 CPU 와 메모리 사용량을 추적합니다.

profile_position_httpc

Default : falseType : BooleanHTTPC가 수행되는 시점의 StackTrace를 기록합니다.

trace_httpc_normalize_enabled

Default : trueType : Boolean트랜잭션내 HTTPC URL 을 파싱하여 정규화하는 기능을 활성화합니다.

trace_httpc_normalize_urls

Default : NONEType : String정규화 할 HTTPC URL 패턴을 정의 한다. 호출 URL 패턴을 파싱하여 패스파라미터를 제거합니다.

ex) /a/{v}/b 라고 선언하면 a/123/b ⇒ a/{v}/b 로 치환한다여러 개를 등록할 때는 콤마(,)를 사용합니다. 치환패턴 정리 후 보완필요

hook_httpc_patterns

Default : NONEType : StringHTTP Call 을 수행하는 클래스를 지정합니다.

7.11. HTTPC, API Call

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 57

7.12. Plug-inhook_trace_helper_patterns

Default : NONEType : String메소드 실행 및 종료 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다

plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다.$WHATAP_HOME/plugin/TraceHelperStart.x$WHATAP_HOME/plugin/TraceHelperEnd.x

hook_trace_helper_end_patterns

Default : NONEType : String메소드 종료 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다.

plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다.$WHATAP_HOME/plugin/TraceHelperEnd.x

hook_trace_helper_start_patterns

Default : NONEType : String메소드 시작 부분에서 프로파일 플러그인을 삽입할 포인트(클래스 및 메소드명)를 지정합니다.

plugin 을 활용한 커스터마이즈 된 profile 정보 수집을 위한 용도로 하기 plugin 코드가 주입됩니다.$WHATAP_HOME/plugin/TraceHelperStart.x

7.13. 사용자 수trace_user_enabled

Default : trueType : Boolean실시간 사용자 집계 여부를 지정합니다.

사용자 추적 옵션이 중복 설정 된 경우 동작 우선순위1. trace_user_using_ip2. trace_user_using_jsession3. user_header_ticket

trace_user_cookie_limit

Default: 2048Type : Int사용자 집계를 위해 쿠키를 발행하는 경우 기존 쿠키가 너무 많다면 쿠키 오버플로어가 발생 할 수 있습니다. 이를 회피하기 위해 limit 를지정합니다.

trace_user_using_ip

Default : trueType : Boolean실시간 사용자 집계시 IP 를 기반으로 합니다.

7.12. Plug-in

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 58

trace_user_using_jsession

Default : falseType : Boolean실시간 사용자 집계시 SESSIONID 를 기반으로 합니다.

trace_http_client_ip_header_key

Default : NONEType : StringRemote 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 : NONEType : StringHTTP Header 의 특정 값으로 사용자 수를 집계하고자 하는 경우 해당 Key값을 지정합니다.

7.14. 부하량 제어throttle_enabled

Default : falseType : Boolean어플리케이션의 최대 동시 처리 수를 제한하는 쓰로틀링 기능을 활성화합니다. throttle_ 으로 시작하는 모든 옵션은 throttle_enabled=true상태에서만 동작합니다.

쓰로틀링 제어와 관련한 정책은 다음과 같은 우선순위를 가지고 있습니다.1. Block : URL, 사용자IP 기준으로 서비스를 차단하며 가장 우선하여 적용됩니다.2. Passing : Passing에 적용된 URL들은 Reject 정책보다 우선합니다.3. Reject : Block, Passing 정책 이후에 Reject 정책이 적용됩니다.

throttle_limit

Default: 10000Type : Int에이전트별 동시 처리되는 요청(트랜잭션)수가 지정한 값을 넘으면 추가로 도달하는 요청은 reject됩니다.

throttle_rejected_message

Default : too many request!!Type : String쓰로틀링 제한시 사용자에게 전달될 메시지를 정의합니다.

throttle_rejected_forward

Default : NONEType : URL사용자 요청이 limit 값을 넘어 reject 될 때 사용자에게 전달되는 안내 페이지 URL을 정의합니다. throttle_rejected_message와 동시에 설정된경우 throttle_rejected_forward 가 우선적용 됩니다.

7.14. 부하량 제어

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 59

안내페이지가 동일한 컨테이너에서 서비스 되는 경우, 이 역시 동시처리 수에 산정 되므로 제귀호출로 인한 장애요소가 될 수있습니다. 그러므로 안내 페이지는 static html 페이지로 만들거나 외부에 있어야 합니다.

reject_event_enabled

Default : falseType : Boolean사용자 요청이 Reject된 경우 이벤트 알람을 발생할 지를 정의합니다.

reject_event_interval

Default: 30000Type : MiliSecondReject에 대한 이벤트 알람 발생이후 설정된 시간동안 중복된 이벤트에 대하여 알람 발생을 하지 않습니다.

throttle_blocking_url

Default: NONEType : Stringthrottle_limit을 초과하지 않는 경우라도 블럭킹(처리 거부) 할 URL 을 지정합니다. 시스템 장애를 유발하는 URL을 긴급하게 블럭킹 하기 위해사용할 수 있습니다.

throttle_blocking_ip

Default: NONEType : ip_address사용자 IP를 기준으로 블럭킹하고자 할 때 지정합니다. 디도스 공격이나 잘못된 사용자를 IP 기반으로 차단 할 때 사용할 수 있습니다. 여러개인 경우콤마(,)를 사용합니다.

throttle_target_urls

Default: NONEType : URL등록된 URL을 대상으로만 쓰로틀 기능을 적용한다. 여러개인 경우 콤마(,) 로 구분합니다.

throttle_passing_url

Default: NONEType : Stringthrottle_limit을 초과하는 경우라도 처리되어야 할 URL이 있는 경우 지정합니다. 여러개인 경우 콤마(,)를 사용합니다.

throttle_passing_url_prefix

Default: NONEType : Stringthrottle_limit을 초과하는 경우라도 처리되어야 할 URL들을 prefix로 경우 지정합니다. 여러개인 경우 콤마(,)를 사용합니다.

throttle_blocked_message

Default : request blocked!!Type : String요청이 블러킹 된 사용자에게 전달할 메시지를 정의합니다.

throttle_blocked_forward

Default : NONEType : URL요청이 블러킹 된 사용자에게 전달할 URL을 정의합니다. throttle_blocked_message와 동시에 설정된 경우 throttle_blocked_forward 가 우선적용됩니다.

7.14. 부하량 제어

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 60

7.15. 에이전트 알림 설정recursive_event_interval

Default : 300000Type : MiliSeconds트랜잭션의 재귀 호출에 대한 이벤트 알림 발행 간격을 지정합니다.

reject_event_enabled

Default : falseType : Boolean서비스 거절(호출 부하 제한/거절))시 이벤트 알림 발행 여부를 지정합니다.

reject_event_interval

Default : 300000Type : MiliSeconds서비스 거절(호출 부하 제한/거절))시 이벤트 알림 발행 간격을 지정합니다.

httpc_event_enabled

Default : falseType : BooleanHTTPC 연결오류 발생시 이벤트 알림 발행 여부를 지정합니다.

httpc_event_interval

Default : 300000Type : MiliSecondsHTTPC 연결오류 발생시 이벤트 알림 발행 간격을 지정합니다.

heap_event_enabled

Default : falseType : Boolean힙 사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다.

heap_event_percent

Default : 90Type : Percentage힙사용량 이벤트 알림 발행 기준 임계치를 지정합니다.

heap_event_duration

Default : 30000Type : MiliSeconds힙사용량 이벤트 알림 발행 기준 지속시간을 지정합니다.

heap_event_interval

Default : 300000Type : MiliSeconds힙사용량 이벤트 알림 발행 간격을 지정합니다.

heap_event_action

Default : NONEType : String힙사용량 이벤트 발생 시 실행할 동적 로딩 코드 지정

7.15. 에이전트 알림 설정

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 61

($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨)

disk_event_enabled

Default : falseType : Boolean디스크사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다.

disk_event_percent

Default : 90Type : Percentage디스크사용량 이벤트 알림 발행 기준 임계치를 지정합니다.

disk_event_interval

Default : 300000Type : MiliSeconds디스크사용량 이벤트 알림 발행 간격을 지정합니다.

disk_event_action

Default : NONEType : String디스크사용량 이벤트 발생 시 실행할 동적 로딩 코드 지정

($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨)

cpu_event_enabled

Default : falseType : BooleanCPU 사용량 임계 도달 시 이벤트 알림 발행 여부를 지정합니다.

cpu_event_percent

Default : 90Type : PercentageCPU 사용량 이벤트 알림 발행 기준 임계치를 지정합니다.

cpu_event_duration

Default : 30000Type : MiliSecondsCPU 사용량 이벤트 알림 발행 기준 지속시간을 지정합니다.

cpu_event_interval

Default : 300000Type : MiliSecondsCPU 사용량 이벤트 알림 발행 간격을 지정합니다.

cpu_event_action

Default : NONEType : StringCPU 사용량 이벤트 발생 시, 실행할 동적 로딩 코드에 전달할 ID를 지정합니다.

($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨)

7.15. 에이전트 알림 설정

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 62

dbc_dup_event_enabled

Default : falseType : BooleanDB Connection 이 중복 할당 되었을 때 이벤트 알림 발행여부를 지정합니다.

dbc_dup_event_fullstack_enabled

Default : falseType : BooleanDB Connection 이 중복 할당 될때 Stack 확보 여부를 지정합니다.

exception_event_enabled

Default : falseType : BooleanException 발생 시 이벤트 알림 발행 여부를 지정합니다.

exception_event_interval

Default : 60000Type : MiliSecondsException 발생 시 이벤트 알림 발행 간격을 지정합니다.

exception_event_set

Default : NullType : String대상 Exception 을 지정합니다. 여러개 지정할 경우 ','로 구분자를 사용합니다.

exception_event_action

Default : NullType : String이벤트 발생 시 실행할 동적 로딩 코드

($WHATAP_HOME/plugin/ActionScript.x 에 작성한 Java 코드)에 전달할 ID ($id 로 전달됨)

7.16. 성능 카운터 & 통계 확장addin_monitor_num

Default : 0Type : Int성능 카운터 확장을 위해 추가 선언할 클래스 수 addin_monitor_num에 설정한 수만큰 addin_monitor_x를 선언합니다.

addin_monitor_0

Default : 0Type : Int클래스 이름을 지정한다. 이클래스들은 모두 whatap.agent.AddinMonitor의 구현 클래스 입니다.

addin_monitor_x 사용예

addin_monitor_num=2addin_monitor_0=a.a.Class1addin_monitor_1=a.a.Class2

stat_domain_enabled

Default : false

7.16. 성능 카운터 & 통계 확장

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 63

Type : Boolean도메인별 트랜잭션 통계를 수집합니다.

stat_domain_max_count

Default : 7000Type : Int5분동안 한 JVM에서 수집할 도메인별 트랜잭션 통계의 최대 레코드 수입니다.

stat_mtrace_enabled

Default : falseType : Boolean멀티 서버 트랜잭션에서 Callser&Callee간에 버전별 의존성 통계를 수집합니다.

mtrace_spec

Default: v1Type : String현 인스턴스의 애플리케이션 버전을 지정합니다. 임의의 문자열을 지정할 수 있습니다. 이 데이터는 호출통계를 위해 사용됩니다.

stat_mtrace_max_count

Default : 7000Type : Int멀티 서버 트랜잭션에서 Callser&Callee간에 버전별 의존성 통계의 최대 레코드 수입니다.

stat_login_enabled

Default : falseType : Boolean로그인별 트랜잭션 통계를 수집합니다.

stat_login_max_count

Default : 7000Type : Int5분동안 한 JVM에서 수집할 로그인별 트랜잭션 통계의 최대 레코드 수입니다.

stat_referer_enabled

Default : falseType : BooleanReferer별 트랜잭션 통계를 수집합니다.

stat_referer_max_count

Default : 7000Type : Int5분동안 한 JVM에서 수집할 Referer별 트랜잭션 통계의 최대 레코드 수입니다.

stat_tx_max_count

Default : 5000Type : Int트랜잭션 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.

stat_sql_max_count

Default : 5000Type : IntSQL 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.

7.16. 성능 카운터 & 통계 확장

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 64

stat_httpc_max_count

Default : 5000Type : IntHttp Call 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.

stat_error_max_count

Default : 1000Type : IntError 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.

stat_useragent_max_count

Default : 500Type : IntUser Agent 통계 정보의 갯수를 제한합니다. 5분동안 수집되어 서버에 전송되는 통계정보에서 최대 레코드수를 제한합니다.

7.17. 일반 로그 & GC 로그 모니터링watchlog_enabled

Default : falseType : Boolean로그 모니터링을 활성화합니다.

watchlog_check_interval

Default : 2000Type : Int로그를 감시하는 주기입니다. 매 간격으로 로그 파일에 기록이 추가되었는지 확인합니다.

watchlog_read_count

Default : 8Type : Int로그를 읽어들이는 최대 횟수입니다. 한번에 watchlog_buffer_size만큼 읽어드립니다.

watchlog_buffer_size

Default : 131072(128k)Type : Int한번에 읽어들이는 로그 사이즈 입니다.

watchlog.LOGKEY

watchlog.LOGKEY.enabled=falsewatchlog.LOGKEY.file=watchlog.LOGKEY.words=watchlog.LOGKEY.silent=10000watchlog.LOGKEY.check_interval=1000하나의 로그 파일을 감시하기 위한 설정입니다. file을 지정하고 감시한 word를 여러개를 ','이용하여 설정합니다. check_interval간격으로 로그를감시하다가 키워드가 발견되면 경고하는 방식입니다. 한번 경고가 나가면 silent 만큼 경고를 멈춤니다.

gclog_enabled

Default : falseType : BooleanGC 로그 모니터링을 활성화합니다.

7.17. 일반 로그 & GC 로그 모니터링

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 65

gclog_file

Default : NullType : File NameGC 로그 파일경로를 지정합니다.

gclog_check_interval

Default : 2000Type : IntGC 로그를 감시하는 주기입니다. 매 간격으로 로그 파일에 기록이 추가되었는지 확인합니다.

gclog_word

Default : Full GCType : word감시할 키워드를 등록합니다. 기본은 Full GC가 발생하면 정보를 서버에 전송하고 저장합니다.

7.18. 토폴로지 맵tx_caller_meter_enabled

Default : falseType : Boolean토폴로지맵에서 외부 호출정보를 표현합니다. mtrace_enabled=true 인 경우 동작합니다.

sql_dbc_meter_enabled

Default : falseType : Boolean토폴로지맵에서 SQL 호출정보를 표현합니다.

httpc_host_meter_enabled

Default : falseType : Boolean토폴로지맵에서 httpc outbound 정보를 표현합니다.

actx_meter_enabled

Default : falseType : Boolean토폴로지맵에서 액티브 트랜잭션 상태를 표현합니다.

7.18. 토폴로지 맵

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 66

Chapter 8. 부가 정보

8.1. 애플리케이션 서버별 적용 절차애플리케이션 서버 설정 위치

SpringBoot 시작 스크립트

Tomcat $CATALINA_HOME/bin/catalina.sh(bat)

JBoss 5.0 이하 $JBOSS_HOME/bin/run.conf

JBoss 7.0 이상 EAP6.0이상

$JBOSS_HOME/bin/standalone.conf(domain.conf)

WebLogic $WEBLOGIC_HOME/user_projects/domains/사용자도메인/bin/startWebLogic.sh(bat)

WebSphere admin console 접속1. Server > Server Types > WebSphere application servers > 서버 선택2. 서버 Configuration탭 > Server Infrastructure의 Java and Process Management > Process definition 선택3. Additional Properties의 Java Virtual Machine 선택4. Generic JVM arguments 편집

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.tracer-x.x.x.jar의 full path} -jar {application jar}

8.1.2. Tomcat on Windows ServiceWindows 계열 OS에 binary로 설치하여 SYSTEM 계정으로 실행한 경우, ‘javaagent’ 방식으로 Tomcat을 실행합니다.

• “Configure Tomcat” 프로그램을 실행하여 Java 탭 선택 > Java Options에 -javaagent 옵션을 지정합니다.

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 67

Figure 19. Configure Tomcat - Java

8.1.3. JBossJVM 옵션에 -javaagent 및 -Djboss.modules.system.pkgs에 설정을 추가합니다.

JBOSS 7.0 이상 EAP 6.0이상

-Djboss.modules.system.pkgs=whatap 추가

standalone.sh

#!/bin/sh########## WHATAP ############WHATAP_HOME=/home/ec2-user/whatapWHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent.tracer-*.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. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 68

Figure 20. startWebLogic.sh

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

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

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 69

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

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 70

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

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

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

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 71

8.1.6. Jeus1. Jeus 설정 파일에서 JVM 옵션을 설정합니다

설정 파일 위치

Jeus7 $JEUS_HOME/domains/jeus_domain/config.xml 에서 jvm-option에 -javaagent옵션을 추가합니다.

Jeus6 $JEUS_HOME/config/$hostname/JEUSMain.xml 에서 command-option에-javaagent 옵션을 추가합니다.

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 72

Jeus 7 - config.xml

<domain>  <servers>  <server>  <name>server1</name>  <jvm-config>  <jvm-option>  -Xmx1024m -XX:MaxPermSize=128m  -javaagent:/whatap/whatap.agent.tracer-0.8.1.jar  </jvm-option>  </jvm-config>  </server>  </servers></domain>

Figure 21. Jeus 6 - JEUSMain.xml

2. 애플리케이션 서버를 재시작 합니다.

jdown && jboot

3. 애플리케이션 서버 로그와 에이전트 로그를 통해 에이전트가 정상적으로 기동하였는지, 에러가 발생하지 않았는지 확인합니다.

로그 파일 위치

에이전트 $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

JEUS7

$JEUS_HOME/domains/$HOST_NAME/servers/$NODE_NAME/logs/JeusServer.log

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 73

4. 에이전트가 애플리케이션 서버의 종류와 애플리케이션 서버의 서비스 container명을 인식했는지 확인합니다.

와탭 사이트에서 whatap.name과 whatap.type을 확인합니다.service.whatap.io 로그인 > 프로젝트 선택 > 서버 메뉴 선택 > 더보기 > Boot Environment 메뉴 선택을 통해 확인합니다.

whatap.type에는 애플리케이션 서버의 종류가 명시되어야 하며, whatap.name의 마지막 요소가 container이름 이어야 합니다.

Figure 22. Boot Environment

8.1.7. JettyJVM 옵션에 -javaagent와 -Dwhatap.port를 추가합니다.

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 74

$JETTY_HOME/bin/jetty.sh 파일에 JVM 파일 옵션을 추가합니다.

Figure 23. jetty.sh

또는, 옵션을 적용하여 Jetty를 기동합니다.

Start Jetty without startup shell

$ java -javaagent:/home/vagrant/whatap/whatap.agent.tracer-0.3.0.jar -Dwhatap.port=8080 -jar start.jar &

8.1.8. Resin1. Resin 설정 파일에서 JVM 옵션을 설정합니다.

설정 파일 위치

Resin 4.x $RESIN_HOME/conf/resin.properties 에서 jvm-arg를 추가하여 -javaagent옵션을 설정합니다.

Resin4.x

(중략)<resin xmlns="http://caucho.com/ns/resin">  <cluster id="web-tier">  <server-default>  <jvm-arg>-Xmx1024m -XX:MaxPermSize=128m -javaagent:/whatap/whatap.agent.tracer-#.#.#.jar</jvm-arg>  </server-default>  ...  </cluster></resin>(중략)

2. 애플리케이션 서버를 재시작 합니다.

3. 애플리케이션 서버 로그와 에이전트 로그를 통해 에이전트가 정상적으로 기동 되었는지 에러가 발생하지 않았는지 확인합니다.

로그 파일 위치

에이전트 $WHATAP_HOME/logs/whatap-{SERVER_NAME}-{DATE}.log

RESIN4.x $RESIN_HOME/log/jvm-app-#.log

8.1.9. Play$PLAY_HOME/framework/build 에 에이전트 옵션을 설정합니다. 별도 사용하는 시작/중지 스크립트가 있다면 그곳에 적용합니다.

8.1. 애플리케이션 서버별 적용 절차

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 75

$PLAY_HOME/framework/build

#! /usr/bin/env sh

########## WHATAP START ############WHATAP_HOME=/apps/whatapWHATAP_JAR=`ls ${WHATAP_HOME}/whatap.agent.tracer-*.jar | sort | tail -1`JAVA_OPTS="${JAVA_OPTS} -Dwhatap.play2=2.2.6 -javaagent:${WHATAP_JAR} " ①########## WHATAP END ############

if [ -z "${PLAY_VERSION}" ]; then  PLAY_VERSION="2.2.6"

(중략)

① Play는 기본 설정 이외 -Dwhatap.play2=2.2.6 옵션이 추가되어야 합니다.

8.1.10. Liberty${server.config.dir}/jvm.options 에 에이전트 옵션을 설정합니다. 파일이 없는 경우 신규로 생성 합니다.

/wasliberty/usr/servers/defaultServer/jvm.options

-javaagent:/app/whatap/whatap.agent.tracer-1.6.2.jar-Dorg.osgi.framework.bootdelegation=whatap.* ①

① OSGI 프레임워크를 사용하므로 이를 위한 설정을 추가 합니다.

8.2. 호환성 검증표

8.2.1. WASJava 버전 별로 다양한 WAS에서 와탭 에이전트 호환성 테스트를 수행한 결과입니다.

표시되지 않은 버전은 [email protected] 로 문의 바랍니다.

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

8.2. 호환성 검증표

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 76

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

WebLogic

업데이트 예정

WebSphere

WAS Ver. ibm-java-x86_64-60

8.5.5.10 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

8.2. 호환성 검증표

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 77

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

8.2. 호환성 검증표

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 78

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

WebLogic

DB JDK Ver. 호환성

Mysql JDK 1.8.0_91 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

Jetty

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

8.2. 호환성 검증표

Copyright ⓒ 2019 WhaTap Labs Inc. All rights reserved. 79


Recommended