Classic Load Balancer 存取日誌 - Elastic Load Balancing

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Classic Load Balancer 存取日誌

Elastic Load Balancing 提供存取日誌,可針對傳送到負載平衡器的請求,擷取其詳細資訊。每個日誌包含收到請求的時間、用戶端的 IP 地址、延遲、請求路徑和伺服器回應等資訊。您可以使用這些存取日誌來分析流量模式和排除問題。

存取日誌是 Elastic Load Balancing 的選用功能,預設為停用。對負載平衡器啟動存取日誌之後,Elastic Load Balancing 會擷取日誌並存放在您指定的 Amazon S3 儲存貯體中。您可以隨時停用存取記錄。

每個存取日誌檔在存放於 S3 儲存貯體之前會使用 SSE-S3 自動加密,並於您存取它時解密。您不需要採取任何動作;加密和解密都是透明地執行。每個記錄檔都使用唯一的金鑰加密,該金鑰本身會使用定期輪換的 KMS 金鑰加密。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的透過 Amazon S3 受管加密金鑰 (SSE-S3) 使用伺服器端加密來保護資料

存取日誌無需額外收費。您將需支付 Amazon S3, 的儲存成本,但 Elastic Load Balancing 將日誌檔傳送到 Amazon S3, 所使用的頻寬不需要付費。如需儲存成本的詳細資訊,請參閱 Amazon S3 定價

存取日誌檔

Elastic Load Balancing 在您指定的間隔發佈每個負載平衡器節點的日誌檔。當您啟用負載平衡器的存取日誌,您可以指定 5 分鐘或 60 分鐘的發佈間隔。在預設情況下,Elastic Load Balancing 在每 60 分鐘間隔發佈日誌。如果間隔設為 5 分鐘,會在 1:05、1:10、1:15 等間隔時間發佈日誌,以此類推。若間隔設為 5 分鐘,日誌交付的開始時間最多延遲 5 分鐘,若間隔設為 60 分鐘,則最多延遲 15 分鐘。您可以隨時修改發佈間隔。

負載平衡器可能在相同期間傳遞多個日誌。這通常發生於網站有高流量、多個負載平衡器節點和短日誌發佈間隔。

存取日誌的檔案名稱使用以下格式:

bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_load-balancer-name_end-time_ip-address_random-string.log
bucket

S3 儲存貯體的名稱。

prefix

(選用) 儲存貯體的字首 (邏輯階層)。您指定的字首不得包含字串 AWSLogs。如需詳細資訊,請參閱使用字首組織物件

AWSLogs

我們在您指定的儲存貯體名稱和可選字首之後,增加了以 AWSLogs 開頭的檔案名稱部分。

aws-account-id

擁有者的 AWS 帳號 ID。

region

負載平衡器和 S3 儲存貯體的區域。

yyyy/mm/dd

傳遞日誌的日期。

load-balancer-name

負載平衡器名稱。

end-time

記錄間隔結束的日期和時間。例如,如果發佈間隔為 5 分鐘,則 20140215T2340Z 的結束時間包含 23:40 和 23:35 項目之間的請求項目。

ip-address

處理請求之負載平衡器節點的 IP 地址。對於內部負載平衡器,這是私有 IP 地址。

random-string

系統產生的隨機字串。

以下是包含 "my-app" 字首的日誌檔案名稱範例:

s3://my-loadbalancer-logs/my-app/AWSLogs/123456789012/elasticloadbalancing/us-west-2/2018/02/15/123456789012_elasticloadbalancing_us-west-2_my-loadbalancer_20180215T2340Z_172.160.001.192_20sg8hgm.log

以下是不含字首的日誌檔案名稱範例:

s3://my-loadbalancer-logs/AWSLogs/123456789012/elasticloadbalancing/us-west-2/2018/02/15/123456789012_elasticloadbalancing_us-west-2_my-loadbalancer_20180215T2340Z_172.160.001.192_20sg8hgm.log

日誌檔案可存放於儲存貯體任意長時間,但您也可以定義 Amazon S3 生命週期規則,自動封存或刪除日誌檔案。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的物件生命週期管理

存取日誌項目

Elastic Load Balancing 會記錄傳送到負載平衡器的請求,包括從未送達後端執行個體的請求。例如,如果用戶端傳送格式不正確的請求,或沒有運作狀態良好的執行個體可回應請求,則仍然會記錄請求。

重要

Elastic Load Balancing 會盡可能記錄請求。建議您使用存取日誌來了解請求的性質,而不是為了全面解釋所有請求。

語法

每個日誌項目包含對負載平衡器所做的單一請求的詳細資訊。以空格分隔的日誌項目的所有欄位。日誌檔中的每個項目的格式如下:

timestamp elb client:port backend:port request_processing_time backend_processing_time response_processing_time elb_status_code backend_status_code received_bytes sent_bytes "request" "user_agent" ssl_cipher ssl_protocol

下表說明存取日誌項目的欄位。

欄位 描述

time

負載平衡器從用戶端收到請求的時間 (ISO 8601 格式)。

elb

負載平衡器名稱

client:port

提出請求之用戶端的 IP 地址和連接埠。

backend:port

處理此請求之已註冊執行個體的 IP 地址和連接埠。

如果該負載平衡器無法傳送請求到已註冊執行個體,或是執行個體在傳送回應之前關閉連線,則此值設定為 -

如果已註冊的執行個體在閒置逾時之前沒有回應,這個值也可能設為 -

request_processing_time

[HTTP listener] 從負載平衡器收到請求開始,直到將請求傳送到已註冊的執行個體為止所經過的總時間 (以秒為單位)。

[TCP listener] 經歷過的總時間 (以秒為單位),從負載平衡器接受用戶端 TCP/SSL 連線的時間,到負載平衡器傳送第一個位元組資料到已註冊執行個體的時間。

如果負載平衡器無法將請求分派到已註冊執行個體,這個值會設為 -1。如果已註冊執行個體的在閒置逾時之前關閉連線,或用戶端傳送格式不正確的請求,就可能發生此情況。此外,對於 TCP 接聽程式,如果用戶端建立與負載平衡器的連線,但不傳送任何資料,便會發生這種情況。

如果已註冊的執行個體在閒置逾時之前沒有回應,這個值也可能設為 -1

backend_processing_time

[HTTP 接聽程式] 從負載平衡器將請求傳送至註冊執行個體開始,直到執行個體開始傳送回應標頭為止的總時間 (以秒為單位)。

[TCP 接聽程式] 負載平衡器成功建立連線至註冊執行個體所經過的總時間 (以秒為單位)。

如果負載平衡器無法將請求分派到已註冊執行個體,這個值會設為 -1。如果已註冊執行個體的在閒置逾時之前關閉連線,或用戶端傳送格式不正確的請求,就可能發生此情況。

如果已註冊的執行個體在閒置逾時之前沒有回應,這個值也可能設為 -1

response_processing_time

[HTTP listener] 從負載平衡器收到已註冊的執行個體的回應標頭開始,直到開始將回應傳送到用戶端為止,所經過的總時間 (以秒為單位)。這包括負載平衡器上的佇列時間,以及從負載平衡器到用戶端的連線取得時間。

[TCP listener] 從負載平衡器收到已註冊的執行個體的第一個位元組開始,直到開始將回應傳送到用戶端為止,所經過的總時間 (以秒為單位)。

如果負載平衡器無法將請求分派到已註冊執行個體,這個值會設為 -1。如果已註冊執行個體的在閒置逾時之前關閉連線,或用戶端傳送格式不正確的請求,就可能發生此情況。

如果已註冊的執行個體在閒置逾時之前沒有回應,這個值也可能設為 -1

elb_status_code

[HTTP listener] 來自負載平衡器的回應狀態碼。

backend_status_code

[HTTP listener] 來自已註冊執行個體的回應狀態碼。

received_bytes

從用戶端 (請求者) 收到的請求大小 (以位元組為單位)。

[HTTP listener] 此值包含請求內文,不含標頭。

[TCP listener] 此值包含請求內文和標頭。

sent_bytes

傳回到用戶端 (請求者) 的回應大小 (以位元組為單位)。

[HTTP listener] 此值包含回應內文,不含標頭。

[TCP listener] 此值包含請求內文和標頭。

請求

來自用戶端的請求行,以雙引號括住,並採用以下格式來記錄:HTTP Method + Protocol://Host header:port + Path + HTTP 版本。記錄請求 URI 時,負載平衡器會依原狀保留用戶端傳送的 URL。它不會為存取日誌檔案設定內容類型。處理此欄位時,請考量用戶端如何傳送 URL。

[TCP listener] URL 為三個虛線,以空格分隔,並以空格結束 (「- – -」)。

user_agent

[HTTP/HTTPS listener] User-Agent 字串,識別發出請求的用戶端。此字串包含一或多個產品識別符,product[/version]。如果字串超過 8 KB,則會截斷。

ssl_cipher

[HTTPS/SSL 接聽程式] SSL 加密。只有在建立傳入 SSL/TLS 連線並成功交涉之後,才會記錄這個值。否則,值設定為 -

ssl_protocol

[HTTPS/SSL 接聽程式] SSL 通訊協定。只有在建立傳入 SSL/TLS 連線並成功交涉之後,才會記錄這個值。否則,值設定為 -

範例

範例 HTTP 項目

以下是 HTTP 接聽程式的範例日誌項目 (連接埠 80 到連接埠 80):

2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.000073 0.001048 0.000057 200 200 0 29 "GET http://www.example.com:80/ HTTP/1.1" "curl/7.38.0" - -
範例 HTTPS 項目

以下是 HTTPS 接聽程式的範例日誌項目 (連接埠 443 到連接埠 80):

2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.000086 0.001048 0.001337 200 200 0 57 "GET https://www.example.com:443/ HTTP/1.1" "curl/7.38.0" DHE-RSA-AES128-SHA TLSv1.2
範例 TCP 項目

以下是 TCP 接聽程式的範例日誌項目 (連接埠 8080 到連接埠 80):

2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.001069 0.000028 0.000041 - - 82 305 "- - - " "-" - -
範例 SSL 項目

以下是 SSL 接聽程式的範例日誌項目 (連接埠 8443 到連接埠 80):

2015-05-13T23:39:43.945958Z my-loadbalancer 192.168.131.39:2817 10.0.0.1:80 0.001065 0.000015 0.000023 - - 57 502 "- - - " "-" ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2

處理存取日誌

如果您的網站上有許多需求,負載平衡器產生的日誌檔可能有好幾 GB 的資料。您可能無法使用處理來處理如此大量的資 line-by-line 料。因此,您可能需要使用提供平行處理解決方案的分析工具。例如,您可以使用以下分析工具來分析和處理存取日誌: