애플리케이션 성능 카운터
와탭 에이전트는 애플리케이션 성능과 관련된 다양한 정보를 수집합니다. 크게 3가지로 분류할 수 있습니다.
-
User : 실시간 사용자 혹은 방문 사용자
-
Service : 트랜잭션, SQL, 외부 호출 건수 및 응답, 에러율 등
-
Resource : 시스템, 프로세스 자원 사용량
User Counter
사용자는 모니터링 대상 시 스템을 사용하는 클라이언트를 말합니다. 클라이언트에서는 일반적으로는 브라우저를 기준으로 사용자 수를 계산합니다.
웹 시스템 성능에서 사용자는 부하를 발생시키는 시작이기 때문에 중요합니다. 사용자 추적을 위해서는 사용자는 어떤 기준으로 구분하고, 어떻게 카운팅 할지를 고려해야 합니다.
사용자 구분
와탭 에이전트 사용자를 구분하기 위해 다양한 옵션을 제공합니다.
-
Remote IP
기본값은 remote ip를 사용하여 사용자를 구분합니다. remote ip는 실제 사용자를 구분하는 데 한계가 있습니다.
-
Cookie
쿠키를 사용하여 사용자를 구분합니다. 모든 접속 클라이언트를 대상으로 WHATAP이라는 쿠키에 UUID를 저장합니다.
whatap.conftrace_user_using_ip=false
# Java agent v2.2.0 or later
wclient_using_ip=false -
Header Key
HTTP 헤더에 전달되는 값으로 사용자를 구분할 수 있습니다.
whatap.confuser_header_ticket=USER
# Java agent v2.2.0 or later
wclient_header_ticket=USER
사용자 카운팅
사용자를 카운팅 하는 방법에 따라서 다르게 사용합니다. 실시간 사용자는 현재 시스템을 사용하는 사용자의 수를 알기 위해서 측정합니다. 일일 방문 사용자는 하루 동안 해당 서비스에 관심을 갖는 사용자가 몇 명인지에 대한 비즈니스적인 관리를 위해 측정합니다.
-
실시간 사용자
최근 5분 동안 사용자 수를 카운팅 합니다. 5초마다 shifting 하면 사용자를 카운팅 합니다. 각 서버에서 카운팅 된 숫자는 HyperLogLog 알고리즘을 통해서 머지 됩니다.
-
일일 방문자(DAU, Daily Active User)
하루 동안 시스템에 접속한 사용자를 카운팅 합니다. 24시간 동안 접속한 사용자를 HyperLogLog를 통해서 계산합니다.
와탭에서는 장기간 사용자를 카운팅 하기 위해 사용자 데이터에 대한 byte block을 서버로 수집합니다. 이 데이터를 Hyperloglog로 머지하면 이론적으로 한 달 이상의 방문 사용자를 계산할 수 있습니다.
Service Counter
트랜잭션과 트랜잭션이 사용하는 SQL 혹은 외부 호출 등에 대한 건수, 응답시간 에러 건수 등에 대한 성능지표가 포함됩니다.
-
Transaction Counter
트랜잭션을 수행하면 측정하는 카운터입니다.
- 건수
- 응답 시간
- 에러 건수
-
Active Transaction Counter
진행 중인 트랜잭션의 수를 카운팅 합니다.
-
건수
-
Active Status
진행 상태는 METHOD, SQL, HTTPC, DBC, SOCKET 5가지 상태로 고정되어 있습니다.
- METHOD - 일반 함수를 호출하는 상태
- SQL - db sql을 수행 중인 상태
- HTTPC - 외부 Http Api(서비스)를 호출 중인 상태
- DBC - DB 연결을 요청한 상태, 일반적으로 Pool에서 가져옴
- SOCKET - TCP 세션을 Connecting 중인 상태
-
-
SQL
SQL 수행 현황을 카운팅 합니다.
- 건수
- 응답 시간
- 에러 건수
- 패치 건수
-
HTTP Call
외부 Http 호출에 대한 현황을 카운팅 합니다.
- 건수
- 응답 시간
- 에러 건수
Resource Counter
서버 자원 혹은 node 프로세스 내부의 자원 사용량을 카운팅 합니다.
-
CPU (sys, usr, wait, steal, irq, cores)
CPU 사용량 %입니다. 각 종류별로 수집됩니다. 가상환경에서만 Steal이 의미가 있습니다. Cpu 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이 실행된 이후부터 시작된 스레드 수, 현재 돌고 있는 스레드 수, 데몬, 최대 스레드 수를 수집합니다. 스레드 풀이 필요한지에 대한 판단 등을 할 수 있습니다.
-
DB Connection Count (active,idle)
Connection Pool의 idle와 active 카운트를 수집합니다.
-
Tomcat Thread Pool (active, queueSize)
톰캣의 Executor 스레드 풀이 설정되었을 때 성능 정보를 수집합니다.
XML<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="50" minSpareThreads="2" maxQueueSize="78"/>
DB Connection Pool 카운터
DB Connection Pool은 DataSource라고 합니다. WAS가 제공하는 경우가 일반적이지만 일부에서는 오픈소스 Pool을 사용하기도 합니다. 사용량 정보가 JMX 로 노출되기도 하지만 그렇지 않은 경우도 많습니다.
와탭은 2가지 방식을 제공하고 있습니다. 하나의 BCI에 의한 직접 조회 방식과 JMX를 이용한 방식입니다. 기본은 BCI 방식을 사용하고 보조로 JMX를 사용할 수 있도록 제공하고 있습니다.
다음은 개별 옵션별 디폴트 값과 연관되어 ByteCode Injection되는 클래스입니다.
com.zaxxer.hikari.pool.HikariPool
org.apache.commons.dbcp.BasicDataSource
org.apache.commons.dbcp2.BasicDataSource
org.apache.tomcat.dbcp.dbcp.BasicDataSource
org.apache.tomcat.dbcp.dbcp2.BasicDataSource
org.apache.tomcat.jdbc.pool.ConnectionPool
weblogic.jdbc.common.internal.ConnectionPool
jeus.jdbc.connectionpool.ConnectionPoolImpl
org.jboss.jca.core.connectionmanager.pool.PoolStatisticsImpl
옵션을 변경한다면 BCI 관련 옵션이기 때문에 다시 시작해야 합니다. 클래스가 instrument된 후에도 추적 테이블에 등록되는 과정이 필요합니다. 따라서 실행 중에 redefine을 해도 동작하지 않습니다.
DataSource 현황 JMX로 가져오기
dbcp_pool_enabled==true 이면 tomcat_ds_enabled=false
weblogic_pool_enabled== true 이면 weblogic_ds_enabled=false
-
옵션 자동 결정 내용을 확인하세요.
-
관련된 pool 쪽 옵션 값을
false로 선언하세요. -
DataSource 관련 옵션 값을
true로 변경하세요. 기본값은false입니다.whatap.conftomcat_ds_enabled=false
weblogic_ds_enabled=false
ThreadPool 카운터
ThreadPool 카운터는 JMX Mbean 정보를 통해 수집됩니다. Tomcat과 같이 사용 사례가 많은 경우라면 문제없지만 특정 환경에서는 이 지표가 수집되지 않을 수 있습니다.
수집을 위해서 추가 설정이 필요합니다. 관련 설정은 다음과 같습니다.
jmx_threadpool_objectname=Catalina:type=ThreadPool,name="http-bio-8080"
// JMX ThreadPool MBean 이름을 설정합니다.
jmx_threadpool_atter_activecount=connectionCount
// activecount 수치를 나타내는 attribute를 설정합니다.
jmx_threadpool_atter_queuesize=maxThreads
// maxThreads 수치를 나타내는 attribute를 설정합니다.
JMX ThreadPool ObjectName 및 AttributeName 과 같은 Mbean 명은 JMX 모니터링 도구를 통해 확인하거나 각 WAS 별 Mbean 문서를 참고합니다.
사용 중인 WAS, 프레임워크 관련 문서를 참고해 Mbean 정보를 확인하세요.