2021년 첫 월간와탭으로 찾아뵙습니다.🤗 올해에도 와탭 서비스의 다양한 기능과 새로운 소식을 매 달 빠짐없이 전달해드리도록 하겠습니다! 이번 달에 소개드리고자하는 내용은 애플리케이션 모니터링의 Key 기능인 프로파일 분석 200% 활용하는 방법입니다.
트랜잭션 - 애플리케이션 모니터링에 있어 트랜잭션이란, 애플리케이션에 유입된 단일 요청(request)이 애플리케이션의 처리 과정을 거쳐 응답(response)이 반환되기까지의 과정을 일컫습니다.
트랜잭션 프로파일 - profile을 영어 사전에서 찾아보면 종단면으로 해석되네요. 단일 트랜잭션의 수행과정에서의 일련의 처리 과정을 트랜잭션 프로파일이라 합니다.
애플리케이션의 성능을 분석하는 방법은 2가지로 나누어 보고자 합니다. 집합 분석과 개별 분석으로요.
복수의 트랜잭션이 동시에 처리되어야 하는 애플리케이션에 있어 장애라 할만한 성능 지연은 일반적으로 단일 트랜잭션에서만 발생하지는 않습니다.
다수의 트랜잭션에서 동시 다발적으로 발생하는 성능 지연의 원인을 분석하기 위해서는 지연이 유발된 공통 요소를 찾아내야 합니다. 이런 경우에는 트랜잭션의 횡단 분석이 필요하겠습니다. 국내 벤더사가 제공하는 응답시간분포 기반 분석은 횡단 분석의 전형적인 예라고 할 수 있습니다.
이미 보신 분도 있겠지만, 횡단 분석 관련해서는 아래의 5분 세미나를 참고해 보시면 좋을 듯 싶습니다.
다수 트랜잭션을 대상으로 성능 지연을 유발한 공통의 지연 현상도 다시 보면 개별 트랜잭션의 지연원인을 찾아내어 공통의 원인을 찾아내는 방식으로 접근하는 것과 다를 바가 없습니다. 다만, 집합분석이 공통의 지연원인을 빠르게 찾아내기 위한 접근 방식을 활용한다는 점이 차이점이 되겠습니다.
그렇다면 개별 트랜잭션의 지연원인은 어떻게 찾아낼까요?
진입점은 역시 응답분포로 부터 시작합니다. 세로줄 현상에 대해서는 위 동영상에서도 설명합니다만, 개별 샘플링을 해도 집합분석과 유사한 결과가 도출될 확률이 높습니다. 공통의 지연 원인으로 유발되는 현상이니까요. 한편 개별분석의 대상은 세로축이 응답시간을 나타내므로 히트맵 상단에 위치한 트랜잭션이 관심사가 되겠습니다.
👉 주의점! 절대 광범위한 영역을 선택하지 마세요. 넓을 범위를 선택했다고 광범위한 데이터를 전부 조회해 오지는 않습니다. 핀 포인트로 개별 분석을 하기 위한 목적을 잊지 마세요.
하단에 트랜잭션 목록이 경과 시간이 길었던 건부터 표시됩니다. 본인 환경에서 보이지 않는 컬럼이 있다고요? "컬럼 선택" 버튼을 한 번 눌러보세요.
👉 아래 목록에서 A 마크는 Active Transaction, M 마크는 Multi Server Transaction 을 의미합니다. 본 문서에서는 분량상 액티브 트랜잭션 설명을 생략합니다.
MSA 아키텍처 구조를 가진 애플리케이션의 프로파일은 아래와 같이 표시되는 경우가 많습니다. 프로파일 내부에 "HTTP Call" 외에는 별다른 특이점이 보이지 않죠. 예시 프로파일에서는 소요시간이 매우 작게 나와 있기는 합니다만, 소요 시간이 길게 나타나거나 하는 경우 호출 관계도 궁금해 지게 됩니다.
이 때 상단의 "멀티 TX 차트" 버튼을 클릭해 보세요. 그리고 차트 내의 "타임바" 버튼도 클릭해 보세요. 애플리케이션 트랜잭션간의 호출 관계와, 각 트랜잭션의 시작, 경과 시간 비중을 카드의 배경으로 표시합니다.
화면이 좁다고요? "멀티 TX 차트" 우측에 표시된 사각형 모양 버튼을 눌러보세요. 팝업으로 크게 보여드립니다. 해당 트랜잭션이 와탭의 여러 프로젝트에 나뉘어 있는 애플리케이션 간의 호출이어도 조회가 가능합니다.
자 이제 MSA 아키텍처 구조의 애플리케이션 호출에서 어느 애플리케이션의 지연으로 전체 지연이 초래되었는지 찾는 것도 어렵지 않겠네요.
트랜잭션 지연의 원인이 내부에 있는 경우의 예시입니다. 상단의 "프로파일 다이어그램"에서 먼저 트랜잭션의 시작 ~ 종료 사이에 어떤 처리들이 있는지, 각 처리에 소요된 구간의 비중이 어떠한지를 스캔합니다.
본 예시의 경우 DB 커넥션 과정이 트랜잭션 처리 시간의 대부분을 차지하는 것으로 나타납니다.
👉 다이어그램의 빨간 원은 액티브스택이 확보된 지점을 의미합니다.
프로파일 내부의 지연 요소를 찾기 위해 소요 시간이 높게 나타난 스텝 정보를 확인합니다. 본 예시의 경우 MYSQL 데이터베이스 커넥션 과정에서 2,649ms의 시간이 소요되었음을 알 수 있습니다. 본 쿼리가 수행된 6번째 스텝의 2,646ms 시점까지 DB 접속이 불가했던 상황을 유추할 수 있고, 운 좋게도 5번째 스텝에 "액티브 스택"이 확보되어 있어 아주 정확한 정보를 얻을 수 있습니다. 액티브 스택을 통해 확인해 본 결과 DB 접속 커넥션풀에서 커넥션을 취득하는 과정에서의 지연을 확인할 수 있습니다. 본 케이스는 커넥션 풀 사이즈 부족 내지는 DB 커넥션 잠식을 1차 원인으로 유추할 수 있습니다. 근본 원인은 타 SQL 지연등이 근본 원인으로 밝혀질 가능성도 있습니다.
만일 SQL이 포함됨 스텝의 "소요" 시간이 길게 나타났을 경우, SQL 스텝을 클릭하면 SQL문과 파라메타를 확인하기 위한 팝업이 표시됩니다.
지연 SQL문과 파라메타를 확인 가능하다면, SQL 튜닝을 위한 정보는 다 습득된 것으로 봐야겠죠?
본 기능 활용을 위해서 2가지 전제사항을 필요로 합니다.
앞서 샘플링을 통해 분석하는과정을 들여다 본 바와 같이 여러 개의 트랜잭션을 분석하게 되는 경우, 특정 SQL 혹은 HTTP 호출이 통계적으로는 어떤 추이를 보였을지 역시 궁금증을 유발합니다.
샘플링해서 보고 있는 트랜잭션에서만 해당 현상이 불거진 것인지, 해당 문제가 발생한 타이밍은 갑작스러운 것인지, 혹은 일정 주기로 동일 이슈가 발생중에 있는 것인지도 문제 해결의 실마리가 될 수 있습니다.
그리하여, 프로파일에서도 통계 정보를 확인할 수 있는 기능이 추가되었습니다.
프로파일 최상단의 요약 정보 영역, 혹은 스텝 중 SQL과 HTTP 호출 내역 우측의 히스토그램 버튼을 클릭하면 프로파일 화면을 벗어나지 않고도 통계 정보를 확인할 수 있습니다.
다음과 같은 통계 팝업이 표시됩니다.
그 외에도 고객의 요구사항에 부응하고자 추가된 기능들이 있습니다. 간략하게 소개만 드릴께요.
이번 글에서는 프로파일 화면을 통한 분석에 필요한 기능에 대해서 안내드렸습니다.
더 궁금하시거나, 필요한 기능으로 제안 주실 내용이 있으신 경우 [email protected]로 메일 부탁드립니다.