트랜잭션 분석하기
히트맵
홈 화면 > 프로젝트 선택 > 분석 > 히트맵
와탭 모니터링 서비스 초기 화면에서 프로젝트를 선택한 다음 분석 > 히트맵 메뉴를 선택하세요.
히트맵은 대시보드 > 애플리케이션 대시보드의 히트맵 위젯을 통해 접근할 수도 있습니다.
상세 분석
에이전트 영역
현재 프로젝트와 연결된 에이전트를 선택해 필터링할 수 있습니다. 버튼을 선택하면 영역에서 히트맵 트랜잭션 차트를 확인할 수 있습니다.
히트맵 트랜잭션 차트
지연 문제가 있는 트랜잭션이 포함된 경우 히트맵 트랜잭션 차트에서 주황색이나 붉은색으로 표시됩니다. 정상 트랜잭션만 포함된 경우 파란색으로 표시됩니다.
선택 영역
실시간 히트맵 차트를 드래그하면 선택 영역의 애플리케이션 목록과 트랜잭션 정보를 확인할 수 있는 TX 트레이스 목록이 나타납니다.
애플리케이션 목록
차트에서 선택된 영역에 포함되는 트랜잭션 수와 에러 수를 확인할 수 있습니다. 목록 중에서 원하는 애플리케이션을 선택하면 해당 애플리케이션의 TX 트레이스 목록에 세부 정보가 나타납니다.
TX 트레이스 목록
TX 트레이스 목록은 세부 정보를 가지고 있습니다. 목록에서 원하는 트랜잭션을 선택하면 트랜잭션 정보 창이 나타납니다. 트랜잭션 정보 창에서 해당 트랜잭션의 트레이스 상세 분석을 확인할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.
히트맵 패턴의 이해
히트맵은 트랜잭션의 종료시간은 X축, 응답시간은 Y축으로 한 분포 차트입니다. 정상적인 웹 애플리케이션이라면 수 초 이하 구간에 집중된 분포를 보입니다.
히트맵 라인 분석하기
-
세로줄(LOCK 현상) 패턴
트랜잭션 처리 중 일시적인 락(Not only DB Lock)이 발생하면 이로 인해 처리를 대기합니다. 락이 해소되면 처리 대기 중 트랜잭션들은 비슷한 시간대에 함께 종료됩니다. 그러면 다음과 같이 세로로 줄이 만들어집니다.
세로줄 패턴으로 락을 감지하는 것은 매우 강력한 개념입니다. 특히 마이크로 서비스 아키텍처에서는 백엔드 시스템에서 발생하는 LOCK도 동일하게 감지될 수 있습니다.
Front 애플리케이션의 응답 패턴 세로줄은 Back-End 시스템이 사용하는 DB에서 락이 발생한 경우에도 감지됩니다.
-
가로줄(타임아웃) 패턴
10초 타임아웃 조건에서 해당 자원이 부족하면 트랜잭션들은 10초 대기 후 타임아웃 에러가 발생합니다. 이때 히트맵 10초 부근에 다음과 같이 가로줄이 생깁니다.
타임아웃 이후 재시도하는 로직이 있다면 그림처럼 가로라인이 10초 단위로 반복됩니다. 다음은 실제 장애 상황의 히트맵입니다.
(1) 구간에서 응답시간이 급증했고 (2) 구간의 빨간 라인은 전형적인 가로 라인 패턴입니다. (1) 구간 부하 발생으로 ConnectionPool이 소진되고 (2) 구간은 ConnectionPool 부족으로 2차 타임아웃 장애가 발생한 상황입니다.
패턴 분석 활용
트랜잭션 응답분포에 줄이 보인다는 것은 병목이 있다는 것입니다. 일시적인 락킹이면 세로줄이 그 병목이 타임아웃으로 빠지면 가로 줄이 만들어집니다.
문제를 분석할 때 라인에 포함된 트랜잭션만을 선택적으로 분석해서 문제를 빠르게 찾아낼 수 있습니다.
머신러닝 기반 응답 패턴 분석
머신러닝 기술을 통해 히트맵 패턴을 분석 후 비정상 여부를 자동 감지해 경고를 발행하는 기능입니다.
비정상 패턴 예시
월 수백 TB의 성능 데이터로부터 비정상 패턴을 학습하고 학습된 비정상 패턴과 유사한 패턴이 발생하는 경우 이에 대한 알람을 발행합니다.
-
세로줄 패턴
-
가로줄 패턴
-
복합 패턴
-
히트맵 알람
히트맵 트랜잭션 차트를 분석하는 방법에 대한 자세한 설명은 다음 문서를 참조하세요.
Java 에이전트의 예외 처리(WARNING) 기준
Java 언어를 사용하는 애플리케이션 환경에서 발생하는 에러를 Java 에이전트가 예외 처리하는 기준에 대해서 안내합니다. 다음 내용은 Java 에이전트 v2.2.27 기준으로 작성되었습니다.
서비스 화면에서 에러 표시
히트맵 위젯, 트레이스 분석 창을 통해서 확인할 수 있는 에러 단계는 대부분 WARNING 수준에 해당합니다.
Spring ExceptionHandler 통과 시 에러 처리
Spring 프레임워크에서는 org.springframework.web.servlet.DispatcherServlet.processHandlerException
메소드를 통과하는 경우 에러로 처리합니다. 다만 개발자가 Try-Catch 문을 사용하는 경우 ExceptionHandler
를 통과하지 않으므로 와탭에서는 에러 처리하지 않습니다.
Status Code 400 이상 에러 처리
HTTP 응답 코드가 400 이상인 경우에는 예외 클래스(Exception Class)가 발생하지 않더라도 에러로 처리합니다.
JDBC driver 호출 시 에러 처리
JDBC 연결 호출이나 SQL 실행 호출 시에 발생하는 에러는 에러로 처리됩니다.
HTTP call 에러 처리
HTTP 호출 중 발생하는 에러는 SLOW_HTTPC
, httpc error
등의 형태로 표시됩니다.
와탭에서 정의한 에러 처리
와탭 모니터링 서비스에서는 특정한 조건에 따라 에러로 처리합니다.
-
TOO_MANY_RECORDS: fetch 건수 10,000건 이상
관련한 에이전트 옵션은 다음 문서를 참조하세요.
profile_error_jdbc_fetch_max=10000
-
SLOW_SQL: SQL 시간 30,000ms 이상
관련한 에이전트 옵션은 다음 문서를 참조하세요.
profile_error_sql_time_max=30000
-
SLOW_HTTPC: HTTP call 경과 시간이 10,000ms 이상
관련한 에이전트 옵션은 다음 문서를 참조하세요.
profile_error_httpc_time_max=10000
-
httpc error: HTTP call status code 400 이상인 경우
관련한 에이전트 옵션은 다음 문서를 참조하세요.
httpc_status_error_enable=true
-
status error: 트랜잭션 status code 400 이상인 경우
관련한 에이전트 옵션은 다음 문서를 참조하세요.
transaction_status_error_enable=true
트랜잭션 에러 단계 INFO 처리
에이전트 설정을 통해서 일부 에러를 정상 상태로 표시하거나 무시할 수 있습니다. 히트맵 위젯에서 표시되는 레벨은 INFO(파란색)입니다.
-
biz_exceptions
: 레코드 에러 표시whatap.confbiz_exceptions=io.home.test.baseapp.base.exception.custom.CustomParameterizedException
-
ignore_exceptions
: 레코드 에러 미표시whatap.confignore_exceptions=org.springframework.web.util.NestedServletException
-
status_ignore
whatap.confstatus_ignore=408,500,200
-
httpc_status_ignore
whatap.confhttpc_status_ignore=403,401
-
status_ignore_set
whatap.confstatus_ignore_set=/api/posts/test/timeout:200,/error:500
-
httpc_status_url_ignore_set
whatap.confhttpc_status_url_ignore_set=/api/posts/test/timeout:408,/api/apache/httpclient/posts/timeout:500
에이전트 설정은 whatap.conf 파일을 편집하거나 관리 > 에이전트 설정 메뉴에서 확인할 수 있습니다. 자세한 내용은 다음 문서를 참조하세요.
메소드 예외 처리
hook_method_patterns
, hook_service_patterns
옵션을 통해 설정한 메소드가 수행 중 Exception을 발생시키는 경우, 해당 예외는 에러로 처리됩니다.
Try-Catch 구문을 사용하여 메소드 내부에서 Exception을 처리한 경우, 자바 에이전트는 해당 Exception을 수집 대상에서 제외하여 에러로 처리하지 않습니다.