본문으로 건너뛰기

Java Agent v2.0

v2.0_55

2021-08-20

아웃바운드 호출의 실시간 정보를 구간별 수집 설정 추가

진행중인 트랜잭션의 아웃바운드 호출 (sql, http call)의 실시간 정보를 구간별로 수집하기 위한 기능을 추가하였습니다. 에이전트 설정에 actx_slice_meter_enabled 를 추가하여 기능을 사용할 수 있습니다.

whatap.conf
actx_slice_meter_enabled=true

v2.0_53

2021-08-20

에이전트 설정 오타 수정

기존 hook_serivce_ignore_methods 에이전트 설정 오타를 hook_service_ignore_methods 로 수정하였습니다.

whatap.conf
hook_serivce_ignore_methods # before
hook_service_ignore_methods # after

v2.0_52

2021-08-02

URL 정규화 기능 추가

URL정규화를 위해 스켄된 파일 목록을 저장하고 애플리케이션 재시작 때 다시 사용하도록 기능을 추가하였습니다.

whatap.conf
keep_normalize_enabled=true
keep_normalize_filename=$oname

[oname].urls라는 이름으로 url패턴 텍스트를 저장합니다.

URL 정규화 기능 오류 수정

클래스의 private 함수에 URL 매핑을 설정한 경우에도 URL 정규화가 가능하도록 오류를 수정하였습니다.

추가된 URL 정규화 유형
@RequestMapping(value = "/api/calls")
@RestController
public class ItemController {

@GetMapping(value = "/items")
private String getItems() {
return "item";
}
}

v2.0_50

2021-07-13

URL 정규화 기능 오류 수정

클래스 상속관계를 활용하여 URL 매핑을 설정한 경우에도 URL 정규화가 가능하도록 오류를 수정하였습니다.

추가된 URL 정규화 유형
@RequestMapping(value = "/api/calls")
@RestController
public class ParentController {

}
...

@RestController
public class ChildController extends ParentController {
@GetMapping(value = "/child-first/{id}")
public ResponseEntity<?> findItemById(@PathVariable(value = "id") long id) {
return ResponseEntity.ok().body("result");
}
}

v2.0_39

2021-06-24

sigar 모둘의 디스크 사용량을 보정하였습니다. 0.78 => 78.0

v2.0_38

TX 서비스 별 apdex, 응답시간 표준편차 수집

서비스 URL별 apdex와 표준편차 지표를 수집하도록 변경되었습니다. 단, 화면에서 데이터를 조회는 프런트의 추가개발이 완료된 후 가능합니다.

LogSink데이터수집

로그데이터를 수집하는 기능이 추가되었습니다.

v2.0_36

custid 매핑 규칙

custid는 개발자나 다른 프로그램에 의해 생성된 추적키를 의미합니다. 기본적으로 custid는 String type입니다. custid는 자동으로 와탭의 mtid로 변환됩니다. 변환 규칙은 다음과 같습니다.

if (custid가 숫자)
mtid = parseLong(custid)
else
mtid = hash64(custid)

v2.0_34

Java 9 이상의 환경에서 HeapHisto 조회와 Native Thread Dump 기능 버그 수정

Java 9이상에서 HeapHisto와 Thread Dump 기능이 동작하지 않았는데 에이전트의 버그를 수정하였습니다.

stat_useragent_enabled 옵션 추가

UserAgent 통계 정보를 수집할때 가부를 설정할 할 수 있도록 옵션을 추가 하였습니다.

whatap.conf
# default: true
stat_useragent_enabled=true

설정이름 오류 수정

custom_trace_header_key 옵션 명칭에 틀린 철자 수정하였습니다.

Lambda함수 BCI 제외 수정

lambda 함수에 대해 instrument 대상에서 제외되었던 문제를 수정하였습니다.

SQLException 통계를 수집방식 개선

SQLException 에러는 통계 수집시 sqlcode 별로 수집되는데 SQLException을 상속 받은 에러 클래스에 대해서도 같이 적용되도록 변경하였습니다.

v2.0_32

Custom Pool 카운트 추적 옵션 추가

Custom Pool을 추적할때 메소드 설정 옵션 custom_pool_method_total이 추가 되었습니다. custom_pool_method_idlecustom_pool_method_total 중 하나만 설정하면 됩니다.

whatap.conf
custom_pool_id=myPool
custom_pool_method_active=getActiveConnection
custom_pool_method_idle=getIdleConnection
custom_pool_method_total=getTotalConnection

버그수정

Weaving 컴포넌트를 사용하여 HttpCall을 추적한경우 Status 에러 선택이 동작하지 않는 버그 수정하였습니다. 관련 옵션은 다음과 같습니다.

whatap.conf
httpc_status_ignore
httpc_status_error_enable
httpc_status_ignore_set

v2.0_31

Spring Cloud Gateway 추적

Spring Cloud Gateway의 트랜잭션을 추적하기 위해서는 다음과 같은 옵션을 설정하고 재기동합니다.

whatap.conf
weaving_reserved=webflux-5.2,spring-cloud-gateway-2.2

v2.0_30

커스텀 Connection Pool Count 추적을 위한 옵션 추가

기 정의되지 않은 클래스들을 Pool 사이즈를 카운팅하기 위한 옵션이 추가되었습니다.

whatap.conf
custom_pool_id=myPool
custom_pool_method_active=getActiveConnection
custom_pool_method_idle=getIdleConnection

custom_pool_idcustom_pool_classes에 설정된 값과 일치해야 합니다.

일반적으로 다음과 같이 설정됩니다.

CustomPoolCounter 설정 예

whatap.conf
custom_pool_classes=myPool@com.mydb.MyDataSource
custom_pool_id=myPool
custom_pool_method_active=getActiveConnection
custom_pool_method_idle=getIdleConnection

"myPool"이라는 id에 custom_pool 설정이 적용됩니다.

노트

Custom Pool의 정보를 조회하면서 에러가 발생하면 1시간에 한번씩 로그에 기록됩니다.

컨넥션 풀 클래스 HOOK 옵션을 분리

컨넥션 풀 클래스를 Instrument를 결정하는 옵션과 실제 데이터를 수집하는 옵션을 분리했습니다.

whatap.conf
hook_hikari_pool_enabled = true
hook_dbcp_pool_enabled = true
hook_tomcat_pool_enabled = true
hook_weblogic_pool_enabled = true
hook_jeus_pool_enabled = true
hook_jboss_pool_enabled = true
hook_jedis_pool_enabled = true
hook_hybris_pool_enabled = true
hook_c3p0_pool_enabled = true
노트

hook_xxx는 자바 프로세스가 재기동 되기 전에 설정되어야하지만 데이터를 수집하는 옵션 (ex, hikari_pool_enabled)은 실행 중에 변경이 가능합니다.

v2.0_27

내부 에러 처리 클래스 인스턴스변경

와탭 내부에서는 에러 정보를 효과적으로 수집하기 위해 와탭에서 정의한 에러 클래스를 사용하고 있습니다. 이 에러 클래스들을 인스턴스를 관리하는 클래스를 추가하였습니다.

외부 기능적으로 이전 버전과 차이는 없습니다. JVM 버그가 의심되는 에러가 발견되어 회피 목적으로 변경하였습니다.

whatap.conf
Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class whatap.error.CONNECTION_OPEN_FAIL

알티베이스 드라이버 추적 버그

알티베이스 JDBC드라이버를 추적할때 연결 오류가 나는 문제가 발견되어 수정하였습니다. Connection jdbc url를 조회하면서 발생하는 문제로 관련 추적을 off하는 옵션도 같이 추가했습니다.

whatap.conf
jdbc_url_elabled=true

해당값을 false로 변경하면 jdbc연결 정보를 추적하지 않습니다.

v2.0_26

액티브스택 수집 최적화

에이전트 tps에 따라 액티브 스택 수집 최적화 옵션 자동 적용 기능을 추가 했습니다.

whatap.conf
auto_active_stack_count=true
  • TPS < 100

    whatap.conf
    active_stack_count = 50
  • TPS < 300

    whatap.conf
    active_stack_count = 30
  • TPS >= 300

    whatap.conf
    active_stack_count = 20
노트

auto_active_stack_count의 기본값은 가변적입니다. active_stack_count가 명시적으로 설정되어있으면 기본값이 false이고 명시적으로 whatap.conf에 설정되어 있지 않으면 기본값이 false입니다.

액티브스택 성능 부가 정보 옵션 추가

액티브 스택을 수집할 때 해당 트랜잭션의 성능 상태를 추가로 수집할 수있습니다.

whatap.conf
active_stack_prefx_enabled=false

whatap.confactive_stack_prefx_enabled 값을 true로 설정하면 액티브스택 수집 시점의 트랜잭션의 성능 정보를 수집합니다.

  • cpuTime : cpu사용 millisecond
  • malloc : 메모리 사용 bytes
  • sqlCount : 현 트랜잭션의 총 SQL 건수
  • sqlTime : 현 트랜잭션의 총 SQL시간
  • httpcCount : 현 트랜잭션의 총 HTTPCall 건수
  • httpcTime : 현 트랜잭션의 총 HTTPCall 시간
  • actSqlDbc : 수행중인 SQL의 DB
  • actSql : 수행중인 SQL
  • actHttpc : 수행중인 외부 호출 URL

데이터 SEND 버퍼 기본값 축소

에이전트에서 데이터를 전송하기 위해 버퍼에 일시적으로 저장을 합니다. 이때 버퍼 사이즈를 기존의 반으로 줄였습니다.

  • 기본 버퍼: 128(우선순위 높음)

  • 프로파일 버퍼: 256(우선순위 낮음)

v2.0_25

  1. TXID기반 추적 방식 리팩토링
  2. Weaving 플러그인 새로 빌드함
  3. Java Process CpuTime 조회 오류 수정
  4. Exception 경고시 Class이름과 메세지 포함되도록 변경

v2.0_24

버그수정

  1. Active Transaction 수집 모듈에서 nullpoint Exception 수정(2.0_23에서만)

  2. 키 클래스 hash중복 문제 수정

v2.0_23

버그수정

active_http_query_enabled=true 옵션 추가

SQL파라미터 수집시 대용량 처리 옵션

whatap.conf
sql_param_max=128
sql_param_separator=

v2.0_22

버그 수정

  1. MySql 8.0.19에서 SQL수집 안되는 문제 수정
  2. arrival_rate 지표 추가

v2.0_21

Hikari Pool카운트 수집오류 수정

Hikari Connection Pool에 대한 ACTIVE/IDLE카운트 수집이 안되는 오류 수정했습니다.

에이전트 초기화 시간 변경

에이전트가 초기화될때 oname이 지정된 경우 무시되던 boot_wait_time 옵션이 항상 적용될 수있도록 변경합니다. 또한 기본값을 30초에서 20초로 변경합니다.

whatap.conf
boot_wait_time=20000

SQL 파라미터 NULL추가 버그 수정

2.0_20버전(이전버전은 정상)에서 SQL 파라미터에 불필요한 null이 추가되는 버그를 수정합니다.

v2.0_19

APDEX 버그 수정

apdex데이터가 잘못 수집되는 버그 수정했습니다.

Oracle CallableStatement 파라미터 수집

오라클 JDBC에서 CallableStatement파라미터를 수집하기 위한 기능과 옵션을 추가했습니다.

whatap.conf
ojdbc6_enabled=true
노트

옵션은 미리 수정하고 재기동후에 반영됩니다.

v2.0_18

status_ignore_set & httpc_status_ignore_set

Http Status 리턴 코드중에서 무시하고 싶은 코드를 URL단위로 설정합니다.

  • Transaction의 Status Code

    whatap.conf
    status_ignore_set=/a/b/c:400,/a/ab/c:404
  • HttpCall(외부 호출)의 Status Code

    whatap.conf
    httpc_status_ignore_set=/a/b/c:400,/a/ab/c:404
노트

4xx 5xx에 대해서만 설정가능합니다. url의 통계에서 조회되는 url과 동일하게 기술해야 합니다.

v2.0_17

텍스트 전송 초기화 시각 변경

v2.0_16버전에서 에이전트 텍스트 전송 기록 reset을 한국시간 24시로 변경하였는데, 다시 GMT기준 00시로 변경하였습니다. 텍스트 전송기록이 reset되어야 에이전트는 새로 발생한 URL에 대한 텍스트 전송을 수행합니다.

v2.0_16

HttpCall Status기반 에러 처리

외부 httpcall을 수행한후 리턴 Status Code가 4xx혹은 5xx인경우 whatap.error.HTTPC_ERROR로 등록하도록 변경합니다.

택스트 전송 초기화 시각 변경(한국 00시)

2.0_17에서 리셋합니다.

v2.0_15

OKHTTP3 위빙플러그인 수정

OKHTTP3위빙 플러그인 버그를 수정했습니다.

액티브트랜잭션 리스트 색깔정보

액티브 트랜잭션 조회 시 색깔값을 서버로 전송하도록 정보를 추가합니다. 화면에서 에이전트 설정에 따라 지연색을 사용합니다.

JMX_THREAD_POOL_DETAIL_ENABLED 수정

쓰레드풀 사이즈 추적을 위한 jmx 로직이 jboss에서 에러 로그를 출력하여 옵션 처리하고 변경합니다. 기본값을 false로 수정합니다.

c3p 컨넥션 풀사이즈 추적 버그 수정

C3p 컨텍션 풀 사이즈 추적 코드의 버그를 수정했습니다.

v2.0_14

Silent Shutdown 지시파일 명변경

WHATAP_HOME{pid}.shutdown 파일이 생성되면 와탭 에이전트는 서버에 자신이 1분 이내에 정상 종료 할 것임을 전달합니다. 이번 버전에서는 이 파일을 자동으로 삭제하도록 처리하였습니다. 그러면서 파일 명을 whatap_{pid}.shutdown으로 변경하였습니다.

사용자 추적 ID를 mtid로 바인딩

트랜재션 시작 에이전트 플러인 에서 다음과 같이 프로그램함으로 애플리케이션이 사용하는 txid를 와탭의 내부 mtid로 공용할 수 있습니다.

HttpServiceStart.x
$ctx.inner().customTrace("abc9812xfsf23213");

v2.0_13

쿠키기반 사용자 카운팅 조건 수정

와탭에서 사용자 수를 카운팅 할때 IP나 쿠키등을 사용합니다. 쿠키를 사용할때 쿠키 오버플로어 장애를 막기 위한 옵션이 존재합니다.

whatap.conf
trace_user_cookie_limit=2048

trace_user_cookie_limit의 기본값이 2048에서 4000으로 변경되었습니다.

v2.0_11

BCI디버깅을 위한 덤프

whatap.conf
hook_dump_enabled=true

hook_dump_enabled=true를 설정하면 와탭 에이전트에 의해 변경되는 클래스는 모든 덤프합니다. ${WHATAP_HOME}/classes에 수정된 파일이 모두 덤프됩니다.

노트

어떤 클래스가 BCI에 의해 변경되었는지를 확인할 수있습니다.

Log 디렉토리에 Write 권한 없을 때 이상 현상

Log 디렉토리에 쓰기 권한이 없는 경우에 BCI 관련 모듈이 최기화되지 않는 버그를 수정하였습니다.

JDBC관련 기본 BCI 대상 클래스 OFF 옵션

와탭에이전트는 주요하게 SQL을 추적해야하는 JDBC관련 클래스를 내부에 기본 설정하고 있습니다. 이 기본 설정을 OFF할 수있는 옵션이 추가 되었습니다.

whatap.conf
hook_jdbc_default_enabled=true
hook_jdbc_stmt_default_enabled=true
hook_jdbc_pstmt_default_enabled=true
hook_jdbc_cstmt_default_enabled=true
hook_jdbc_rs_default_enabled=true

기본값은 true입니다. Statement, PreparedStatement, CallableStatement, ResultSet 클래스에 대해서 구분하여 지정할 수있습니다.

hook_jdbc_default_enabled의 설정값은 hook_jdbc_stmt_default_enabled의 기본값이 됩니다.

BCI 대상 클래스 제어

BCI을 위한 모듈의 동작여부를 제어합니다. 아래 옵션들은 자바 프로세스를 재기동해야 정상 적용됩니다.

whatap.conf
hook_http_enabled=true
hook_serivce_enabled=true
hook_dbsql_enabled=true
hook_dbopen_enabled=true
hook_methods_enabled=true
hook_socket_enabled=true
hook_file_enabled=true
  • hook_http_enabled: HttpServlet, ServletFilter등에 대한 기본 BCI 설정

  • hook_serivce_enabled: 직접 설정한 Tx시작 제어

  • hook_dbsql_enabled: JDBC관련 BCI 제어, hook_jdbc_default_enabled는 기본 hooking 설정된 클래스를 무시하는 것이고, hook_dbsql_enabled는 해당 BCI 기능 자체는 OFF할 수 있습니다.

  • hook_dbopen_enabled: getConnection(Connection Open) 부분에 대한 BCI 제어

  • hook_methods_enabled: 메소드 프로파일에 대한 BCI 제어

  • hook_socket_enabled: Socket Open 추적(트랜잭션 프로파일)에 대한 BCI제어

  • hook_file_enabled: File Open 추적(트랜잭션 프로파일)에 대한 BCI제어

Class View에서 상세보기 옵션

클래스의 시그니쳐를 조회할 때 상세한 클래스 ByteCode 내용을 확인하고자 할 때 에이전트 옵션으로 설정할 수 있습니다.

whatap.conf
view_class_detail_enabled=false

기본값은 false이고, false이면 클래스의 signature만을 확인 할 수 있습니다.

v2.0_10

SQLException 의존성 제거

warning

v2.0_01 ~ 09까지의 버전을 Java 9 이상의 환경에서 설치할 때 Exception 통계를 확보하지 못하는 버그를 수정하였습니다.

httpc url에 대한 정규화 강화

외부호출 URL에 대한 정규화 기능을 추가하였습니다.

whatap.conf
trace_httpc_normalize_prefix=/a,/b

trace_httpc_normalize_prefix에 설정된 단어로 시작되는 URL들은 prefix로 normalize 됩니다.

v2.0_09

weaving@okhttp3 버그 수정

okhttp3 위빙 컴포넌트의 버그가 수정되었습니다. 이전 버전에 포함되어있는 okhttp3 컴포넌트는 버그로 인해 동작하지 않습니다.

HTTP 기본 추적 제어

javaee 서블릿은 기본으로 http 요청을 추적합니다. 주요 트랜잭션 시작 클래스가 와탭 에이전트에 등록되어있기 때문입니다.

Basic class
javax.servlet.http.HttpServlet
org.apache.catalina.filters.FilterBase
weblogic.servlet.jsp.JspBase
org.apache.catalina.core.ApplicationFilterChain
Basic interface
javax.servlet.Filter

기본 클래스/인터페이스는 hook_http_default_enabled=false를 설정하면 제외됩니다.

whatap.conf
hook_http_default_enabled=true

HTTP 클래스 추가를 위해서는 hook_httpservlet_classes를 사용합니다.

whatap.conf
hook_httpservlet_classes=javax.servlet.http.HttpServlet

HTTP 인터페이스를 추가를 위해서는 hook_http_filters를 사용합니다.

whatap.conf
hook_http_filters=javax.servlet.Filter
정보
  • hook_httpservlet_classes/hook_http_filters에 등록되기 위해서는 service 혹은 doFilter 메소드를 포함하고 있어야 합니다.

  • hook_httpservlet_classes/hook_http_filters 옵션들은 변경 시 재기동이 필요합니다.

v2.0_08

사용자 추적 옵션 수정

whatap.conf
trace_user_method=ip

ip, cookie, jsession, header, none, 4가지 중 하나를 선택할 수있습니다.

  • ip : 클라이언트 ip를 사용자로 구분하여 카운팅 합니다.
  • cookie: WHATAP 쿠키를 자동으로 생성하여 사용자를 카운팅 합니다.
  • header: http header 값을 조회하여 사용자를 카운팅합니다. trace_user_header_key 를 지정해 주어야 합니다.
  • jsession: 쿠키값 중에서 JSESSIONID값을 읽어 사용자를 카운팅합니다.
  • none : 사용자를 카운팅하지 않습니다.

trace_user_method 설정된 값은 whatap.log에 출력됩니다.

주요 메소드 Exception 추적

트랜잭션 프로파일 시 트랜잭션 중간에 Exception을 catch 해버리면 Exception 발생 여부를 알 수없습니다. 즉 트랜잭션 정보가 정상 종료로 표시됩니다. 그것은 모든 메소드의 Exception을 추적할 수 없기 때문입니다.

하지만 여러가지 이유로 주요 메소드에서 발생하는 Exception에 대해서는 에러로 표시하고자 할 때 필요합 옵션이 추가되었습니다.

whatap.conf
hook_method_error_supers
hook_method_error_interfaces
hook_method_error_patterns

위 옵션에 설정된 클래스의 메소들에서 Exception이 발생하면 트랜잭션 에러로 처리됩니다.

에이전트 접속 정보 설정키 변경

에이전트가 서버에 정보를 전송하기 위해서는 license 값이 등록되어있어야 합니다.

whatap.conf
license={x49s223s812hc-x496iqddmlug9c-z4orgmapfi}

키를 변경하였습니다. license */} whatap.project.token

whatap.conf
whatap.project.token={x49s223s812hc-x496iqddmlug9c-z4orgmapfi}
노트

license 옵션 키도 동일하게 사용 가능합니다.

URL Prefix 기반 정규화

prefix를 등록하고 등록한 prefix로 시작하는 URL는 prefix 값으로 변경(정규화)하는 기능을 추가하였습니다.

whatap.conf
trace_normalize_prefix=/a,/b

옵션은 운영 중에도 실시간 반영됩니다.

Jedis 프로파일링

jedis드라이버를 사용하여 redis를 호출하는 경우 응답시간을 추적할 수있습니다.

whatap.conf
weaving_reserved=jedis-3.2
노트

jedis 2.x까지 적용할 수있습니다.

whatap.conf
jedis_basetime=100

기본으로 응답시간이 100ms 이상인 경우에 프로파일링됩니다. 모든 jedis 호출을 프로파일링 하고 싶으면 jedis_basetime=0으로 설정합니다.

whatap.conf
jedis_show_parameter=false

jedis 호출 중에서 파라미터 값을 같이 프로파일링할 때 true로 설정합니다.

  • getSet
  • get/set
  • hget/hset

위의 명령들을 프로파일링 합니다.

노트

만약 다른 명령을 프로파일링하고자 한다면 support@whatap.io로 문의바랍니다.

Spring Kafka 트랜잭션 추적

Kafka Listener가 데이터를 받아 처리하는 로직을 추적하는 기능을 추가하였습니다.

whatap.conf
weaving_reserved=spring-kafka-1.3, spring-kafka-2.4
노트

Spring Kafka-1.1.x ~ 1.3.x 는 spring-kafka-1.3를 사용할 수 있고 Spring Kafka-2.0.x ~ 2.4.x 는 spring-kafka-2.4를 사용합니다.

https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka 트랜잭션 이름은 "kafka:topic-name" 형태가 됩니다.

Spring MongoDB 프로파일링

몽고DB 메소드 호출에 대한 응답 시간을 추적할 수있습니다.

whatap.conf
weaving_reserved=spring-mongodb-2.2
노트

spring-mongodb-2.2는 Sping Data MongoDB 1.1.x~2.2.x까지 적용할 수 있습니다. https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb

whatap.conf
mongodb_basetime=100

기본으로 응답시간이 100ms이상인 경우에 프로파일링됩니다. 모든 jedis 호출을 프로파일링하고 싶으면 jedis_basetime=0으로 설정합니다.

whatap.conf
mongo_show_parameter=false

jedis 호출 중에서 파라미터 값을 같이 프로파일링할때 true로 설정합니다.

  • getSet
  • get/set
  • hget/hset

위의 명령들을 프로파일링합니다.

노트

만약 다른 명령을 프로파일링하고자 한다면 support@whatap.io로 문의바랍니다.

Disk 사용량 카운팅

리눅스 환경에서 디스크 사용량을 추적할 수 있습니다. 디스크는 여러 개가 마운트될 수 있습니다. 따라서 마운트된 디스크를 지정하여 모니터링할 수 있습니다.

whatap.conf
diskusage_enabled=false
diskusage_interval=300000
diskusage_default_enabled=false

diskusage_default_enabled=true가 설정되면 diskusage_path 설정은 무시됩니다. diskusage_interval 간격(ms)으로 디스크 사용량을 추적하여 데이터를 보냅니다.

diskusage_path 설정

whatap.conf
diskusage_count=2
diskusage_0_id=root
diskusage_0_path=/
diskusage_1_id=home
diskusage_1_path=/home

SybaseDB SQL 프로파일링

사이베이스 DB에 대한 SQL 프로파일링이 가능합니다.

com.sybase.jdbc2.jdbc.*
com.sybase.jdbc4.jdbc.*

Byte Code Instrumentation(BCI) 예외 옵션

자바에서 성능 추적이 필요한 주요 클래스들은 기본으로 BCI를 통해 수행 내용을 추적하도록 구현되어 있습니다.

하지만 간혹 추적이 부적절한 클래스들이 존재할 수있는데 무시하기 위한 옵션이 있습니다.

whatap.conf
hook_ignore_classes=org.mariadb.jdbc.MariaDbResultSet

기준시간 이하 에러 트랜잭션 프로파일 옵션처리

profile_basetime 이하는 트랜잭션은 5분당 한건의 TX만 프로파일정보를 서버로 전송합니다. 하지만 에러가 발생한 트랜잭션은 옵션으로 선택할 수있습니다.

whatap.conf
profile_concern_error_enabled=false

profile_concern_error_enabled=true가 되면 에러가 발생한 모든 트랜잭션은 profile_basetime에 상관없이 수집합니다.

노트

기본값은 false입니다.

기본 counter 중 cputime을 초당 값으로 변경

자바 프로세스 cpu 사용량을 측정하는 카운터는 2가지가 있습니다. 하나는 proc_cpu이고 다른 하나는 cputime입니다.

  • proc_cpu는 시스템에서 프로세스가 차지하는 cpu % 값을 표현하고 있습니다.

  • cputime은 프로세스가 5초 동안 사용한 cpu 나노초를 수집하였습니다. 이 값을 초당 밀리초(ms) 값으로 변경하였습니다.

v2.0_07

  • 버그 수정: maria 2.4.x 바인드변수 추적안됨

    mariaDB jdbc driver 2.4.x에서 SQL 바인드변수의 추적이 안되는 버그 수정

  • 사용자 카운팅시 JSESSIONID를 사용할때 키 변경가능

    사용자 카운팅을 위해 JSESSIONID의 값을 사용할 수있습니다. 근데 JSESSIONID를 다른 키로 변경한경우 변경된 키를 사용할 수있도록 옵션이 추가 되었습니다. 기본값은 JSESSIONID입니다.

    whatap.conf
    trace_user_using_jsession_key=JSESSIONID

v2.0_04

  • 버그 수정: biz_exceptions 동작 하지 않음

    hook_exception_handler에 등록된 메소드에서 Exception이 catch되는 경우에 biz_exceptions에 등록된 에러에 대한 예외 처리가 되지 않고 profile_exception_stack 옵션이 동작하지 않는 버그 수정

v2.0_00

에이전트 통합

이전 버전(v1.9.7이하)에서 WhaTap에이전트는 java5~8을 위한 whatap.agent.tracer-1.x.x.jar와 java9 ~ java13을 위한 whatap.agent.java9-1.x.x.jar로 분리하여 제공되었었습니다. 그러나 v2.0이후부터는 java5 ~ 13 혹은 이후 java까지도 whatap.agent-2.x_xx.jar로 통합되어 제공됩니다.

Hybris connection pool 추적 기능 추가

Hybris는 SAP에서 인수한 e-commerce 솔루션입니다. Hybris는 자체개발한 DB Connection Pool을 사용하고 있습니다. 이 풀의 갯수를 추적하는 기능이 추가 되었습니다.

whatap.conf
hybris_pool_enabled=true #default: true

JNDI 혹은 JDBC URL 별로 DB연결수 추적

카운터 수집은 DB연결 정보(JDBC URL/JNDI)별로 연결수를 추적하도록 수정되었습니다. 에이전트별 DB연결수는 동일합니다. 연결정보에 대한 상세 데이터를 별도 수집할 수있습니다. (TAG 데이터)

whatap.conf
pool_detail_enabled=true

ECS CPU 사용량 추적

AWS ECS 환경에서 자바 에이전트가 설치되면 자동으로 인지하여 ECS에서 제공하는 CPU정보를 조회합니다. 그리고 할당된 CPU Limit를 수집합니다.

Active Transaction 조회 기능 강화

액티브 트랜잭션 정보가 요청되었을 때 보다 상세한 정보를 리턴합니다. domain, 진행중인 SQL, httpcall 정보 등이 추가되었습니다.

에이전트 로그 이름 변경

와탭 자바 에이전트의 로그 파일 명이 변경되었습니다. (whatap-20200301.log)

Http Header Demp(Profile) 키 수정

Http Header Demp(Profile)시 기본 생략 키를 등록하였습니다.

whatap.conf
profile_http_header_ignore_keys=cookie,accept,user-agent,referer

만약 key를 제거하려면 none을 설정합니다.

whatap.conf
profile_http_header_ignore_keys=none

CPU 모니터링 모듈 정리

환경에 따라 여러가지 CPU사용량 수집을 위해 여러가지 모듈이 선택되어 사용될 수 있습니다.

  • JMS : JMX 사용
  • /proc : Linux /proc/stat 조회
  • sigar : 오픈소스 sigar 라이브러리
  • ECS API : AWS ECS api
  • KUBE : 와탭 쿠버 모니터링
  • Shell : Shell 프로그램

와탭의 자바에이전트는 CPU수집 모듈 중에 환경에 따라 자동으로 선택됩니다.

if (쿠버 환경) {
<KUBE>
} else if (AWS ECS) {
<ECS>
} else if ( 설정 linux_proc_stat_enabled) {
if (리눅스) {
</proc/stat>
} else {
<JMX>
}
} else if (설정 shell_perf_enabled) {
<SHELL>
} else if (설정 sigar_enabled) {
<SIGAR>
} else {
<JMX>
}
whatap.conf
# default
linux_proc_stat_enabled=false
shell_perf_enabled=false
sigar_enabled= jdk8이하?true:false

Weaving 플러그인 관리 개선

1.9.x에서는 위빙 플러그인의 버전이이나 중복 설정 여부를 체크하지 않았습니다. 2.0부터는 플러그인 별로 컴포넌트 이름과 버전이 관리됩니다.

플러그인 이름과 버전

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.10.5
Created-By: 11.0.2+9-LTS (Oracle Corporation)
PlugIn: okhttp3 //플러그인 이름
Build: 001 //플러그인 빌드 버전
Agent-Version: 2.0

설치된 jar 파일에서 manifest내의 "PlugIn:" 값을 기준으로 최근 "Build"를 로딩합니다.

Reserved 플러그인

자주 사용되는 Weaving 플러그인은 whatap.agent.jar 파일 내에 임베디드되었습니다.

akka-2.5.jar
axis-1.4.jar
okhttp-2.7.jar
okhttp3.jar
play-2.7.jar
reactor-rabbitmq-1.2.jar
spring-rabbitmq-2.1.jar
springboot-start.jar
tomcat-boot.jar
webflux-5.2.jar

임베디드된 다른 위빙 컴포넌트들은 weaving_reserved 옵션으로 설정할 수있습니다. ".jar"를 제외한 파일명을 설정합니다.

whatap.conf
weaving_reserved=akka-2.5, okhttp3

커스터마이징 개발

와탭 사용자는 직접 위빙 플러그인을 만들 수있습니다. 만들어진 위빙에는 manifest.mf파일에 PlugInBuild 속성이 설정되어 있어야 합니다. 배포는 에이전트 home에 instrument 디렉토리 아래에 복사합니다.

$WHATAP_HOME/instrument

로딩은 weaving_plugin_enabled 옵션에 의해 통제됩니다. 기본값은 true입니다.

whatap.conf
weaving_plugin_enabled=true

트랜잭션 쓰로틀링 Reject html 임베드

사용자 요청을 제한하기 위한 쓰로틀링 기능에서 사용자 안내 페이지를 와탭 에이전트에 임베드하였습니다.

notice.html
notice.json

notice.html을 활성화 하기 위해서는 옵션을 추가합니다.

whatap.conf
throttle_rejected_html=notice.html
노트

notice.html 파일을 편집하여 사용합니다.

사용자 커스텀 카운팅 기능 추가

시스템의 접속 사용자를 임의로 그룹핑하여 카운팅 하기 위한 기능들이 추가 되었습니다.