← 블로그 목록
작성일: 2026-05-16 AWSALB장애 분석

AWS ALB 액세스 로그 분석으로 서비스 장애 원인 파악하기

AWS Application Load Balancer(ALB)는 모든 요청을 S3 버킷에 상세하게 기록합니다. 서비스 장애나 성능 저하가 발생했을 때, ALB 로그는 언제, 어떤 경로에서, 어떤 응답이 반환됐는지를 정확하게 알려주는 1차 진단 자료가 됩니다.


ALB 로그 활성화

ALB 로그는 기본적으로 비활성화되어 있습니다.

  1. AWS 콘솔 → EC2 → Load Balancers → 해당 ALB 선택
  2. Attributes 탭 → Access logs → Enable
  3. S3 버킷과 프리픽스 설정

핵심 필드 이해


장애 유형별 로그 패턴

1. 백엔드 서버 다운 (503 Service Unavailable)

`` ... 0.000 -1 -1 -1 503 - ... "-" ... `

target_processing_time = -1, target_status_code = - 는 ALB가 백엔드 서버에 연결 자체를 못 했다는 의미입니다.

원인:

  • EC2 인스턴스 비정상 종료
  • 헬스 체크 실패로 모든 타깃 비활성화
  • 보안 그룹에서 ALB → 타깃 포트 차단

2. 앱 서버 타임아웃 (504 Gateway Timeout)

` ... 0.001 60.001 0.000 504 504 ... `

target_processing_time = 60.001 — 백엔드가 60초 동안 응답하지 않아 타임아웃.

원인:

  • DB 쿼리 무한 대기
  • 외부 API 호출 타임아웃
  • 스레드 풀 고갈 (Thread Pool Exhaustion)

3. 클라이언트 측 연결 끊김 (408/460)

` ... -1 -1 -1 408 - ... `

request_processing_time = -1 은 클라이언트가 요청을 완전히 보내기 전에 연결을 끊은 것입니다.


S3에서 로그 분석하기

AWS CLI로 로그 다운로드

`bash aws s3 cp s3://my-alb-logs/AWSLogs/123456789/elasticloadbalancing/us-east-1/2024/10/10/ . --recursive `

5xx 에러만 추출

`bash awk '$9 ~ /^5/ || $10 ~ /^5/' *.log | head -50 `

타임아웃 집중 시간대 파악

`bash awk '$9 == "504"' *.log | awk '{print $2}' | cut -dT -f2 | cut -d: -f1-2 | sort | uniq -c `

특정 백엔드 인스턴스만 오류 내는지 확인

`bash awk '$9 ~ /^5/' *.log | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn `

특정 IP(인스턴스)에 5xx가 집중되면 해당 서버만 문제 있는 것입니다.


ALB 상태코드 vs 백엔드 상태코드 불일치

필드의미장애 진단 활용
---------------------------
elb_status_codeALB가 클라이언트에 반환한 상태코드5xx → ALB 자체 문제
target_status_code백엔드 서버 응답 코드5xx → 앱 서버 문제
request_processing_timeALB 처리 시간 (초)-1 → 연결 실패
target_processing_time백엔드 처리 시간높음 → 앱 느림
target_ip요청이 전달된 EC2/컨테이너 IP특정 인스턴스 문제 분리
ALB 코드백엔드 코드의미
--------------------------
200200정상
502-백엔드 응답 불가 (연결 실패)
503-헬스 체크 실패, 타깃 없음
504-백엔드 타임아웃
200500ALB는 응답했지만 앱 오류

Amazon Athena로 대용량 로그 쿼리

`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_codetarget_status_code의 조합으로 문제가 ALB에 있는지, 앱 서버에 있는지, 클라이언트에 있는지를 구분할 수 있습니다. target_processing_time = -1`은 백엔드 연결 실패를, 높은 처리 시간은 앱 병목을 나타냅니다.