시스템 아키텍처
FlowKat APM은 에이전트(수집), 서버(저장/분석), 대시보드(시각화) 세 계층으로 구성됩니다. 고객 서버에 설치된 경량 에이전트가 성능 데이터를 수집하고, FlowKat 서버가 저장, 분석, 시각화를 담당합니다.
전체 구조
계층별 구성
1계층: 에이전트 (데이터 수집)
에이전트는 모니터링 대상 서버에 설치되어 성능 데이터를 수집합니다. 바이트코드 계측(Bytecode Instrumentation) 방식으로 애플리케이션 코드를 수정하지 않고 트랜잭션 정보를 추출합니다.
| 에이전트 | 대상 환경 | 수집 데이터 |
|---|---|---|
| Java Agent | Java 8 이상 애플리케이션 | 트랜잭션, SQL, API 호출, 메서드 프로파일 |
| Java Agent (6/7) | Java 6/7 레거시 환경 | 트랜잭션 기본 데이터 |
| Host Agent | 물리 서버, VM | CPU, 메모리, 디스크 I/O, 네트워크 |
| Container Agent | Kubernetes, Docker | 컨테이너 리소스, Pod 상태 |
에이전트 특징:
- CPU 오버헤드 3% 미만의 경량 설계
- 수집 서버 연결 실패 시에도 애플리케이션 성능에 영향 없음
- 단일 TCP 연결로 데이터 전송 (V3 TLV 프로토콜)
- 자동 재연결 (지수 백오프 + 지터)
2계층: 서버 (저장/분석)
수집 서버는 에이전트로부터 데이터를 수신하여 저장하고, API 서버와 대시보드 서버가 분석 및 조회를 처리합니다.
| 서비스 | 역할 | 기술 스택 |
|---|---|---|
| 수집 서버 | 에이전트 데이터 수신, 메트릭 집계 저장 | Java 8, TCP/HTTP |
| API 서버 | 수집 데이터 REST API 제공 | Java 8, REST |
| 대시보드 서버 | 메타데이터 관리, 사용자 설정 | Java 8, Spring Boot, H2 DB |
| TX-Mining API | 트랜잭션 장기 보관 및 분석 | Spring Boot 3.x, JDK 17 |
| PostgreSQL | 트랜잭션 데이터 정규화 저장 | PostgreSQL 16, pgvector, pg_partman |
| Valkey | 실시간 집계 캐시 | Valkey 9.0 (Redis 호환) |
3계층: 대시보드 (시각화)
웹 기반 대시보드에서 수집된 데이터를 실시간으로 시각화합니다. Next.js 기반 SPA로 구축되어 있으며, WebSocket과 폴링 방식의 실시간 데이터 갱신을 지원합니다.
데이터 흐름
에이전트가 수집한 데이터는 다음 경로를 따라 사용자에게 전달됩니다.
데이터 유형별 처리
| 데이터 유형 | 수집 주기 | 저장 위치 | 용도 |
|---|---|---|---|
| 트랜잭션 (XLog) | 트랜잭션 완료 즉시 | 내장 DB + PostgreSQL | 실시간 추적, 장기 분석 |
| 메트릭 (Counter) | 5초 간격 | 내장 DB (5분 집계) | 대시보드 실시간 차트 |
| 텍스트 (SQL, 메서드명 등) | 최초 등장 시 1회 | 메모리 캐시 | 해시 기반 중복 제거 |
배포 방식
FlowKat은 Docker Compose 기반으로 배포됩니다. 릴리즈 번들 하나에 Docker 이미지, 에이전트, 설정 파일, 관리 스크립트가 모두 포함되어 있어, 폐쇄망 환경에서도 별도의 인터넷 연결 없이 설치할 수 있습니다.
지원 환경
| 환경 | 특징 | 주요 설정 |
|---|---|---|
| Production | 운영 환경, 호스트 네트워크 모드 | 최소 7GB 메모리, HTTPS 권장 |
| Aircap (폐쇄망) | 인터넷 미연결 환경 | 릴리즈 번들 오프라인 설치 |
| Development | 개발/테스트 환경 | 브릿지 네트워크, 최소 3GB 메모리 |
| Demo | 시연 환경 | 경량 설정, 최소 1.5GB 메모리 |
네트워크 요구사항
외부에 개방이 필요한 포트는 두 개뿐입니다.
| 포트 | 용도 | 방향 |
|---|---|---|
| 6100 (TCP) | 에이전트 데이터 수집 | 에이전트 서버 -> FlowKat 서버 |
| 6300 (TCP) | 웹 UI 접속 | 사용자 PC -> FlowKat 서버 |
나머지 서비스 간 통신은 Docker 내부 네트워크에서 처리되므로 추가 방화벽 설정이 필요 없습니다.
확장성
에이전트 확장
모니터링 대상 서버가 늘어나면 에이전트를 추가 설치합니다. 수집 서버 한 대로 수백 개 에이전트의 데이터를 처리할 수 있으며, 서버 자원에 따라 JVM 힙 설정을 조정하여 처리 용량을 늘릴 수 있습니다.
데이터 보존
트랜잭션 익스플로러(TX-Mining)의 PostgreSQL은 pg_partman을 이용한 날짜별 파티션 관리를 지원합니다. 보존 기간을 설정하면 오래된 데이터가 자동으로 정리되어, 스토리지를 효율적으로 사용하면서도 필요한 기간의 데이터를 보관할 수 있습니다.