본문으로 건너뛰기

부록 A: 메트릭 데이터 수집 및 저장 구조

개요

FlowKat은 3계층 아키텍처로 메트릭 데이터를 수집하고 저장합니다:

  1. 에이전트 계층: Host Agent, Java Agent에서 데이터 수집
  2. 전송 계층: V3 TCP(Netty) 프로토콜로 Collector Server로 전송
  3. 저장 계층: Collector Server에서 파일 DB로 저장

1. 에이전트 계층: 데이터 수집

1.1 @Counter 애노테이션 기반 수집 시스템

수집 관리자가 1초 간격으로 등록된 수집 작업을 반복 실행합니다.

수집된 메트릭은 **데이터 바구니(CounterBasket)**에 오브젝트별·시간별로 분류되어 저장됩니다.

분류 기준설명예시
오브젝트 이름모니터링 대상의 고유 이름was-prod-01, host-db-01
시간 타입수집 주기 단위실시간(1초), 5분 집계, 시간 집계
데이터 바구니 원리

같은 오브젝트의 같은 시간 타입 메트릭은 하나의 바구니에 모아서 한 번에 전송합니다. 이를 통해 네트워크 효율을 높이고 데이터 정합성을 유지합니다.

1.2 Host Agent: OS 레벨 메트릭 수집

Host Agent는 운영체제의 시스템 정보를 1초마다 읽어옵니다.

수집 항목 예시:

읽어오는 정보계산 방법저장되는 메트릭
CPU 유휴(Idle) 비율(1 - 유휴 비율) × 100CPU 사용률 (%)
메모리 사용 비율운영체제에서 직접 제공메모리 사용률 (%)

1.3 Java Agent: JVM 및 애플리케이션 메트릭

Java Agent는 JVM 내부의 관리 도구(MBean)를 통해 애플리케이션 통계를 읽습니다.

수집 항목:

읽어오는 정보저장되는 메트릭의미
총 처리 시간응답 시간트랜잭션 평균 처리 시간
처리 건수서비스 건수누적 처리 트랜잭션 수
초당 처리량 계산TPS(초당 트랜잭션 수)1초당 처리한 트랜잭션 수
에러 비율 계산에러율전체 요청 대비 에러 비율
실행 중 서비스 수액티브 서비스현재 처리 중인 트랜잭션 수

1.4 데이터 수집의 신뢰성

왜 1초마다 수집할까요?

FlowKat은 1초 간격으로 메트릭을 수집합니다. 이 간격은 시스템 모니터링에 충분합니다.

과학적 근거:

  • 표본화 이론: 1초 간격 샘플링은 대부분의 시스템 변화를 포착할 수 있습니다
  • 단조 증가 카운터: 데이터 순서가 바뀌어도 정확도가 보장됩니다
  • 포아송 과정: 트래픽 패턴을 통계적으로 모델링할 수 있습니다

상세 증명: 수학적으로 알고 싶으신가요? 부록 C: 수학적 기초를 확인하세요.


2. 트랜잭션 수집: XLOG 추적

2.1 ASM 바이트코드 수정 (Bytecode Instrumentation)

Java Agent는 애플리케이션 코드가 실행되기 전에 바이트코드 수정(Instrumentation) 기술로 추적 로직을 자동으로 주입합니다. 개발자가 소스 코드를 수정할 필요가 없습니다.

동작 원리:

단계설명
1. 패턴 매칭에이전트 설정에 지정된 패턴과 일치하는 클래스/메서드를 찾습니다
2. 시작 추적 주입메서드 진입 시 "트랜잭션 시작" 코드를 자동 삽입합니다
3. 종료 추적 주입메서드 반환/예외 시 "트랜잭션 종료" 코드를 자동 삽입합니다
4. 예외 안전예외가 발생해도 반드시 종료 추적이 실행되도록 보장합니다

2.2 HTTP 트랜잭션 추적 시작점

HTTP 요청이 수신되면 자동으로 트랜잭션 추적이 시작됩니다.

추출하는 요청 정보:

정보설명활용
HTTP 메서드GET, POST 등서비스 분류
URL 경로요청 경로서비스 식별
클라이언트 IP요청 발신 IP트래픽 분석
분산 추적 헤더글로벌/로컬 트랜잭션 ID서비스 간 호출 추적

2.3 SQL 실행 추적

SQL이 실행되면 자동으로 프로파일 스텝이 기록됩니다.

단계동작기록 내용
1현재 트랜잭션 컨텍스트 확인추적 중인 트랜잭션인지 확인
2SQL 프로파일 스텝 생성SQL 쿼리 텍스트, 시작 시간 기록
3프로파일 스택에 추가트랜잭션의 실행 경로에 SQL 단계 추가
4SQL 실행 완료 후경과 시간 기록, 에러 여부 확인
XLOG 프로파일과의 연결

여기서 기록된 SQL 스텝이 XLOG 프로파일 분석에서 주황색 SQL 스텝으로 표시됩니다. SQL 쿼리 텍스트와 바인드 변수를 상세 팝업에서 확인할 수 있습니다.

2.4 트레이스 컨텍스트 라이프사이클

트랜잭션 추적 컨텍스트는 스레드 전용 저장소에서 관리됩니다. 각 요청은 독립된 스레드에서 처리되므로, 동시에 여러 트랜잭션이 추적되어도 서로 간섭하지 않습니다.

XLOG에 포함되는 정보:

항목설명
글로벌 트랜잭션 ID서비스 간 호출을 연결하는 고유 식별자
트랜잭션 ID개별 트랜잭션 고유 식별자
서비스 해시요청 URL/경로의 빠른 검색용 해시
응답 시간트랜잭션 시작~종료 경과 시간 (ms)
프로파일SQL, 외부 호출, 메서드 등 단계별 실행 기록

3. 전송 계층: V3 TCP 데이터 전송

3.1 V3 TCP 전송 과정

FlowKat V3부터 에이전트-수집 서버 간 데이터 전송은 TCP 기반으로 전환되었습니다.

전송 실패 시: 연결 끊김 감지 → 로그 기록 → 자동 재연결 시도

V3 TCP 주요 특성:

  • 신뢰성: TCP 연결 기반 전송으로 패킷 손실 없음
  • 배치 전송: 최대 60KB 단위로 Pack을 묶어 전송 (net_tcp_batch_max_bytes)
  • 자동 재연결: 연결 끊김 시 지수 백오프(1초→30초→300초) 후 재연결
  • Keep-Alive: 5초 주기 하트비트로 연결 유지
V3 TCP 전환 배경

V2까지 사용되었던 UDP 전송은 V3에서 TCP로 전면 대체되었습니다. UDP의 패킷 손실 허용 설계가 대규모 환경에서 메트릭 유실을 유발하였고, TCP의 신뢰성 있는 배치 전송이 더 적합하다는 판단에 따른 전환입니다.

3.2 Pack 데이터 구조

Pack 타입설명주요 필드
Perf카운터 데이터성능 카운터objName, time, timeType, data (Map<String, Value>)
X로그 데이터트랜잭션 로그gxid, txid, service, xType, elapsed, profile
텍스트 데이터에러 로그type, hash, text, line
알림 데이터알림level, title, message
InteractionPerf카운터 데이터서비스간 호출 메트릭from, to, counter, value

4. 저장 계층: Collector Server

4.1 데이터 처리 파이프라인

4.2 Perf카운터 데이터 처리 흐름

성능 카운터 데이터는 시간 타입에 따라 다르게 처리됩니다.

실시간 데이터 처리 흐름:

시간 타입저장 위치처리 방식
실시간 (1초)파일 DB + 메모리 캐시플러그인 → 파일 → 캐시 → 알림
5분 이상 집계일일 집계 DB날짜(YYYYMMDD) + 시간(HHMM) 기준 저장

4.3 캐시 구조

메모리 캐시는 시간 타입별로 다른 보존 시간을 가집니다. 오래된 데이터는 자동으로 만료되어 메모리를 효율적으로 사용합니다.

시간 타입캐시 보존 시간설명
실시간10초가장 최근 데이터만 유지
1분 집계약 1분1분 단위 집계 데이터
5분 집계약 5분추세 분석용
10분 집계약 10분중기 추세 분석용
1시간 집계약 1시간장기 추세 분석용
캐시 만료 원리

보존 시간이 지나면 데이터는 메모리에서 자동으로 제거됩니다. 이미 파일 DB에 저장되어 있으므로 데이터가 유실되지 않습니다. 성능 조회 페이지에서 과거 데이터를 조회하면 파일 DB에서 읽어옵니다.


5. 파일 DB 저장 구조

5.1 RealtimeCounterDB

저장 경로: \{DB_ROOT\}/\{yyyymmdd\}/counter/

파일 구조:

realtime/
├── header # 메트릭 이름 → ID 매핑
├── data # 실제 메트릭 값 (바이너리)
└── index # (objHash, time, offset) 인덱스

저장 과정:

단계동작설명
1데이터 직렬화메트릭 데이터를 바이트로 변환
2데이터 파일 기록변환된 바이트를 데이터 파일에 순차 기록
3인덱스 파일 기록(오브젝트, 시간, 위치) 인덱스를 기록하여 빠른 검색 지원

5.2 DailyCounterDB (5분 집계)

저장 경로: \{DB_ROOT\}/\{yyyymmdd\}/counter/5m*

파일 구조:

5mdata # 5분 단위 집계 데이터
5mindex # (date, key) → offset 인덱스

6. 수집 메트릭 요약

6.1 Host Agent 메트릭 개요

Host Agent는 운영체제 수준의 리소스 사용량을 수집합니다.

CPU 메트릭:

  • CPU 사용률: 전체 CPU 활용도 (정상: 0~70%, 주의: 70~90%, 위험: 90%↑)
  • 시스템 CPU: 커널 모드 실행 비율 (I/O 대기 포함)
  • 사용자 CPU: 애플리케이션 실행 비율

메모리 메트릭:

  • 메모리 사용률: 실제 사용 중인 메모리 비율 (정상: 0~70%, 위험: 85%↑)
  • 전체 메모리: 물리 메모리 총량
  • 가용 메모리: 즉시 할당 가능한 메모리

스왑 메트릭:

  • 스왑 사용률: 가상 메모리 사용 비율 (>10%이면 물리 메모리 부족)

네트워크 메트릭:

  • 수신/송신 패킷: 초당 패킷 수 (pps)
  • 수신/송신 바이트: 초당 바이트 수 (Bps)

디스크 I/O 메트릭:

  • 디스크 읽기/쓰기: 초당 디스크 바이트 수

6.2 Java Agent 메트릭 개요

Java Agent는 JVM 및 애플리케이션 성능을 수집합니다.

Service 메트릭:

**TPS (Transactions Per Second)**란?

TPS는 1초당 처리한 트랜잭션 수를 나타냅니다.

TPS = 처리 건수 / 경과 시간 (초)

예시: 1000건을 10초 동안 처리
TPS = 1000 / 10 = 100

왜 중요할까요?

  • 시스템 처리량을 직접적으로 나타냅니다
  • 성능 병목을 조기에 발견할 수 있습니다
  • SLA (서비스 수준 협약) 준수 여부를 판단할 수 있습니다

응답 시간 vs 지연 시간:

  • 응답 시간 (Response Time): 요청부터 응답까지 전체 시간 (서버 처리 포함)
  • 지연 시간 (Latency): 요청이 처리되기까지 대기 시간 (네트워크 지연)
메트릭설명주의 기준
TPS초당 트랜잭션 처리량-
응답 시간평균 응답 시간 (ms)>SLA×1.5: 주의
P90 응답시간상위 10% 제외 응답 시간>SLA×2: 위험
서비스 건수총 처리 서비스 수-
에러율에러 응답 비율>1%: 주의
활성 서비스현재 처리 중인 서비스 수>스레드풀 크기: 대기

Heap 메트릭:

Heap이란 무엇인가요?

Heap은 JVM이 객체를 저장하는 동적 메모리 영역입니다.

JVM 메모리 구조:
┌─────────────────────────────────┐
│ Heap 영역 │
│ ┌─────────┐ ┌─────────┐ │
│ │ Young │ │ Old │ │
│ │ (Eden) │ │ │ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────┘

Young: 새로 생성된 객체 (자주 GC)
Old: 장기 생존 객체 (가끔 GC)

왜 모니터링해야 할까요?

  • 메모리 누수를 조기에 발견할 수 있습니다
  • GC 튜닝의 기준이 됩니다
  • OutOfMemoryError를 방지할 수 있습니다
메트릭설명주의 기준
Heap 사용량힙 영역 사용량 (MB)-
Heap 전체힙 최대 용량 (MB)-
Heap 사용률힙 사용 비율>85%: 위험

GC 메트릭:

**GC (Garbage Collection)**란?

GC는 더 이상 사용하지 않는 객체를 자동으로 회수하는 JVM의 기능입니다.

GC 동작:
1. 객체 생성 → Young 영역 할당
2. Young 영역 꽉 차면 Young GC 실행
3. 생존 객체 → Old 영역 이동
4. Old 영역 꽉 차면 Full GC 실행

왜 중요할까요?

  • GC 실행 중에는 애플리케이션이 멈춥니다 (Stop-The-World)
  • 과도한 GC는 응답 시간 저하를 유발합니다
  • GC 튜닝으로 성능을 개선할 수 있습니다
메트릭설명주의 기준
GC 횟수1분당 GC 실행 횟수>60: 과도 GC
GC 시간1분당 GC 총 시간(ms)>5000ms: STW 지연

Process 메트릭:

메트릭설명주의 기준
프로세스 CPUJVM 프로세스 CPU 사용률>80%: CPU 병목
파일 디스크립터열린 FD 수>ulimit-100: 부족

6.3 Interaction 메트릭 개요

Interaction 메트릭은 서비스 간 호출 추적합니다.

메트릭설명
API 송신외부 API 호출 건수
API 수신HTTP 요청 수신 건수
DB 호출DB 쿼리 실행 건수
Redis 호출Redis 명령어 실행 횟수
Kafka 호출Kafka Producer 전송 건수
RabbitMQ 호출RabbitMQ publish 건수
Elasticsearch 호출ES 요청 건수
MongoDB 호출MongoDB 명령 실행 건수

상세 분석: 부록 B: 메트릭 상세 분석를 확인하세요.


7. 데이터 갱신 주기 및 타입별 저장

7.1 TimeTypeEnum별 저장 전략

TimeTypeEnum코드저장 주기보존 기간저장 형식사용 목적
REALTIME11초10초 (메모리)RealtimeCounterDB실시간 모니터링
ONE_MIN21분1분 3초 (메모리)DailyCounterDB1분 집계
FIVE_MIN35분장기 (파일)DailyCounterDB5분 집계, 추세 분석
TEN_MIN410분장기 (파일)DailyCounterDB10분 집계
HOUR51시간장기 (파일)DailyCounterDB1시간 집계
DAY61일장기 (파일)DailyCounterDB일일 집계

7.2 메모리 vs 디스크 저장

저장 위치데이터 타입보존 정책
메모리 (CounterCache)REALTIME10초 후 자동 만료 (clearExpiredItems())
디스크 (RealtimeCounterDB)REALTIME날짜별로 보관, 자동 삭제 정책에 따름
디스크 (DailyCounterDB)FIVE_MIN+장기 보관, 압축 저장 가능

8. 성능 지표 기술용어

8.1 응답 시간 관련

용어정의APM 활용
Response Time요청부터 응답까지 전체 시간서버 처리 성능 측정
Latency요청이 처리되기까지 대기 시간네트워크 지연 측정
TPSTransactions Per Second시스템 처리량 측정
QPSQueries Per SecondDB 처리량 측정

8.2 Percentile (백분위수)

Percentile의미SLA 설정 기준
P50 (Median)중앙값평균 사용자 경험
P95상위 5%대부분 사용자 경험
P99상위 1%SLA 목표 설정 시 사용

8.3 JVM 전문 용어

용어정의엔지니어 점검 포인트
Stop-The-World (STW)GC 실행 중 모든 스레드 멈춤STW 시간 길면 사용자 응답 지연
Heap 영역Young/Old Gen으로 구분Old Gen이 계속 증가하면 메모리 누수

9. 실무자를 위한 분석 가이드

9.1 성능 이상 발생 시 확인 순서

1. 응답 시간 확인
→ P99가 급증했는가?

2. 리소스 확인
→ CPU/메모리/디스크/네트워크 중 병목 확인

3. JVM 확인 (Java)
→ Heap 사용량, GC 빈도, 스레드 수 확인

4. 트랜잭션 분석
→ 느린 요청의 경로 추적 (XLOG)

5. SQL 분석
→ Slow Query 확인

6. 외부 연동 확인
→ API 호출 시간 확인

9.2 정상 상태 기준값

항목정상주의위험
CPU 사용률0~70%70~90%90~100%
메모리 사용률0~70%70~85%85~100%
Swap 사용률0%0~10%10%↑
Heap 사용률0~70%70~85%85~100%
GC 시간/분0~5%5~10%10%↑
P99 응답 시간< SLASLA × 1.5SLA × 2↑

10. 아키텍처 구성 요소

10.1 에이전트 구성

구성 요소역할수집 대상
Host Agent 수집 스케줄러1초 간격으로 OS 메트릭 수집CPU, 메모리, 디스크, 네트워크
Host Agent 성능 수집기운영체제 리소스 상태 읽기시스템 전반
Java Agent 수집 스케줄러1초 간격으로 JVM 메트릭 수집TPS, 응답 시간, Heap
Java Agent 서비스 수집기애플리케이션 성능 통계 읽기트랜잭션 처리량
바이트코드 변환기트랜잭션 추적 코드 자동 주입HTTP 요청, SQL 실행
데이터 전송기V3 TCP로 수집 서버에 전송모든 수집 데이터

10.2 수집 서버 구성

구성 요소역할처리 대상
성능 카운터 처리기실시간/집계 카운터 분류 저장CPU, TPS 등 성능 지표
XLOG 처리기트랜잭션 로그 전처리 및 저장트랜잭션 실행 기록
실시간 저장소실시간 메트릭 파일 DB 저장1초 단위 데이터
일일 집계 저장소5분 이상 집계 데이터 저장장기 보관 데이터
메모리 캐시최근 데이터 빠른 조회 지원대시보드 실시간 표시용