Application Load Balancer에 대한 TargetResponseTime 지표 증가 문제를 해결하려면 어떻게 해야 하나요?
Application Load Balancer TargetResponseTime 지표가 증가하는 것을 확인했습니다. 이 문제를 해결하려면 어떻게 해야 합니까?
간략한 설명
TargetResponseTime은 요청이 로드 밸런서를 떠나는 시점과 대상에서 응답이 수신된 시점 사이 경과된 시간(초)입니다. 이는 Application Load Balancer 액세스 로그의 target_processing_time 필드와 같은 개념입니다.
TargetResponseTime이 증가하는 원인은 다음과 같습니다.
- 호스트의 상태가 좋지 않습니다.
- 백엔드 인스턴스가 너무 많은 요청에 과부하되었습니다.
- 백엔드 인스턴스의 CPU 사용률이 높습니다.
- 하나 이상의 대상에 결함이 있습니다.
- 백엔드 인스턴스에서 실행되는 웹 애플리케이션 종속성에 문제가 있습니다.
해결 방법
호스트의 상태가 좋지 않음
모든 Application Load Balancer 대상의 상태가 정상인지 확인합니다. Application Load Balancer 상태 확인이 실패하는 문제를 수정 및 해결하려면 어떻게 해야 하나요?를 참조하세요.
백엔드 인스턴스가 너무 많은 요청에 과부하됨
Application Load Balancer에 대한 Amazon CloudWatchRequestCount 및ActiveConnectionCount 수 지표의 합계 통계를 확인합니다. TargetResponseTime와 합계가 동시에 증가한다면 백엔드 인스턴스가 요청 로드로 인해 과부하가 걸린다는 뜻일 수 있습니다.
이 문제를 해결하려면 백엔드 인스턴스에 Auto Scaling 그룹을 구성하십시오. 튜토리얼: 조정 및 로드 밸런싱된 애플리케이션 설정을 참조하세요.
백엔드 인스턴스의 CPU 사용률 높음
백엔드 인스턴스의 CloudWatch CPUUtilization 지표를 점검합니다. CPU 사용률이 높거나 사용률이 급증하는 경우 인스턴스를 더 큰 인스턴스 유형으로 업그레이드하십시오.
하나 이상의 대상에 결함이 있음
대상에 결함이 있는 경우 다음 단계에 따라 문제를 해결하십시오.
1. 로드 밸런서에 대한 액세스 로깅을 활성화합니다.
2. TargetResponseTime이 높을 때 시간 범위에 대한 액세스 로그를 다운로드합니다. 예를 들어 AWS 명령줄 인터페이스(AWS CLI)를 사용하여 2022-02-01T03:00 에서 2022-02-01T03:35 사이의 액세스 로그를 다운로드하려면 다음과 같이 하십시오.
aws s3 cp s3://bucket-name[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/2022/02/01/ ./alblogs --recursive --exclude "*" --include "*20220201T03[0123]*"
참고: bucket-name을 버킷 이름으로 바꾸고, aws-account-id를 AWS 계정의 ID로, region을 계정이 위치한 AWS 리전으로 바꿉니다.
3. 명령줄 도구를 사용하여 액세스 로그를 분석합니다.
Elastic Load Balancing(ELB) 액세스 로그는.gzip 형식으로 압축됩니다.
선택적 단계: 로그를 추출하려면 다음 명령을 사용합니다.
$ gzip -dr ./alblogs
예제 시나리오
target_processing_time에 대한 최대 지연 시간을 가져오려면 다음 명령을 실행합니다.
압축된 로그 파일:
$zcat *.log.gz | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'
압축되지 않은 로그 파일:
$cat *.log | awk '$7 != -1' | awk 'BEGIN{a=0}{if ($7>0+a) a=$7} END{print a}'
또는
대상당 target_processing_time이 “>=N” 초인 요청 수를 계산하려면 요구 사항에 대한 초 수로 N을 수정합니다.
압축된 로그 파일에 대한 예제 명령:
$zcat *.log.gz | awk '{if($7 >= N){print $5}}' | sort | uniq -c
압축되지 않은 로그 파일에 대한 예제 명령:
$cat *.log | awk '{if($7 >= N){print $5}}' | sort | uniq -c
출력 예시:
12 10.10.20.111:80 12 10.10.60.163:80 254 10.10.70.7:80 6 10.10.80.109:80 20656 10.3.19.141:80
앞의 예에서 IP 주소가 10.3.19.141인 대상이 TargetResponseTime 증가의 원인인 경우가 대다수입니다. 이 경우 대상에 대한 OS(운영 체제) 및 웹 애플리케이션을 확인합니다.
백엔드 인스턴스에서 실행되는 웹 애플리케이션 종속성에 문제가 있음
대상에서 패킷 캡처를 실행하여 대상 응답의 지연을 식별합니다. 리눅스 OS의 경우 tcpdump를 사용합니다.
포트 TCP/80에서 HTTP 요청 및 응답을 포함하여 전체 수신 및 발신 POST HTTP 전송을 캡처하려면 다음을 수행합니다.
tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504F5354 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'
포트 TCP/80에서 HTTP 요청 및 응답을 포함하여 전체 수신 및 발신 GET HTTP 전송을 캡처하려면 다음을 수행합니다.
tcpdump -i any -ns 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x48545450 or tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x3C21444F'
출력 예:
14:04:12.186593 IP 10.10.30.219.13000 > 10.10.60.10.http: Flags [P.], seq 641705534:641705793, ack 1587610435, win 106, options [nop,nop,TS val 1165674323 ecr 263805247], length 259: HTTP: GET / HTTP/1.1 E..7."@...I. .. < 2..P&?.>^..C...j9...... Ez.S..Y?GET / HTTP/1.1 X-Forwarded-For: 54.66.76.204 X-Forwarded-Proto: http X-Forwarded-Port: 80 Host: labalbinternet-1236602672.ap-southeast-2.elb.amazonaws.com X-Amzn-Trace-Id: Root=1-6254355c-15db4904726649b66a1e47d7 User-Agent: curl/7.79.1 Accept: */* ................
14:04:21.187892 IP 10.10.60.10.http > 10.10.30.219.13000: Flags [P.], seq 1:592, ack 259, win 488, options [nop,nop,TS val 263814250 ecr 1165674323], length 591: HTTP: HTTP/1.1 200 OK E...\.@.@.l. < ...P2.^..C&?.A....qn..... ..|jEz.SHTTP/1.1 200 OK Date: Mon, 11 Apr 2022 14:04:12 GMT Server: Apache/2.4.52 () OpenSSL/1.0.2k-fips X-Powered-By: PHP/7.2.34 Upgrade: h2,h2c Connection: Upgrade Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 159 PHP file name: /index.php<br> ................
참고: 앞의 예제 출력에서 GET HTTP는 14:04:12에 응답하고 대상은 14:04:21에 응답합니다. TargetResponseTime은 약 9초입니다. X-Amzn-Trace-Id: Root를 사용하여 액세스 로그에서 이 레코드를 추적할 수 있습니다.
압축된 로그 파일에 대한 예제 명령:
$zcat *.log.gz | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'
압축되지 않은 로그 파일에 대한 예제 명령:
$cat *.log | awk '{if($20 ~ "1-6254355c-15db4904726649b66a1e47d7"){print $6,$7,$8 }}'
출력 예시:
0.008 9.002 0.000

관련 콘텐츠
- 질문됨 2달 전lg...
- 질문됨 2달 전lg...
- 질문됨 4달 전lg...
- 질문됨 2달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 7달 전
- AWS 공식업데이트됨 10달 전