APM 에서 트랜잭션 분석 챠트 활용하기 : T-MAP
안녕하세요
솔루션 서비스팀 박찬석입니다.
이번 포스팅 주제는 “Trancaction Heatmap(T-Map)” 입니다.
T-Map이란?
Transaction Heatmap(T-Map)은 시간의 흐름에 따른 응답시간의 분포를 격자 형태로 표현하고, 해당 시간/응답시간 격자에 처리된 요청이 많으면 더 짙은 색상으로 표시하는 Heatmap으로 표현한 것입니다. 애플리케이션에 속한 모든 인스턴스들에 대해 모두 표시가 되며 HTTP Status 코드로 400, 500 오류가 발생하면 Cell에 빨간색으로 표시됩니다. APM사용자는 Pending Transaction같은 이슈 상황 발생시 T-Map을 활용하여 원인을 파악하는데 도움을 받을 수 있습니다.
T-Map의 보관주기와 Current / History / Range
T-Map의 보관주기
시스템 설정에서 트랜잭션 데이터의 보관주기를 설정할 수 있습니다. 디폴트 값은 30일입니다. 이렇게 설정될 경우 최대 30일까지의 T-Map데이터를 조회할 수 있습니다.
Current
Current는 말 그대로 현재의 트랜잭션 상황을 볼 수 있습니다. X축에 해당하는 현재 시간의 흐름에 따라 트랜잭션 데이터들이 수집되어 T-Map을 그리게 됩니다.
Hisotry
History를 선택할 경우 원하는 날짜를 선택하여 해당 날짜의 T-Map 상황을 조회할 수 있습니다.
Range
Range로 조회할 경우 원하는 시작 날짜와 시간부터 끝 날짜와 시간까지의 범위에 해당하는 T-Map 상황을 조회할 수 있습니다.
T-Map 상세
Transaction Heatmap(T-Map)에 마우스로 드래그하여 사각형을 그리면, 해당 영역에서 처리된 Request들에 대한 상세 트랜잭션을 메소드 단위로 분석할 수 있습니다. 상단에는 선택한 영역에서 실행된 Request들이 출력되며, 상단에서 Row를 클릭하면 하단에 트랜잭션에 대한 상세 정보를 출력합니다.
Request URL의 링크를 클릭하면, 사용자가 요청한 URL로 이동하여 실제 어떤 페이지 요청이었는지 확인할 수 있다. 그 외에 시작시간, 수행시간, Database와 관련된 실행시간의 합, CPU 소요 시간 등의 정보를 확인할 수 있습니다.
트랜잭션 상세 정보는 다음과 같은 형식으로 표시됩니다.다. 수행시간이 느리면 빨간색으로 표시됩니다.
해당 메소드에서만 실행하는 데 소요된 시간을 계산하여 Exclusive 시간을 계산하여 표시합니다. 메소드들을 실행 관계를Tree 형태로 표현하고 있습니다. 또, B-Gab(Before Gab), A-Gab(After Gab)을 표시하는데, 그 계산 방식은 아래와 같습니다.
위와 같이 SQL쿼리의 수행시간이 오래 걸리면(WAS Agent에서 설정), 해당 쿼리를 실행한 애플리케이션의 위치를 파악할 수 있도록 Stack Trace를 출력합니다.
HTTP Status Code 40x, 50x오류 정보를 모두 수집합니다. 500 오류 중에서 JSP 컴파일 오류와 같은 오류는 아래와 같이 오류 메시지를 수집하여 표시합니다.
장애에 따른 T-Map의 모양(패턴)
Full GC
빨간 상자 우측에 나와 있는 너무 많은 fetch건수를 보면 약 10만건에 가까운 fetch건수를 jvm heap에 담다보니 fullgc가 일어나 사용자 입장에서는 서비스가 멈춘 것 같이 느끼게 되는 상황입니다.
Full GC가 일어나면 위 T-Map 패턴처럼 서비스가 멈춰 텀이 생기게 됩니다.
Server Hang
위 상황은 스레드가 pending상태에 걸려있는 스레드덤프 화면입니다. 좌측 상단을 보면 250개의 스레드가 빨갛게 쌓여있는 것을 볼 수 있습니다. 이 경우는 pool의 타임아웃 설정이 되어있지 않아 서버 입장에서 무기한 대기하는 상황입니다.
T-Map에서 보면 전체 스레드가 팬딩이 되어 Y축에 해당하는 응답시간이 계속 늘어나게 되는 패턴을 확인할 수 있습니다.
Runtime Exception
빨간 상자에 있는 화면을 보면 102번째 라인에서 jsp구문 오류가 일어난 것을 확인할 수 있습니다.
이런 특정 jsp를 호출하게 되면 구문 오류가 검출되고 낮은 응답시간으로 500에러가 발생하게 됩니다.
Runtime Exception은 특정 jsp를 호출하는 URL이 요청을 받고 짧은 응답시간으로 에러를 뱉기 때문에 T-Map에서 보면 아래 빨간 점(에러들)이 쌓이는 패턴을 볼 수 있습니다.
ChatGPT 장애로 본 쿠버네티스 모니터링의 필요성
/in APM, Kubernetes/by 오픈마루 마케팅1오픈마루, 일본에서 “MSA 호출 관계 추적” 관련 특허 등록
/in APM, OPENMARU/by 오픈마루 마케팅1브로드컴 VM웨어 인수에 따른 고객의 우려
/in APM, OPENMARU/by 오픈마루 마케팅2