AWS Application Load Balancer(ALB)는 모든 요청을 S3 버킷에 상세하게 기록합니다. 서비스 장애나 성능 저하가 발생했을 때, ALB 로그는 언제, 어떤 경로에서, 어떤 응답이 반환됐는지를 정확하게 알려주는 1차 진단 자료가 됩니다.
ALB 로그는 기본적으로 비활성화되어 있습니다.
| 필드 | 의미 | 장애 진단 활용 |
|---|---|---|
| ------ | ------ | --------------- |
elb_status_code | ALB가 클라이언트에 반환한 상태코드 | 5xx → ALB 자체 문제 |
target_status_code | 백엔드 서버 응답 코드 | 5xx → 앱 서버 문제 |
request_processing_time | ALB 처리 시간 (초) | -1 → 연결 실패 |
target_processing_time | 백엔드 처리 시간 | 높음 → 앱 느림 |
target_ip | 요청이 전달된 EC2/컨테이너 IP | 특정 인스턴스 문제 분리 |
| ALB 코드 | 백엔드 코드 | 의미 |
| --------- | ----------- | ------ |
| 200 | 200 | 정상 |
| 502 | - | 백엔드 응답 불가 (연결 실패) |
| 503 | - | 헬스 체크 실패, 타깃 없음 |
| 504 | - | 백엔드 타임아웃 |
| 200 | 500 | ALB는 응답했지만 앱 오류 |
`sql -- 5분 단위 5xx 에러 집계 SELECT date_trunc('minute', from_iso8601_timestamp(time)) AS minute, COUNT(*) AS errors FROM alb_logs WHERE elb_status_code >= 500 AND time >= '2024-10-10T00:00:00Z' GROUP BY 1 ORDER BY 1; `
`sql -- 타임아웃 집중 경로 파악 SELECT url_extract_path(request_url) AS path, AVG(target_processing_time) AS avg_time, MAX(target_processing_time) AS max_time, COUNT(*) AS requests FROM alb_logs WHERE target_processing_time > 5 GROUP BY 1 ORDER BY 2 DESC LIMIT 20; `
ALB 로그는 서비스 장애 진단의 시작점입니다. elb_status_code와 target_status_code의 조합으로 문제가 ALB에 있는지, 앱 서버에 있는지, 클라이언트에 있는지를 구분할 수 있습니다. target_processing_time = -1`은 백엔드 연결 실패를, 높은 처리 시간은 앱 병목을 나타냅니다.