XLOG 프로파일 분석
XLOG 프로파일 분석은 트랜잭션 내부의 실행 경로를 단계별로 추적하는 핵심 진단 도구입니다. XLOG 차트에서 영역을 드래그하면 해당 범위의 트랜잭션 목록과 각 트랜잭션의 프로파일 스텝(SQL, 메서드, 외부 호출, 스레드 덤프 등)을 상세하게 확인할 수 있습니다.
1. 페이지 개요
1.1 기능 설명
| 기능 | 설명 |
|---|---|
| 드래그 영역 선택 | XLOG 차트에서 마우스 드래그로 시간/응답시간 범위를 선택하여 트랜잭션 필터링 |
| 트랜잭션 목록 | 선택 영역 내 트랜잭션을 응답시간, SQL 시간, 외부 호출 시간 등과 함께 표시 |
| 프로파일 Overview | 트랜잭션의 전체 요약 정보 (서비스명, 응답시간, 에러 여부 등, 접기/펼치기 지원) |
| 스텝별 실행 추적 | 메서드 호출, SQL 실행, 외부 호출, 메시지 전송 등 단계별 실행 경로 표시 |
| Gap Time 타임라인 | 각 스텝 간의 시간 소비를 가로 막대 차트로 시각화 |
| 스텝 상세 조회 | 개별 스텝 클릭 시 SQL 쿼리, 바인드 변수, Lock 정보, 스레드 덤프 등 상세 확인 |
| 포스트잇 탭 | 팝업 우측 세로 탭 메뉴 (추가 분석 기능) |
| 교차 트랜잭션 이동 | 스텝 내 TX 링크 클릭으로 연관 트랜잭션 프로파일로 바로 이동 |
| 분산 추적 태그 | ZipkinTags를 통한 분산 추적 정보 표시 |
1.2 접근 경로
접근 방법: XLOG 페이지 또는 대시보드의 XLOG 차트에서 영역 드래그
프로파일 분석은 별도 메뉴가 아닌, XLOG 차트 위에서 마우스를 드래그하여 팝업창으로 열립니다. XLOG 페이지(대시보드 > 모니터링 > XLOG)와 대시보드의 XLOG 위젯 모두에서 접근할 수 있습니다.
1.3 용어 안내
| 용어 | 설명 |
|---|---|
| XLOG | 트랜잭션 로그를 분산형 차트(X: 시간, Y: 응답시간)로 표현한 것입니다 |
| 프로파일 | 하나의 트랜잭션이 실행되는 동안의 내부 단계별 기록입니다 |
| 스텝 (Step) | 프로파일을 구성하는 각 단계입니다 (SQL 실행, 메서드 호출, 외부 호출 등) |
| Gap Time | 이전 스텝이 끝난 후 다음 스텝이 시작되기까지의 대기 시간입니다 |
| 경과 시간 (elapsed) | 각 스텝이 실행에 소비한 시간입니다 |
| 누적 시간 | 트랜잭션 시작부터 현재 스텝까지의 총 경과 시간입니다 |
| CPU_T | 트랜잭션 시작부터 현재 스텝까지 누적된 CPU 소비 시간입니다 |
| txLink | 연관 트랜잭션으로 이동할 수 있는 교차 트랜잭션 링크입니다 |
2. 화면 구성
2.1 주요 영역
| 영역 | 설명 |
|---|---|
| 팝업 좌측 상단 | ServiceSelector — 서비스(오브젝트) 셀렉터 |
| 왼쪽 패널 | 드래그로 선택된 트랜잭션 목록 (데이터 그리드) |
| 오른쪽 패널 상단 | 프로파일 Overview (트랜잭션 요약 정보, 접기/펼치기) |
| 오른쪽 패널 중단 | Gap Time 타임라인 차트 |
| 오른쪽 패널 하단 | 프로파일 스텝 목록 (스크롤 가능) |
| 팝업 우측 세로 탭 | 포스트잇 탭(StickyTabContainer) — 추가 분석 탭 메뉴 |
2.2 UI 구성도
2.3 전체 화면

3. XLOG 차트에서 프로파일 열기
3.1 드래그 선택 방법
- XLOG 차트 위에서 마우스를 누릅니다 (드래그 시작).
- 원하는 영역까지 마우스를 끌어갑니다. 반투명 파란색 선택 박스가 표시됩니다.
- 마우스를 놓으면 선택 영역 내의 트랜잭션이 필터링되어 프로파일 팝업창이 열립니다.
XLOG 차트에서 점(도트) 하나하나가 개별 트랜잭션입니다. Y축(세로)이 높을수록 응답이 느린 트랜잭션이므로, 위쪽 영역을 드래그하면 느린 트랜잭션만 필터링할 수 있습니다.
3.2 Y축 기준 선택
XLOG 차트의 Y축 기준을 변경하면 다른 관점에서 트랜잭션을 분석할 수 있습니다.
| Y축 기준 | 설명 | 사용 시점 |
|---|---|---|
| 응답 시간 (elapsed) | 전체 응답 시간 기준 (기본값) | 전반적인 성능 분석 |
| SQL 시간 (sqlTime) | SQL 실행 시간 기준 | 데이터베이스 병목 분석 |
| 외부 호출 시간 (apicallTime) | HTTP 외부 호출 시간 기준 | 외부 서비스 병목 분석 |
3.3 그룹 필터 연동
XLOG 페이지의 그룹핑 탭에서 특정 항목을 클릭하면 해당 그룹만 하이라이트됩니다. 이 상태에서 드래그하면 하이라이트된 트랜잭션만 필터링됩니다.
| 그룹 기준 | 필터 대상 | 예시 |
|---|---|---|
| 서비스 | 특정 URL/서비스 경로 | /api/users 호출만 필터링 |
| IP 주소 | 특정 클라이언트 IP | 192.168.1.100에서의 요청만 필터링 |
| 사용자 에이전트 | 특정 브라우저/OS | Chrome 브라우저 요청만 필터링 |
| 리퍼러 | 특정 이전 페이지 | 특정 페이지에서 유입된 요청만 필터링 |
4. 왼쪽 패널 — 트랜잭션 목록
4.1 ServiceSelector
팝업 좌측 상단에 ServiceSelector가 표시됩니다. 분석할 서비스(오브젝트)를 전환하면 해당 서비스의 트랜잭션 목록이 갱신됩니다.
4.2 데이터 그리드 컬럼
드래그로 선택된 트랜잭션이 아래 컬럼과 함께 표시됩니다.
| 컬럼 | 설명 | 정렬 |
|---|---|---|
| 객체명 | 서비스/에이전트 이름 | 가능 |
| 종료 시간 | 트랜잭션 종료 시각 | 가능 |
| IP 주소 | 클라이언트 IP | 가능 |
| 서비스 | 요청 URL/경로 | - |
| 응답 시간 | 전체 응답 시간 (ms) | 가능 |
| API 호출 시간 | 외부 호출에 소비된 시간 (ms) | 가능 |
| API 호출 수 | 외부 호출 횟수 | 가능 |
| SQL 시간 | SQL 실행에 소비된 시간 (ms) | 가능 |
| SQL 수 | SQL 실행 횟수 | 가능 |
| CPU | CPU 소비 시간 (ms) | 가능 |
| 메모리 | 할당된 메모리 (KB) | 가능 |
4.3 트랜잭션 선택
- 원하는 트랜잭션 행을 클릭하면 오른쪽 패널에 해당 트랜잭션의 프로파일이 표시됩니다.
- 한 번에 1개 트랜잭션만 선택 가능합니다.
응답 시간 컬럼으로 내림차순 정렬하면 가장 느린 트랜잭션을 먼저 분석할 수 있습니다.
5. 오른쪽 패널 — 프로파일 상세
5.1 프로파일 Overview
선택한 트랜잭션의 전체 요약 정보가 표시됩니다.
| 항목 | 설명 |
|---|---|
| 서비스명 | 모니터링 대상 서버/에이전트 이름 |
| 총 응답 시간 | 트랜잭션 전체 응답 시간 |
| 시작 시간 | 트랜잭션 시작 시각 |
| 종료 시간 | 트랜잭션 종료 시각 |
| 에러 메시지 | 에러 발생 시 빨간색으로 강조 표시 |
| 스레드 덤프 여부 | 스레드 덤프가 캡처된 경우 표시 |
| XLOG 타입 | 트랜잭션 유형 |
| login | 트랜잭션을 발생시킨 사용자 ID (에이전트에서 수집한 경우) |
| text1 ~ text5 | 에이전트에서 커스텀으로 수집한 텍스트 필드 (최대 5개) |
Overview 내용이 180px을 초과하면 자동으로 접힘 상태로 표시됩니다. 접기/펼치기 버튼을 클릭하여 전체 내용을 확인하십시오.
5.2 Gap Time 타임라인
각 스텝의 시간 소비를 가로 막대 차트로 시각화합니다.
| 범례 | 색상 | 의미 |
|---|---|---|
| 누적 시간 | - | 트랜잭션 시작부터 현재 스텝까지의 총 시간 |
| Gap Time | - | 이전 스텝 종료 ~ 현재 스텝 시작 사이의 대기 시간 |
| 경과 시간 | - | 현재 스텝 자체의 실행 시간 |
- 타임라인의 특정 스텝을 클릭하면 아래 스텝 목록에서 해당 위치로 자동 스크롤됩니다.
5.3 프로파일 스텝 목록
트랜잭션의 모든 실행 단계가 순서대로 나열됩니다.
각 스텝 행의 구성:
[누적시간 | 갭시간 | 경과시간] | [스텝 유형 태그] [메인 값 (메서드명/SQL/URL)]
| ████████████ (경과시간 비율 막대)
elapsed 레벨별 색상 구분:
| 경과 시간 | 색상 | 의미 |
|---|---|---|
| 0 ~ 100ms | 초록색 | 빠른 응답 |
| 100 ~ 500ms | 노란색 | 보통 응답 |
| 500ms 이상 | 빨간색 | 느린 응답 (병목 가능성) |
스텝 유형별 색상:
| 색상 | 스텝 유형 | 설명 |
|---|---|---|
| 파란색 | METHOD | 메서드(함수) 실행 |
| 주황색 | SQL | 데이터베이스 쿼리 실행 |
| 보라색 | API CALL | 외부 HTTP 호출 |
| 빨간색 | ERROR | 에러 발생 |
| 회색 | MSG / DUMP / 기타 | 메시지, 스레드 덤프, 기타 |
- 스텝 행을 클릭하면 스텝 상세 팝업이 표시됩니다.
- 들여쓰기(indent)로 호출 깊이를 표현합니다.
5.4 포스트잇 탭(StickyTabContainer)
프로파일 팝업 우측에 세로 탭 메뉴가 표시됩니다. 탭을 클릭하면 해당 탭의 추가 분석 정보가 표시됩니다.
포스트잇 탭을 통해 프로파일 주요 정보 외에 분산 추적, 커스텀 데이터 등 추가 컨텍스트를 확인할 수 있습니다.
5.5 ZipkinTags — 분산 추적 태그
분산 트레이싱(Zipkin/OpenTelemetry 호환) 데이터가 수집된 경우, ZipkinTags 섹션에서 분산 추적 태그 목록을 확인할 수 있습니다.
| 항목 | 설명 |
|---|---|
| 태그 키 | 분산 추적 시스템이 기록한 속성 이름 |
| 태그 값 | 해당 속성의 값 (서비스명, 요청 URL, 상태 코드 등) |
6. 프로파일 스텝 유형
6.1 주요 스텝 유형
| 유형 | 표시명 | 설명 | 활용 |
|---|---|---|---|
| METHOD | METHOD | Java 메서드 실행 기록 | 병목 메서드 식별 |
| SQL | SQL | 데이터베이스 쿼리 실행 | 느린 쿼리 분석 |
| API CALL | API CALL | 외부 HTTP/REST 호출 | 외부 서비스 지연 분석 |
| MESSAGE | MSG | 로그/메시지 기록 | 실행 흐름 추적 |
| SOCKET | SOCKET | 소켓 통신 | 네트워크 통신 분석 |
| DUMP | DUMP | 스레드 덤프 캡처 | 데드락/Lock 분석 |
| THREAD SUBMIT | THREAD SUBMIT | 비동기 스레드 작업 제출 | 비동기 처리 추적 |
| SPAN | SPAN | 분산 추적 Span | 마이크로서비스 간 추적 |
6.2 프로파일 메시지 종류 상세
| 스텝 유형 | 세부 종류 | 설명 |
|---|---|---|
| SQL | EXECUTE | SQL 쿼리 실행 |
| SQL | FETCH | SQL 결과 페치(행 데이터 가져오기) |
| External Call | API CALL | HTTP/HTTPS 외부 서비스 호출 |
| Method | PARAM | 메서드 진입 시 파라미터 기록 |
| Method | RETURN | 메서드 반환 시 반환값 기록 |
| Socket | IN | 소켓 수신 데이터 |
| Socket | OUT | 소켓 송신 데이터 |
| File | R | 파일 읽기 |
| File | W | 파일 쓰기 |
| Thread | ASYNC | 비동기 스레드 제출 |
6.3 요약 스텝 유형
다수의 동일 스텝이 있으면 요약 형태로 표시됩니다.
| 유형 | 표시명 | 설명 |
|---|---|---|
| METHOD SUM | METHOD SUM | 동일 메서드의 호출 횟수 및 총 시간 요약 |
| SQL SUM | SQL SUM | SQL 실행 횟수 및 총 시간 요약 |
| API CALL SUM | API CALL SUM | 외부 호출 횟수 및 총 시간 요약 |
| MESSAGE SUM | MESSAGE SUM | 메시지 횟수 요약 |
| SOCKET SUM | SOCKET SUM | 소켓 통신 횟수 요약 |
7. 스텝 상세 팝업
스텝 행을 클릭하면 상세 정보 팝업이 표시됩니다. 스텝 유형에 따라 표시 내용이 달라집니다.
7.1 공통 정보
| 항목 | 설명 |
|---|---|
| 시작 시간 | 스텝 실행 시작 시각 |
| Gap Time | 이전 스텝 이후 대기 시간 |
| 경과 시간 | 스텝 실행 시간 |
| 에러 | 에러 발생 시 메시지 표시 (빨간색) |
7.2 SQL 스텝 상세
| 항목 | 설명 |
|---|---|
| SQL 쿼리 | 실행된 SQL 전문 |
| 바인드 변수 | SQL에 전달된 파라미터 값 (타입: 값 형식) |
| 실행 시간 | SQL 실행에 소비된 시간 |
SQL 쿼리와 바인드 변수를 함께 확인하여 DBA에게 전달하면 실행 계획 분석이 가능합니다. 느린 SQL의 경우 인덱스 누락이나 풀 스캔이 원인인 경우가 많습니다.
**SQL 조회 권한(canViewSql)**이 없는 경우 SQL 쿼리와 바인드 변수가 ***로 마스킹 처리되어 표시됩니다. 권한이 필요하면 관리자에게 문의하십시오.
7.3 DUMP 스텝 상세
스레드 덤프가 캡처된 경우 다음 정보가 표시됩니다.
| 항목 | 설명 |
|---|---|
| 스레드 덤프 | 스레드 스택 트레이스 |
| Lock Owner ID | Lock을 점유 중인 스레드 ID |
| Lock Owner Name | Lock 소유주 스레드 이름 |
| Lock Name | Lock 객체 이름 |
DUMP 스텝은 트랜잭션 실행 중 자동으로 캡처된 스레드 덤프입니다. 응답 시간이 설정된 임계값을 초과하면 자동으로 캡처됩니다. Lock 정보를 통해 데드락 상황을 진단할 수 있습니다.
7.4 교차 트랜잭션(TX Link) 이동
스텝 목록 중 TX 링크 아이콘이 표시된 스텝이 있습니다. 이를 클릭하면 연관된 다른 트랜잭션의 프로파일로 바로 이동할 수 있습니다.
| 동작 | 설명 |
|---|---|
| TX 링크 아이콘 클릭 | 해당 스텝에서 호출한 연관 트랜잭션의 프로파일 팝업으로 이동 |
| 뒤로 가기 | 팝업 내 뒤로 가기 버튼으로 이전 트랜잭션으로 돌아옵니다 |
7.5 스냅샷 정보
일부 스텝에는 해당 시점의 시스템 상태 스냅샷이 포함됩니다. CPU, 메모리, 스레드 정보 등을 확인할 수 있습니다.
8. 프로파일 탭별 읽는 법
FlowKat 프로파일은 다양한 관점으로 트랜잭션을 분석할 수 있도록 여러 탭을 제공합니다. 각 탭의 올바른 해석 방법을 숙지하면 병목 원인을 더 빠르게 파악할 수 있습니다.
8.1 타임라인(Timeline) 탭 읽는 법
- X축: 트랜잭션 시작 시각 ~ 종료 시각
- 바 길이: 각 스텝의 소요 시간 (길수록 오래 걸림)
- 분석 포인트: 가장 긴 바를 찾으십시오. 그 스텝이 전체 응답 시간의 주요 병목입니다.
- Gap: 바와 바 사이의 빈 공간이 Gap Time입니다. Gap이 크면 대기(잠금, GC, 스케줄링 지연) 가능성이 있습니다.
8.2 호출 트리(Call Tree) 탭 읽는 법
- 트리 구조: 들여쓰기로 호출 깊이를 표현합니다. 부모 노드 = 상위 메서드, 자식 노드 = 그 안에서 호출된 메서드
- 부모 노드 응답 시간: 부모 노드의 경과 시간은 하위 자식 노드 시간의 합보다 크거나 같습니다.
- 분석 포인트: 깊이가 깊어질수록 반복 호출이나 재귀 가능성이 높습니다. 동일 SQL이 수십 번 반복되는 경우 N+1 문제를 의심하십시오.
8.3 텍스트(Text) 스텝 목록 읽는 법
스텝 목록의 각 행에 포함된 시간 값의 의미는 다음과 같습니다.
| 컬럼 | 설명 |
|---|---|
| 누적 시간 | 트랜잭션 시작부터 이 스텝까지의 경과 시간 (절대적 위치) |
| GAP | 이전 스텝 종료 ~ 이 스텝 시작 사이의 대기 시간 |
| 경과 시간 (elapsed) | 이 스텝 자체의 실행 시간 |
| CPU_T | 트랜잭션 시작부터 이 스텝까지의 누적 CPU 소비 시간 |
GAP 해석 예시:
- GAP 값이 수십 ms 이상이면 이전 스텝 이후 CPU가 다른 작업(GC, 스레드 스케줄링, Lock 대기)을 처리하고 있었을 가능성이 높습니다.
9. 고급 활용: 트랜잭션 분석 시나리오
9.1 시나리오 1: 느린 트랜잭션의 병목 구간 식별
- XLOG 차트에서 Y축 상단(응답 시간이 긴 영역) 을 드래그합니다.
- 트랜잭션 목록에서 응답 시간이 가장 긴 행을 선택합니다.
- 프로파일 스텝 목록에서 경과 시간이 큰 스텝을 찾습니다.
- 해당 스텝의 유형에 따라 원인을 분석합니다:
- SQL (주황색): 느린 쿼리 → SQL 상세에서 쿼리 확인
- API CALL (보라색): 외부 서비스 지연 → 호출 대상 확인
- METHOD (파란색): 코드 로직 병목 → 메서드 이름 확인
9.2 시나리오 2: SQL 성능 분석
- XLOG 차트의 Y축 기준을 "SQL 시간"으로 변경합니다.
- 상단 영역을 드래그하여 SQL 실행이 오래 걸린 트랜잭션을 필터링합니다.
- 프로파일에서 SQL 스텝(주황색) 을 클릭합니다.
- 상세 팝업에서 SQL 쿼리와 바인드 변수를 확인합니다.
- 쿼리를 복사하여 DBA에게 전달합니다.
9.3 시나리오 3: Gap Time으로 대기 시간 분석
- 프로파일 스텝에서 Gap Time이 큰 스텝을 찾습니다.
- Gap Time이 크다는 것은 이전 스텝 종료 후 다음 스텝 시작까지 대기 시간이 길다는 의미입니다.
- 일반적인 원인:
- 스레드 스케줄링 대기: 서버 리소스 부족
- Lock 대기: 다른 트랜잭션이 자원을 점유 중
- GC(가비지 컬렉션): JVM 메모리 정리 중
9.4 시나리오 4: 에러 트랜잭션 분석
- XLOG 차트에서 에러 필터를 활성화합니다 (빨간색 점만 표시).
- 에러 트랜잭션 영역을 드래그합니다.
- 프로파일 Overview에서 에러 메시지를 확인합니다.
- 스텝 목록에서 빨간색(ERROR) 스텝을 찾아 클릭합니다.
- 상세 팝업에서 에러 원인을 확인합니다.
9.5 시나리오 5: 연관 트랜잭션 추적 (교차 트랜잭션)
- 프로파일 스텝 목록에서 TX 링크 아이콘이 표시된 스텝을 찾습니다.
- 아이콘을 클릭하면 연관 트랜잭션의 프로파일 팝업이 열립니다.
- 서비스 간 호출 체인을 추적하여 마이크로서비스 환경의 전체 트랜잭션 경로를 확인합니다.
9.6 시나리오 6: 특정 서비스의 트랜잭션만 분석
- XLOG 페이지의 그룹핑 탭에서 "서비스" 기준으로 이동합니다.
- 분석할 서비스(예:
/api/users)를 클릭하여 하이라이트합니다. - XLOG 차트에서 하이라이트된 점(도트)만 보이는 영역을 드래그합니다.
- 해당 서비스의 트랜잭션만 필터링되어 프로파일 팝업이 열립니다.
10. 권한별 UI 안내
일부 분석 기능은 역할(Role)에 따라 제한될 수 있습니다.
| 기능 | 필요 권한 | 권한 없을 때 |
|---|---|---|
| SQL 쿼리 및 바인드 변수 조회 | canViewSql | SQL 내용이 ***로 마스킹됩니다 |
| API 호출 상세 정보 조회 | canViewApi | API 호출 내용이 마스킹됩니다 |
| 라이선스 미보유 시 | 유효한 라이선스 | 스텝 상세 대신 LicenseNotice 화면이 표시됩니다 |
11. 문제 해결
11.1 자주 발생하는 문제
| 증상 | 원인 | 해결 방법 |
|---|---|---|
| 드래그해도 프로파일이 열리지 않음 | 선택 영역에 트랜잭션이 없음 | 도트가 있는 영역을 드래그하십시오 |
| 프로파일 스텝이 비어 있음 | 에이전트 설정에서 프로파일 수집이 비활성화됨 | 에이전트 프로파일 설정을 확인하십시오 |
| SQL 쿼리가 마스킹(***) 표시됨 | SQL 조회 권한(canViewSql) 없음 | 역할 설정에서 SQL 조회 권한을 확인하십시오 |
| API 호출 정보가 마스킹 표시됨 | API 조회 권한(canViewApi) 없음 | 역할 설정에서 API 조회 권한을 확인하십시오 |
| "선택한 트랜잭션 없음" 표시 | 행을 선택하지 않음 | 왼쪽 패널에서 트랜잭션 행을 클릭하십시오 |
| 스텝 상세가 표시되지 않음 | 라이선스 미보유 | 라이선스 상태를 확인하십시오 |
| login, text1~5 값이 없음 | 에이전트에서 해당 필드 미수집 | 에이전트의 커스텀 필드 수집 설정을 확인하십시오 |
| TX 링크가 표시되지 않음 | 해당 스텝에 교차 트랜잭션 없음 | TX 링크는 연관 트랜잭션이 있을 때만 표시됩니다 |
12. 관련 문서
- XLOG (트랜잭션 로그) — XLOG 페이지 기본 사용법 및 그룹핑
- 액티브 서비스 상세 조회 — 실시간 스레드 분석
- 성능 조회 — 성능 메트릭 시계열 분석
- 통합 대시보드 — XLOG 위젯