如何疑難排解 Application Load Balancer TargetResponseTime 指標增加的問題?
我想疑難排解 Application Load Balancer TargetResponseTime 指標增加的問題。
解決方法
TargetResponseTime 相當於 Application Load Balancer 存取日誌中的 target_processing_time 欄位。
下列問題可能會導致 TargetResponseTime 指標增加。
主機處於不健康狀態
若要解決不健康的 Application Load Balancer 目標問題,請參閱如何疑難排解 Application Load Balancer 的運作狀態檢查失敗問題?
後端執行個體因為收到太多請求而無法負荷
檢查 Application Load Balancer 的 RequestCount 和 ActiveConnectionCount Amazon CloudWatch 指標的 Sum (總和) 統計值。如果總和隨著 TargetResponseTime 的增加而增加,則過多的請求可能會使後端執行個體無法負荷。
若要解決此問題,請為後端執行個體設定 Auto Scaling 群組。如需詳細資訊,請參閱教學課程: 設定可擴展且負載平衡的應用程式。
後端執行個體的 CPU 使用率過高
檢查後端執行個體的 CPUUtilization CloudWatch 指標。如果 CPU 使用率過高或使用率激增,請將執行個體升級為較大的執行個體類型。
目標出現錯誤
如果您遇到出現錯誤的目標,請完成下列步驟:
- 啟用負載平衡器的存取日誌。
- 當 TargetResponseTime 較高時,請下載該時間範圍的存取日誌。例如,若要下載 2022-02-01T03:00 至 2022-02-01T03:35 之間的存取日誌,請執行下列命令:
**注意:**用儲存貯體名稱取代 bucket-name,用 AWS 帳戶的 ID 取代 aws-account-id,並用帳戶所在的 AWS 區域取代 region。aws s3 cp s3://bucket-name[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/2022/02/01/ ./alblogs --recursive --exclude "*" --include "*20220201T03[0123]*"
下載存取日誌後,請執行下列命令以分析日誌。
ELB 存取日誌
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
在先前的範例輸出中,大部分增加的 TargetResponseTime 是由 IP 位址為 10.3.19.141 的目標所導致。在此情況下,請檢查目標的作業系統 (OS) 和 Web 應用程式。
在後端執行個體上執行的 Web 應用程式相依性出現問題
若要識別目標回應的延遲情形,請在目標上執行封包擷取作業。對於 Linux 作業系統,請使用 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

相關內容
- 已提問 7 個月前lg...
- AWS 官方已更新 8 個月前
- AWS 官方已更新 6 個月前
- AWS 官方已更新 3 年前