마이크로서비스 아키텍처 환경에서 API Gateway는 모든 외부 요청의 진입점 역할을 한다. 따라서 API Gateway 수준에서의 로깅(Log)과 모니터링(Monitoring)은 시스템의 전반적인 가시성을 확보하고, 장애를 빠르게 진단하는 데 매우 중요한 역할을 한다.
로깅(Logging)이란?
로깅은 사용자의 요청, 응답, 에러, 인증 정보 등의 실제 동작을 기록하는 행위이다.
로깅 항목 예시
- 요청 URL, HTTP 메서드
- 요청 시간, 응답 시간
- 응답 상태 코드
- 사용자 ID, IP 주소
- 라우팅된 마이크로서비스 이름
- 인증/인가 결과
- 오류 메시지
API Gateway에서 로깅의 중요성
| 항목 | 설명 |
| 트랜잭션 추적 | API 호출의 전체 경로를 추적하여 성능 병목 및 장애 원인을 파악 |
| 보안 감사 | 불법적인 접근 시도 및 보안 위협을 식별하고 대응 |
| 정책 위반 감시 | API 사용 제한 위반 기록 및 분석 |
| 사용 패턴 분석 | API 사용 통계로부터 비즈니스 인사이트 도출 |
API Gateway에서 로깅 방법
1️⃣ 액세스 로그
모든 인바운드 요청과 아웃바운드 응답에 대한 기본 정보를 기록한다.
주요 정보
- Timestamp: 요청이 처리된 날짜와 시간
- Client IP: 요청을 보낸 클라이언트의 IP 주소
- HTTP Method: 요청의 HTTP 메서드(GET, POST, PUT, DELETE 등)
- URL: 요청된 리소스의 URL
- HTTP Response Code: 요청에 대한 응답 코드 (예: 200, 400, 500 등)
- Response Time: 서버가 요청을 처리하고 응답을 완료하는 데 걸린 시간
- User-Agent: 요청을 보낸 클라이언트의 유저 에이전트 정보(브라우저, 운영체제 등)
예시 로그
[2025-04-15 15:43:10] GET /api/orders/123
Status: 200, IP: 192.168.1.23, ResponseTime: 48ms
활용 도구
- Nginx, Apache, Kong, Tyk
- Amazon API Gateway + CloudWatch
2️⃣ 에러 로그
오류 발생 시 원인을 파악하기 위한 로그이다.
주요 정보
- Timestamp: 에러가 발생한 날짜와 시간
- Error Level: 에러의 심각도를 나타내는 레벨 (예: ERROR, WARN, FATAL 등)
- Error Message: 에러 설명 또는 메시지
- Stack Trace: 에러가 발생한 시점의 호출 스택, 에러의 원인을 파악하는 데 유용
- Service Name / ID: 에러가 발생한 서비스 또는 컴포넌트의 이름 또는 식별자
- Additoinal Information: 요청 ID, 사용자 ID 등 에러 상황을 이해하는 데 도움이 되는 추가 정보
예시 로그
[2025-04-15 15:44:02] ERROR /api/orders/123
Exception: OrderNotFoundException
Stack: com.api.orders.OrderService.getOrder(OrderService.java:52)
활용 도구
- Sentry, Logstash, ELK Stash
3️⃣ 트랜잭션 추적 로그
분산 시스템에서 API 호출 간 흐름을 추적한다.
주요 정보
- Trace ID: 전체 트랜잭션을 식별하는 유니크한 식별자, 하나의 요청 경로를 따라가며 발생하는 모든 이벤트는 동일한 Trace ID 공유
- Span ID: 특정 서비스 호출 또는 작업 단위를 식별하는 식별자
- Operation Name: 수행된 작업 또는 호출된 서비스의 이름
- Start TIme / End Time: 각 Span의 시작 시간과 종료 시간
- Tags / Annotations: 요청의 메타데이터, HTTP Status, User ID 등 추가적인 정보를 제공
도구
- Zipkin
- Jaeger
예시 구조
TraceID: abc123
├── Span: API Gateway → Order Service
└── Span: Order Service → Payment Service
📌 예시: Spring Cloud Gateway 필터 기반 로깅 설정
@Component
public class LoggingFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
log.info("요청 정보: {} {}", request.getMethod(), request.getURI());
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
ServerHttpResponse response = exchange.getResponse();
log.info("응답 상태: {}", response.getStatusCode());
}));
}
}
💡 커스텀 GlobalFilter를 구현하여 모든 요청/응답에 대해 로깅을 수행할 수 있다.
모니터링(Monitoring)이란?
모니터링은 시스템의 성능 지표(Metrics)와 운영 상태를 실시간으로 수집 및 시각화하여 이상 징후를 탐지하고 알림을 제공하는 기능이다.
모니터링 주요 지표
- 요청 처리 시간 (Latency)
- 요청 성공/실패 비율
- 각 API별 트래픽 수치
- 서비스 응답 시간 평균값 및 최대값
- HTTP 에러 코드 비율 (4xx, 5xx)
API Gatewauy에서 모니터링의 중요성
| 항목 | 설명 |
| 성능 모니터링 | 응답 시간 및 처리량 분석으로 시스템 병목 개선 |
| 가용성 모니터링 | 서비스 다운텀 감지 및 헬스 체크로 신속 대응 |
| 트래픽 모니터링 | 트래픽 패턴 분석 및 이상 탐지 |
| 보안 모니터링 | 보안 위협 및 인증 실패 탐지 |
API Gateway에서 모니터링 방법
1️⃣ Health Check
API Gateway 및 백엔드 서비스의 가용성과 정상 작동 여부를 확인
목적
- 가용성 확인, 자동 복구 지원
방법
- /health, /status 등 API 호출
- Spring Boot Actuator, Kubernetes Probe, Consul 활용
2️⃣ 트래픽 모니터링
들어오는 요청의 양, 처리량, 응답 시간 등을 추적하여 시스템의 부하 상태를 이해
목적
- 처리량, 지연 시간 분석
- 이상 탐지 및 확장성 계획
도구
- Prometheus
- Grafana
- CloudWatch
3️⃣ 성능 모니터링
API 응답 시간, 데이터베이스 쿼리 성능 등을 모니터링하여 시스템의 성능 병목을 식별하고 개선
목적
- 응답 시간 최적화
- 병목 원인 파악
도구 (APM)
- 오픈소스: PinPoint, Scouter
- 상용: Datadog, New Relic
실전에서 자주 사용하는 로깅 & 모니터링 도구
| 도구 | 설명 |
| ELK Stack | Elasticsearch + Logstash + Kibana 로그 수집, 분석, 시각화 |
| Fluentd + Loki | 경량화된 로그 수집 파이프라인, Grafana Loki와 함께 사용 |
| Prometheus + Grafana | 메트릭 수집 및 시각화 |
| Zipkin / Jaeger | 분산 추적(Distributed Tracing) 도구 |
API Gateway에서 Prometheus + Grafana로 모니터링 구축하기
1️⃣ Spring Boot Acturator + Micrometer 설정
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
management:
endpoints:
web:
exposure:
include: prometheus
metrics:
export:
prometheus:
enabled: true
- /actuator/prometheus 엔드포인트에서 메트릭 수집 가능
2️⃣ Prometheus 설정 예시
scrape_configs:
- job_name: 'gateway'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['gateway-service:8080']
- 일정 주기로 gateway의 메트릭을 수집하여 저장
3️⃣ Grafana 대시보드 구성
- Prometheus를 데이터 소스로 연결
- 요청 지연 시간, 에러율, API별 트래픽 등 시각화
- 알람 설정 가능 (예: 응답 5xx 비율 > 5% 시 Slack 알림)
🚨 실전 팁: 로그 예외 / 보안 처리
• 개인정보(Personal Data) 포함 X
• 비밀번호, 토큰은 마스킹 처리
• 인증 실패, RateLimit 초과 요청 등 보안 이벤트도 로그로 기록
• 응답 시간 1초 이상이면 WARN 로그로 구분
'아키텍처 & 설계(Architecture & Design) > MSA' 카테고리의 다른 글
| [API Gateway] BFF 패턴 (0) | 2025.05.22 |
|---|---|
| [API Gateway] API Gateway에서 분산 로깅 및 추적 (0) | 2025.04.28 |
| [API Gateway] API Gateway에서의 트래픽 제어 (0) | 2025.04.08 |
| [API Gateway] API Gateway에서 인증과 인가 처리 방법 (0) | 2025.04.02 |
| [API Gateway] API Gateway 라우팅 (0) | 2025.04.01 |