배경
NLB에 연결된 여러 Target Group(7개 포트: 9443, 8443, 9090, 8090, 4012, 2053, 8083)으로 실제 트래픽이 가고 있는지 확인이 필요했습니다. 사용하지 않는 Target Group이 있다면 정리하고 싶었습니다.
단순한 요구사항이었는데, 생각보다 쉽지 않았습니다.
시도한 방법과 실패
| 방법 | 결과 | 원인 |
|---|---|---|
| CloudWatch 메트릭 (ProcessedBytes, NewFlowCount) | Target Group별 데이터 없음 | NLB는 TG별 트래픽 메트릭을 발행하지 않음 (LB 전체 레벨만 존재) |
| NLB 액세스 로그 (레거시 S3) | TLS 리스너만 지원 | 해당 NLB는 전체 TCP 리스너 (TLS 없음) |
| NLB 액세스 로그 (CloudWatch 통합) | 로그 미생성 | TCP 리스너는 NLB_ACCESS_LOGS 미지원 |
NLB는 ALB와 달리 Target Group별 트래픽 메트릭을 제공하지 않습니다. 액세스 로그도 TLS 리스너에서만 동작하며, TCP 리스너는 지원하지 않습니다.
시도했다가 사용하지 않게 된 리소스들은 정리했습니다:
| 리소스 | 조치 |
|---|---|
| NLB 액세스 로그 배포 (S3, CloudWatch) | 삭제 |
| S3 버킷 (NLB 액세스 로그용) | 삭제 |
| CloudWatch Log Group (NLB 액세스 로그용) | 삭제 |
해결: VPC Flow Logs → S3 → Athena
ENI 레벨에서 모든 TCP 트래픽을 기록하는 VPC Flow Logs를 활용했습니다.
NLB ENI → VPC Flow Logs → S3 (JSON 로그) → Athena (SQL 분석)
VPC Flow Logs 설정
| 항목 | 설정값 |
|---|---|
| 대상 ENI | NLB에 연결된 ENI |
| 트래픽 유형 | ALL (인바운드 + 아웃바운드) |
| 집계 간격 | 60초 |
| 로그 대상 | S3 |
Athena 분석 환경
기존에 CloudTrail 분석용으로 구축해둔 Athena 환경(cloudtrail-analysis Workgroup)을 그대로 활용했습니다. VPC Flow Logs 전용 테이블만 추가로 생성했습니다.
Partition Projection을 적용하여 날짜별 파티션이 자동으로 관리됩니다.
저장된 쿼리
| 쿼리명 | 용도 |
|---|---|
create-vpc-flow-logs-table | 테이블 생성 (최초 1회만 실행) |
nlb-[lb-name]-port-traffic | 확인 대상 7개 포트의 트래픽 요약 |
nlb-[lb-name]-all-ports | 전체 포트 중 트래픽 상위 20개 |
결과 컬럼
| 컬럼 | 설명 |
|---|---|
| listener_port | NLB 리스너 포트 (= Target Group 포트) |
| connection_count | 연결(Flow) 수 |
| total_packets | 총 패킷 수 |
| total_bytes / total_mb | 총 트래픽 |
| unique_sources | 고유 소스 IP 수 |
확인 결과
약 1~2시간 데이터 기준:
| 포트 | Target Group | 연결 수 | 트래픽 | 판정 |
|---|---|---|---|---|
| 8443 | COORD-HTTPS | 59,127 | 162.41 MB | ✅ 활발히 사용 중 |
| 9443 | HTTPS-SS | 22,827 | 54.38 MB | ✅ 활발히 사용 중 |
| 9090 | HTTP | 260 | 13.42 MB | ✅ 사용 중 (소량) |
| 8083 | ConnectOms | 342 | 1.46 MB | ✅ 사용 중 (소량) |
| 4012 | DB-SSH | 22 | 0.01 MB | ⚠️ 거의 없음 |
| 8090 | HTTP | 3 | 0.01 MB | ⚠️ 거의 없음 |
| 2053 | WORKER-SSH | 0 | 0 | ❌ 트래픽 없음 |
비용
| 항목 | 예상 비용 |
|---|---|
| VPC Flow Logs 수집 (S3) | $0.089/GB |
| S3 저장 | $0.025/GB/월 |
| Athena 쿼리 | 스캔 1TB당 $5 (소규모 쿼리 거의 무료) |
트래픽 확인 목적 달성 후 Flow Logs를 비활성화하면 비용을 절감할 수 있습니다.
정리
NLB의 TCP 리스너 환경에서는 CloudWatch 메트릭이나 액세스 로그로 Target Group별 트래픽을 확인할 수 없습니다. VPC Flow Logs가 유일한 방법이었고, 기존 Athena 환경을 활용하여 추가 인프라 없이 분석 환경을 구성할 수 있었습니다.
VPC Flow Logs는 NLB 운영에 영향을 주지 않으며(트래픽 경로에 포함되지 않음), 활성화 시점 이후 데이터만 조회 가능합니다.