

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

# Classic Load Balancer 存取日誌
<a name="access-log-collection"></a>

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

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

每個存取日誌檔在存放於 S3 儲存貯體之前會使用 SSE-S3 自動加密，並於您存取它時解密。您不需要採取任何動作；加密和解密都是透明地執行。每個日誌檔案都會使用唯一的金鑰加密，該金鑰本身會使用定期輪換的 KMS 金鑰加密。如需詳細資訊，請參閱《[Amazon S3-managed加密金鑰 (SSE-S3) 保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。 *Amazon S3 *

存取日誌無需額外收費。您將需支付 Amazon S3, 的儲存成本，但 Elastic Load Balancing 將日誌檔傳送到 Amazon S3, 所使用的頻寬不需要付費。如需儲存成本的詳細資訊，請參閱 [Amazon S3 定價](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [存取日誌檔](#access-log-file-format)
+ [存取日誌項目](#access-log-entry-format)
+ [處理存取日誌](#log-processing-tools)
+ [啟用存取日誌](enable-access-logs.md)
+ [停用存取日誌](disable-access-logs.md)

## 存取日誌檔
<a name="access-log-file-format"></a>

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

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

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

```
{{amzn-s3-demo-loadbalancer-logs}}[/{{logging-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
```

*amzn-s3-demo-loadbalancer-logs*  
S3 儲存貯體的名稱。

*prefix*  
(選用) 儲存貯體的字首 (邏輯階層)。您指定的字首不得包含字串 `AWSLogs`。如需詳細資訊，請參閱[使用字首組織物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html)。

`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://amzn-s3-demo-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://amzn-s3-demo-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 S3 使用者指南*》中的[物件生命週期管理](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)。

## 存取日誌項目
<a name="access-log-entry-format"></a>

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

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

### 語法
<a name="access-log-entry-syntax"></a>

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

```
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
```

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


| 欄位 | Description | 
| --- | --- | 
| time | 負載平衡器從用戶端收到請求的時間 (ISO 8601 格式)。 | 
| elb | 負載平衡器名稱 | 
| client:port | 提出請求之用戶端的 IP 地址和連接埠。 | 
| backend:port | 處理此請求之已註冊執行個體的 IP 地址和連接埠。<br />如果該負載平衡器無法傳送請求到已註冊執行個體，或是執行個體在傳送回應之前關閉連線，則此值設定為 `-`。<br />如果已註冊的執行個體在閒置逾時之前沒有回應，這個值也可能設為 `-`。 | 
| request\_processing\_time | [HTTP listener] 從負載平衡器收到請求開始，直到將請求傳送到已註冊的執行個體為止所經過的總時間 (以秒為單位)。<br />[TCP listener] 經歷過的總時間 (以秒為單位)，從負載平衡器接受用戶端 TCP/SSL 連線的時間，到負載平衡器傳送第一個位元組資料到已註冊執行個體的時間。<br />如果負載平衡器無法將請求分派到已註冊執行個體，這個值會設為 `-1`。如果已註冊執行個體的在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。此外，對於 TCP 接聽程式，如果用戶端建立與負載平衡器的連線，但不傳送任何資料，便會發生這種情況。<br />如果已註冊的執行個體在閒置逾時之前沒有回應，這個值也可能設為 `-1`。 | 
| backend\_processing\_time | [HTTP 接聽程式] 從負載平衡器將請求傳送至註冊執行個體開始，直到執行個體開始傳送回應標頭為止的總時間 (以秒為單位)。<br />[TCP 接聽程式] 負載平衡器成功建立連線至註冊執行個體所經過的總時間 (以秒為單位)。<br />如果負載平衡器無法將請求分派到已註冊執行個體，這個值會設為 `-1`。如果已註冊執行個體的在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。<br />如果已註冊的執行個體在閒置逾時之前沒有回應，這個值也可能設為 `-1`。 | 
| response\_processing\_time | [HTTP listener] 從負載平衡器收到已註冊的執行個體的回應標頭開始，直到開始將回應傳送到用戶端為止，所經過的總時間 (以秒為單位)。這包括負載平衡器上的佇列時間，以及從負載平衡器到用戶端的連線取得時間。<br />[TCP listener] 從負載平衡器收到已註冊的執行個體的第一個位元組開始，直到開始將回應傳送到用戶端為止，所經過的總時間 (以秒為單位)。<br />如果負載平衡器無法將請求分派到已註冊執行個體，這個值會設為 `-1`。如果已註冊執行個體的在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。<br />如果已註冊的執行個體在閒置逾時之前沒有回應，這個值也可能設為 `-1`。 | 
| elb\_status\_code | [HTTP listener] 來自負載平衡器的回應狀態碼。 | 
| backend\_status\_code | [HTTP listener] 來自已註冊執行個體的回應狀態碼。 | 
| received\_bytes | 從用戶端 (請求者) 收到的請求大小 (以位元組為單位)。<br />[HTTP listener] 此值包含請求內文，不含標頭。<br />[TCP listener] 此值包含請求內文和標頭。 | 
| sent\_bytes | 傳回到用戶端 (請求者) 的回應大小 (以位元組為單位)。<br />[HTTP listener] 此值包含回應內文，不含標頭。<br />[TCP listener] 此值包含請求內文和標頭。 | 
| 請求 | 來自用戶端的請求行，以雙引號括住，並採用以下格式來記錄：HTTP Method \+ Protocol://Host header:port \+ Path \+ HTTP 版本。記錄請求 URI 時，負載平衡器會依原狀保留用戶端傳送的 URL。它不會為存取日誌檔案設定內容類型。處理此欄位時，請考量用戶端如何傳送 URL。<br />[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 連線並成功交涉之後，才會記錄這個值。否則，值設定為 `-`。 | 

### 範例
<a name="access-log-entry-examples"></a>

**範例 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
```

## 處理存取日誌
<a name="log-processing-tools"></a>

如果您的網站上有許多需求，負載平衡器產生的日誌檔可能有好幾 GB 的資料。您可能無法逐行處理這麼龐大的資料。因此，您可能需要使用提供平行處理解決方案的分析工具。例如，您可以使用以下分析工具來分析和處理存取日誌：
+ Amazon Athena 是一種互動式查詢服務，可讓您使用標準 SQL 輕鬆分析 Amazon S3 中的資料。如需詳細資訊，請參閱 *Amazon Athena 使用者指南*中的[查詢 Classic Load Balancer 日誌](https://docs.aws.amazon.com/athena/latest/ug/elasticloadbalancer-classic-logs.html)。
+ [Loggly](https://documentation.solarwinds.com/en/success_center/loggly/content/admin/s3-ingestion-auto.htm)
+ [Splunk](https://splunk.github.io/splunk-add-on-for-amazon-web-services/)
+ [Sumo Logic](https://www.sumologic.com/application/elb/)