

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

# Application Load Balancer 的存取日誌
<a name="load-balancer-access-logs"></a>

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

存取日誌是 Elastic Load Balancing 的選用功能，預設為停用。為負載平衡器啟用存取日誌之後，Elastic Load Balancing 會擷取日誌，並將其以壓縮檔案存放在您指定的 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)
+ [範例日誌項目](#access-log-entry-examples)
+ [設定日誌交付通知](#access-log-event-notifications)
+ [處理存取日誌檔](#log-processing-tools)
+ [啟用存取日誌](enable-access-logging.md)
+ [停用存取日誌](disable-access-logging.md)

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

Elastic Load Balancing 每 5 分鐘發佈每個負載平衡器節點的日誌檔。日誌傳遞最終會達到一致。負載平衡器可能在相同期間傳遞多個日誌。這通常是在網站的流量很高時才會發生。

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

```
{{bucket}}[/{{prefix}}]/AWSLogs/{{aws-account-id}}/elasticloadbalancing/{{region}}/{{yyyy}}/{{mm}}/{{dd}}/{{aws-account-id}}_elasticloadbalancing_{{region}}_app.{{load-balancer-id}}_{{end-time}}_{{ip-address}}_{{random-string}}.log.gz
```

*bucket*  
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-id*  
負載平衡器的資源 ID。如果資源 ID 包含任何斜線 (/)，斜線會換成句點 (.)。

*end-time*  
記錄間隔結束的日期和時間。例如，結束時間 20140215T2340Z 的日子檔案包含在 23:35 和 23:40 (UTC 或 Zulu 時間) 之間發出的請求項目。

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

*random-string*  
系統產生的隨機字串。

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

```
s3://amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2022/05/01/123456789012_elasticloadbalancing_us-east-2_app.my-loadbalancer.1234567890abcdef_20220215T2340Z_172.160.001.192_20sg8hgm.log.gz
```

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

```
s3://amzn-s3-demo-logging-bucket/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2022/05/01/123456789012_elasticloadbalancing_us-east-2_app.my-loadbalancer.1234567890abcdef_20220215T2340Z_172.160.001.192_20sg8hgm.log.gz
```

日誌檔案可存放於儲存貯體任意長時間，但您也可以定義 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 會記錄向負載平衡器傳送的請求，包括從未送達目標的請求。例如，如果用戶端傳送格式不正確的請求，或沒有運作狀態良好的目標可回應請求，則仍然會記錄此請求。

每個日誌項目包含對負載平衡器提出的單一請求 (或就 WebSocket 而言是連線) 的詳細資訊。對於 WebSocket，只有在連線關閉之後才會寫入項目。如果無法建立升級連線，則項目與 HTTP 或 HTTPS 請求的項目相同。

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

**Topics**
+ [語法](#access-log-entry-syntax)
+ [採取的動作](#actions-taken)
+ [分類原因](#classification-reasons)
+ [錯誤原因代碼](#error-reason-codes)
+ [轉換狀態碼](#transform-status-codes)

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

下表依序說明存取日誌項目的欄位。所有欄位以空格分隔。當我們新增欄位時，會將它新增至日誌項目的結尾。當我們準備發佈新欄位時，您可能會在欄位發佈之前看到額外的結尾 "-"。請確定您將日誌剖析設定為在上次記錄欄位後停止，並在我們發佈新欄位後更新日誌剖析。


| 欄位 （位置） | Description | 
| --- | --- | 
| 類型 (1) | 請求或連線的類型。可能的值如下所示 (忽略任何其他值)：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/elasticloadbalancing/latest/application/load-balancer-access-logs.html) | 
| 時間 (2) | 負載平衡器產生回應給用戶端的時間 ( ISO 8601 格式)。對於 WebSocket，這是連線關閉的時間。 | 
| elb (3) | 負載平衡器的資源 ID。如果您剖析存取日誌項目，請注意，資源 ID 可能包含斜線 (/)。 | 
| client：port (4) | 提出請求之用戶端的 IP 地址和連接埠。如果負載平衡器前面有代理，則此欄位會包含代理的 IP 地址。 | 
| target：port (5) | 處理此請求之目標的 IP 地址和連接埠。<br />如果用戶端未傳送完整的請求，則負載平衡器無法將請求分派給目標，而這個值會設為 -。<br />如果目標是 Lambda 函數，這個值會設定為 -。<br />如果請求被 封鎖 AWS WAF，此值會設為 -。 | 
| request\_processing\_time (6) | 從負載平衡器收到請求到請求傳送到目標為止所經過的總時間 (以秒為單位，精確到毫秒)。<br />如果負載平衡器無法將請求分派給目標，這個值會設為 -1。如果目標在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。<br />如果在達到 10 秒 TCP 連線逾時之前，無法使用目標建立 TCP 連線，此值也可以設定為 -1。<br />如果 AWS WAF 已啟用 Application Load Balancer 或目標類型為 Lambda 函數，用戶端傳送 POST 請求所需資料所需的時間會計入 `request_processing_time`。 | 
| target\_processing\_time (7) | 從負載平衡器將請求傳送至目標開始，直到目標開始傳送回應標頭為止，所經過的總時間 (以秒為單位，精確到亳秒)。<br />如果負載平衡器無法將請求分派給目標，這個值會設為 -1。如果目標在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。<br />如果已註冊的目標在閒置逾時之前沒有回應，這個值也可能設為 -1。<br />如果 AWS WAF Application Load Balancer 未啟用 ，用戶端傳送 POST 請求所需資料所需的時間會計入 `target_processing_time`。 | 
| response\_processing\_time (8) | 從負載平衡器收到目標的回應標頭開始，直到開始將回應傳送到用戶端為止，所經過的總時間 (以秒為單位，精確到亳秒)。這包括負載平衡器上的佇列時間，以及從負載平衡器到用戶端的連線取得時間。<br />如果負載平衡器未收到來自目標的回應，則此值會設為 -1。如果目標在閒置逾時之前關閉連線，或用戶端傳送格式不正確的請求，就可能發生此情況。 | 
| elb\_status\_code (9) | 負載平衡器產生的回應狀態碼、固定回應規則或區塊動作的 AWS WAF 自訂回應碼。 | 
| target\_status\_code (10) | 來自目標的回應狀態碼。只有在對目標建立連線且目標傳送回應之後，才會記錄這個值。否則會設為 -。 | 
| received\_bytes (11) | 從用戶端 (請求者) 收到的請求大小 (以位元組為單位)。對於 HTTP 請求，這包括標頭。對於 WebSocket，這是在連線上從用戶端收到的位元組總數。 | 
| sent\_bytes (12) | 傳回到用戶端 (請求者) 的回應大小 (以位元組為單位)。對於 HTTP 請求，這包括回應標頭和內文。對於 WebSocket，這是在連線上傳送到用戶端的位元組總數。<br />TCP 標頭和 TLS 交握承載不包含在 中`sent_bytes`。因此 `sent_bytes`與 `DataTransfer-Out-Bytes` 不相符 AWS Cost Explorer。 | 
| "request\_line" (13) | 來自用戶端的請求行，以雙引號括住，並採用以下格式來記錄：HTTP 方法 \+ protocol://host:port/uri\+HTTP 版本。記錄請求 URI 時，負載平衡器會依原狀保留用戶端傳送的 URL。它不會為存取日誌檔案設定內容類型。處理此欄位時，請考量用戶端如何傳送 URL。 | 
| "user\_agent" (14) | User-Agent 字串，識別發出請求的用戶端 (以雙引號括住)。此字串包含一或多個產品識別符，product[/version]。如果字串超過 8 KB，則會截斷。 | 
| ssl\_cipher (15) | [HTTPS 接聽程式] SSL 加密。如果接聽程式不是 HTTPS 接聽程式，此值會設為 -。 | 
| ssl\_protocol (16) | [HTTPS 接聽程式] SSL 通訊協定。如果接聽程式不是 HTTPS 接聽程式，此值會設為 -。 | 
| target\_group\_arn (17) | 目標群組的 Amazon Resource Name (ARN)。 | 
| "trace\_id" (18) | **X-Amzn-Trace-Id** 標頭的內容，以雙引號括住。 | 
| "domain\_name" (19) | [HTTPS 接聽程式] 在 TLS 交握期間由用戶端提供的 SNI 網域，以雙引號括住。如果用戶端不支援 SNI，或網域不符合憑證而向用戶端出示預設憑證，這個值會設為 -。 | 
| "chosen\_cert\_arn" (20) | [HTTPS 接聽程式] 向用戶端出示的憑證的 ARN，以雙引號括住。如果重複使用工作階段，這個值會設為 `session-reused`。如果接聽程式不是 HTTPS 接聽程式，此值會設為 -。 | 
| matched\_rule\_priority (21) | 符合請求之規則的優先順序值。如果規則符合，則此為 1 到 50,000 的值。如果沒有規則符合且採取預設動作，這個值會設為 0。如果在規則評估期間發生錯誤，則會設為 -1。對於任何其他錯誤，則會設為 -。 | 
| request\_creation\_time (22) | 負載平衡器從用戶端收到請求的時間 (ISO 8601 格式)。 | 
| "actions\_executed" (23) | 處理請求時所採取的動作，以雙引號括住。這個值是逗號分隔清單，可以包含 [採取的動作](#actions-taken) 中所述的值。如果未採取任何動作，例如對於格式不正確的請求，這個值會設為 -。 | 
| "redirect\_url" (24) | 在 HTTP 回應的位置標頭中，指重新導向目標的 URL，以雙引號括住。如果未採取重新導向動作，這個值會設為 -。 | 
| "error\_reason" (25) | 錯誤原因代碼，以雙引號括住。如果請求失敗，則此為[錯誤原因代碼](#error-reason-codes)所述的其中一個錯誤代碼。如果採取的動作不含驗證動作，或目標不是 Lambda 函數，此值會設為 -。 | 
| "target：port\_list" (26) | 處理此請求之目標之 IP 地址和連接埠以空格分隔的清單，用雙引號括注。目前，列表可以包含一個項目與其匹配的目標：port field。<br />如果用戶端未傳送完整的請求，則負載平衡器無法將請求分派給目標，而這個值會設為 -。<br />如果目標是 Lambda 函數，這個值會設定為 -。<br />如果請求被 封鎖 AWS WAF，此值會設為 -。 | 
| "target\_status\_code\_list" (27) | 目標回應以空格分隔的狀態代碼清單，用雙引號括注。目前，此清單可以包含一個項目與其匹配的 target\_status\_code 欄位。<br />只有在對目標建立連線且目標傳送回應之後，才會記錄這個值。否則會設為 -。 | 
| 「分類」(28) | 去同步緩解的分類 (以雙引號括住)。如果請求不符合 RFC 7230，可能的值是「可接受」、「不明確」和「嚴重」。<br />如果請求符合 RFC 7230，則此值會設為 -。 | 
| "classification\_reason" (29) | 分類原因代碼 (以雙引號括住)。如果請求不符合 RFC 7230，這是 [分類原因](#classification-reasons) 中所述的其中一個分類代碼。如果請求符合 RFC 7230，則此值會設為 -。 | 
| conn\_trace\_id (30) | 連線可追蹤性 ID 是用於識別每個連線**的唯一不透明 ID**。與用戶端建立連線後，來自此用戶端的後續請求會在其各自的存取日誌項目中包含此 ID。此 ID 可做為外部金鑰，在連線和存取日誌之間建立連結。 | 
| "transformed\_host" (31) | 主機標頭在由主機標頭重寫轉換修改之後，即為主機標頭。如果以下任何一項為 true，則此值設定為 -。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/elasticloadbalancing/latest/application/load-balancer-access-logs.html) | 
| "transformed\_uri" (32) | URL 重寫轉換修改後的 URI。如果以下任何一項為 true，則此值設定為 -。[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/elasticloadbalancing/latest/application/load-balancer-access-logs.html) | 
| "request\_transform\_status" (33) | 重寫轉換的狀態。如果未套用重寫轉換，此值會設為 -。否則，此值是 中所述的其中一個狀態值[轉換狀態碼](#transform-status-codes)。 | 

### 採取的動作
<a name="actions-taken"></a>

負載平衡器會將它所採取的動作存放在存取日誌的 actions\_executed 欄位中。
+ `authenticate` – 負載平衡器驗證工作階段、驗證使用者身分，並將使用者資訊新增至請求標頭 (如規則組態所指定)。
+ `fixed-response` – 負載平衡器發出固定回應 (如規則組態所指定)。
+ `forward` – 負載平衡器將請求轉送至目標 (如規則組態所指定)。
+ `redirect` – 負載平衡器將請求重新導向至另一個 URL (如規則組態所指定)。
+ `rewrite` — 負載平衡器會重新旋轉請求 URL，如規則組態所指定。
+ `waf` – 負載平衡器將請求轉送至 AWS WAF ，以判斷是否要將請求轉送至目標。如果這是最終動作，則 AWS WAF 決定應拒絕請求。根據預設， 拒絕的請求 AWS WAF 會在 `elb_status_code` 欄位中記錄為「403」。當 AWS WAF 設定為使用自訂回應代碼拒絕請求時， `elb_status_code` 欄位將反映設定的回應代碼。
+ `waf-failed` — 負載平衡器嘗試將請求轉送至 AWS WAF，但此程序失敗。

### 分類原因
<a name="classification-reasons"></a>

如果請求不符合 RFC 7230，負載平衡器會在存取日誌的 classification\_reason 欄位中存放下列其中一個代碼。如需詳細資訊，請參閱[去同步緩解模式](edit-load-balancer-attributes.md#desync-mitigation-mode)。


| Code | Description | 分類 | 
| --- | --- | --- | 
| `AmbiguousUri` | 要求 URI 包含控制字元。 | 不明確 | 
| `BadContentLength` | Content-Length 標頭包含無法剖析或非有效數字的值。 | 嚴重 | 
| `BadHeader` | 標頭包含空值字元或歸位字元。 | 嚴重 | 
| `BadTransferEncoding` | Transfer-Encoding 標頭包含錯誤的值。 | 嚴重 | 
| `BadUri` | 要求 URI 包含空值字元或歸位字元。 | 嚴重 | 
| `BadMethod` | 要求方法格式不正確。 | 嚴重 | 
| `BadVersion` | 要求版本格式不正確。 | 嚴重 | 
| `BothTeClPresent` | 要求同時包含 Transfer-Encoding 標頭和 Content-Length 標頭。 | 不明確 | 
| `DuplicateContentLength` | 多個 Content-Length 標頭的值相同。 | 不明確 | 
| `EmptyHeader` | 標頭空白或標頭列僅含空格。 | 不明確 | 
| `GetHeadZeroContentLength` | GET 或 HEAD 要求的 Content-Length 標頭值為 0。 | 可接受 | 
| `MultipleContentLength` | 多個 Content-Length 標頭的值不同。 | 嚴重 | 
| `MultipleTransferEncodingChunked` | 有多個 Transfer-Encoding：區塊標頭。 | 嚴重 | 
| `NonCompliantHeader` | 標頭包含非 ASCII 或控制字元。 | 可接受 | 
| `NonCompliantVersion` | 要求版本包含錯誤的值。 | 可接受 | 
| `SpaceInUri` | 要求 URI 包含非 URL 編碼的空格。 | 可接受 | 
| `SuspiciousHeader` | 可使用通用文字正規化技術將標頭正規化為 Transfer-Encoding 或 Content-Length。 | 不明確 | 
| `SuspiciousTeClPresent` | 請求同時包含 Transfer-Encoding 標頭和 Content-Length 標頭，其中至少有一個是可疑的。 | 嚴重 | 
| `UndefinedContentLengthSemantics` | GET 或 HEAD 請求有定義的 Content-Length 標頭。 | 不明確 | 
| `UndefinedTransferEncodingSemantics` | GET 或 HEAD 請求有定義的 Transfer-Encoding 標頭。 | 不明確 | 

### 錯誤原因代碼
<a name="error-reason-codes"></a>

如果負載平衡器無法完成驗證動作，負載平衡器會將以下其中一個原因代碼存放在存取日誌的 error\_reason 欄位。負載平衡器還會遞增對應的 CloudWatch 指標。如需詳細資訊，請參閱[使用 Application Load Balancer 來驗證使用者身分](listener-authenticate-users.md)。


| Code | Description | 指標 | 
| --- | --- | --- | 
| `AuthInvalidCookie` | 身分驗證 Cookie 無效。 | `ELBAuthFailure` | 
| `AuthInvalidGrantError` | 來自字符端點的授權碼無效。 | `ELBAuthFailure` | 
| `AuthInvalidIdToken` | ID 字符無效。 | `ELBAuthFailure` | 
| `AuthInvalidStateParam` | state 參數無效。 | `ELBAuthFailure` | 
| `AuthInvalidTokenResponse` | 來自字符端點的回應無效。 | `ELBAuthFailure` | 
| `AuthInvalidUserinfoResponse` | 來自使用者資訊端點的回應無效。 | `ELBAuthFailure` | 
| `AuthMissingCodeParam` | 來自授權端點的身分驗證回應缺少名為 ‘code’ 的查詢參數。 | `ELBAuthFailure` | 
| `AuthMissingHostHeader` | 來自授權端點的身分驗證回應缺少主機標頭欄位。 | `ELBAuthError` | 
| `AuthMissingStateParam` | 來自授權端點的身分驗證回應缺少名為 ‘state’ 的查詢參數。 | `ELBAuthFailure` | 
| `AuthTokenEpRequestFailed` | 字符端點傳回錯誤回應 (非 2XX)。 | `ELBAuthError` | 
| `AuthTokenEpRequestTimeout` | 負載平衡器無法與權杖端點通訊，或權杖端點未在 5 秒內回應。 | `ELBAuthError` | 
| `AuthUnhandledException` | 負載平衡器發生未處理的例外狀況。 | `ELBAuthError` | 
| `AuthUserinfoEpRequestFailed` | ldP 使用者資訊端點傳回錯誤回應 (非 2XX)。 | `ELBAuthError` | 
| `AuthUserinfoEpRequestTimeout` | 負載平衡器無法與 IdP 使用者資訊端點通訊，或使用者資訊端點未在 5 秒內回應。 | `ELBAuthError` | 
| `AuthUserinfoResponseSizeExceeded` | IdP 傳回的宣告大小超過 11K 位元組。 | `ELBAuthUserClaimsSizeExceeded` | 

如果負載平衡器無法完成 jwt-validation 動作，負載平衡器會將下列其中一個原因碼儲存在存取日誌的 error\_reason 欄位中。負載平衡器還會遞增對應的 CloudWatch 指標。如需詳細資訊，請參閱[使用 Application Load Balancer 驗證 JWTs](listener-verify-jwt.md)。


| Code | Description | 指標 | 
| --- | --- | --- | 
| `JWTHeaderNotPresent` | 請求不包含授權標頭。 | `JWTValidationFailureCount` | 
| `JWTRequestFormatInvalid` | 請求中的權杖格式錯誤或缺少必要部分 （標頭、承載或簽章），標頭不包含「承載」字首，標頭包含不同的身分驗證類型，例如「基本」，授權標頭存在，但權杖不存在，如果請求中存在多個權杖 | `JWTValidationFailureCount` | 
| `JWKSRequestTimeout` | 負載平衡器無法與 JWKS 端點通訊，或 JWKS 端點未在 5 秒內回應。 | `JWTValidationFailureCount` | 
| `JWKSResponseSizeExceeded` | JWKS 端點傳回的回應大小超過 150KB，或 JWKS 端點傳回的金鑰數目超過 10。 | `JWTValidationFailureCount` | 
| `JWKSRequestFailed` | JWKS 端點有錯誤回應 （非 2XX)。 | `JWTValidationFailureCount` | 
| `JWKSResponseInvalid` | JWKS 回應有下列一或多個問題：非 JSON 格式、無效的字元、無效的 JWKS 格式、缺少/無效的強制性 JWKS 屬性、公有金鑰具有不支援的演算法、公有金鑰無法轉換為解碼金鑰、公有金鑰大小不是 2K。 | `JWTValidationFailureCount` | 
| `JWTSignatureValidationError` | 無法基於任何原因驗證字符簽章，包括簽章不相符、字符使用不支援的演算法簽署、字符中的 KID 不存在於 JWKS 端點中。 | `JWTValidationFailureCount` | 
| `JWTClaimNotPresent` | 用戶端請求中的 JWT 不包含驗證所需的宣告 | `JWTValidationFailureCount` | 
| `JWTClaimFormatInvalid` | JWT 中宣告值的格式與組態中指定的格式不相符 | `JWTValidationFailureCount` | 
| `JWTClaimValueInvalid` | JWT 中宣告的值無效。 | `JWTValidationFailureCount` | 
| `JWTValidationInternalError` | 在用戶端請求中驗證 JWT 時，負載平衡器遇到意外錯誤。 | `JWTValidationFailureCount` | 

如果對權重目標群組的請求失敗，負載平衡器會將以下其中一個錯誤代碼存放在存取日誌的 error\_reason 欄位。


| Code | Description | 
| --- | --- | 
| `AWSALBTGCookieInvalid` | 與加權目標群組一起使用的 AWSALBTG Cookie 無效。例如，當 Cookie 值是 URL 編碼時，負載平衡器會傳回此錯誤。 | 
| `WeightedTargetGroupsUnhandledException` | 負載平衡器發生未處理的例外狀況。 | 

如果對 Lambda 函數的請求失敗，負載平衡器會將以下其中一個原因代碼存放在存取日誌的 error\_reason 欄位。負載平衡器還會遞增對應的 CloudWatch 指標。如需詳細資訊，請參閱 Lambda [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) 動作。


| Code | Description | 指標 | 
| --- | --- | --- | 
| `LambdaAccessDenied` | 負載平衡器沒有叫用 Lambda 函數的許可。 | `LambdaUserError` | 
| `LambdaBadRequest` | Lambda 呼叫失敗，因為用戶端要求標頭或內文不只包含 UTF-8 字元。 | `LambdaUserError` | 
| `LambdaConnectionError` | 負載平衡器無法連線到 Lambda。 | `LambdaInternalError` | 
| `LambdaConnectionTimeout` | 嘗試連接到 Lambda 逾時。 | `LambdaInternalError` | 
| `LambdaEC2AccessDeniedException` | Amazon EC2 在函數初始化期間拒絕存取 Lambda。 | `LambdaUserError` | 
| `LambdaEC2ThrottledException` | Amazon EC2 在函數初始化期間對 Lambda 進行節流。 | `LambdaUserError` | 
| `LambdaEC2UnexpectedException` | Amazon EC2 在函數初始化期間發生意外例外狀況。 | `LambdaUserError` | 
| `LambdaENILimitReachedException` | Lambda 無法在 Lambda 函數組態所指定的 VPC 中建立網路介面，因為已超出網路介面數量限制。 | `LambdaUserError` | 
| `LambdaInvalidResponse` | 來自 Lambda 函數的回應格式不正確或缺少所需的欄位。 | `LambdaUserError` | 
| `LambdaInvalidRuntimeException` | 不支援指定的 Lambda 執行期版本。 | `LambdaUserError` | 
| `LambdaInvalidSecurityGroupIDException` | Lambda 函數之組態中指定的安全群組 ID 無效。 | `LambdaUserError` | 
| `LambdaInvalidSubnetIDException` | Lambda 函數的組態中指定的子網路 ID 無效。 | `LambdaUserError` | 
| `LambdaInvalidZipFileException` | Lambda 無法解壓縮指定的函數 zip 檔案。 | `LambdaUserError` | 
| `LambdaKMSAccessDeniedException` | Lambda 無法解密環境變數，因為對 KMS 金鑰的存取遭拒。請檢查 Lambda 函數的 KMS 許可。 | `LambdaUserError` | 
| `LambdaKMSDisabledException` | Lambda 無法解密環境變數，因為指定的 KMS 金鑰已停用。請檢查 Lambda 函數的 KMS 金鑰設定。 | `LambdaUserError` | 
| `LambdaKMSInvalidStateException` | Lambda 無法解密環境變數，因為 KMS 金鑰的狀態無效。請檢查 Lambda 函數的 KMS 金鑰設定。 | `LambdaUserError` | 
| `LambdaKMSNotFoundException` | Lambda 無法解密環境變數，因為找不到 KMS 金鑰。請檢查 Lambda 函數的 KMS 金鑰設定。 | `LambdaUserError` | 
| `LambdaRequestTooLarge` | 請求本文的大小超過 1 MB。 | `LambdaUserError` | 
| `LambdaResourceNotFound` | 找不到 Lambda 函數。 | `LambdaUserError` | 
| `LambdaResponseTooLarge` | 回應的大小超過 1 MB。 | `LambdaUserError` | 
| `LambdaServiceException` | Lambda 發生內部錯誤。 | `LambdaInternalError` | 
| `LambdaSubnetIPAddressLimitReachedException` | Lambda 無法設定 Lambda 函數的 VPC 存取，因為一個或多個子網路沒有可用的 IP 地址。 | `LambdaUserError` | 
| `LambdaThrottling` | 因為有太多請求，Lambda 函數受到節制。 | `LambdaUserError` | 
| `LambdaUnhandled` | Lambda 函數發生未處理的例外狀況。 | `LambdaUserError` | 
| `LambdaUnhandledException` | 負載平衡器發生未處理的例外狀況。 | `LambdaInternalError` | 
| `LambdaWebsocketNotSupported` | Lambda 不支援 WebSocket。 | `LambdaUserError` | 

如果負載平衡器在轉送請求時遇到錯誤 AWS WAF，它會在存取日誌的 error\_reason 欄位中存放下列其中一個錯誤代碼。


| Code | Description | 
| --- | --- | 
| `WAFConnectionError` | 負載平衡器無法連線至 AWS WAF。 | 
| `WAFConnectionTimeout` | 與 的連線 AWS WAF 已逾時。 | 
| `WAFResponseReadTimeout` |  AWS WAF 逾時的請求。 | 
| `WAFServiceError` | AWS WAF 傳回 5XX 錯誤。 | 
| `WAFUnhandledException` | 負載平衡器發生未處理的例外狀況。 | 

### 轉換狀態碼
<a name="transform-status-codes"></a>




| Code | Description | 
| --- | --- | 
| `TransformBufferTooSmall` | 重寫轉換失敗，因為結果超過內部緩衝區的大小。嘗試讓規則表達式較不複雜。 | 
| `TransformCompileError` | 規則表達式的編譯失敗。 | 
| `TransformCompileTooBig` | 編譯的規則表達式太大。嘗試讓規則表達式較不複雜。 | 
| `TransformInvalidHost` | 主機標頭重寫轉換失敗，因為產生的主機無效。 | 
| `TransformInvalidPath` | URL 重寫轉換失敗，因為產生的路徑無效。 | 
| `TransformRegexSyntaxError` | 規則表達式包含語法錯誤。 | 
| `TransformReplaceError` | 轉換取代失敗。 | 
| `TransformSuccess` | 重寫轉換已成功完成。 | 

## 範例日誌項目
<a name="access-log-entry-examples"></a>

以下為日誌項目範例。請注意，範例文字只會在多行上顯示，以便於閱讀。

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

```
http 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
192.168.131.39:2817 10.0.0.1:80 0.000 0.001 0.000 200 200 34 366 
"GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - - 
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337262-36d228ad5d99923122bbe354" "-" "-" 
0 2018-07-02T22:22:48.364000Z "forward" "-" "-" "10.0.0.1:80" "200" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

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

```
https 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
192.168.131.39:2817 10.0.0.1:80 0.086 0.048 0.037 200 200 0 57 
"GET https://www.example.com:443/ HTTP/1.1" "curl/7.46.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337281-1d84f3d73c47ec4e58577259" "www.example.com" "arn:aws:acm:us-east-2:123456789012:certificate/12345678-1234-1234-1234-123456789012"
1 2018-07-02T22:22:48.364000Z "authenticate,forward" "-" "-" "10.0.0.1:80" "200" "-" "-" 
TID_1234abcd5678ef90 "m.example.com" "-" "TransformSuccess"
```

**HTTP/2 項目範例**  
以下是 HTTP/2 串流的範例日誌項目。

```
h2 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
10.0.1.252:48160 10.0.0.66:9000 0.000 0.002 0.000 200 200 5 257 
"GET https://10.0.2.105:773/ HTTP/2.0" "curl/7.46.0" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337327-72bd00b0343d75b906739c42" "-" "-"
1 2018-07-02T22:22:48.364000Z "redirect" "https://example.com:80/" "-" "10.0.0.66:9000" "200" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

**WebSocket 項目範例**  
以下是 WebSocket 連線的範例日誌項目。

```
ws 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
10.0.0.140:40914 10.0.1.192:8010 0.001 0.003 0.000 101 101 218 587 
"GET http://10.0.0.30:80/ HTTP/1.1" "-" - - 
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-"
1 2018-07-02T22:22:48.364000Z "forward" "-" "-" "10.0.1.192:8010" "101" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

**範例安全 WebSocket 項目**  
以下是安全 WebSocket 連線的範例日誌項目。

```
wss 2018-07-02T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188 
10.0.0.140:44244 10.0.0.171:8010 0.000 0.001 0.000 101 101 218 786
"GET https://10.0.0.30:443/ HTTP/1.1" "-" ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 
arn:aws:elasticloadbalancing:us-west-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-"
1 2018-07-02T22:22:48.364000Z "forward" "-" "-" "10.0.0.171:8010" "101" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

**Lambda 函數的範例項目**  
以下是對 Lambda 函數之請求成功的範例日誌項目：

```
http 2018-11-30T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188
192.168.131.39:2817 - 0.000 0.001 0.000 200 200 34 366
"GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - -
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-"
0 2018-11-30T22:22:48.364000Z "forward" "-" "-" "-" "-" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

以下是對 Lambda 函數之請求失敗的範例日誌項目：

```
http 2018-11-30T22:23:00.186641Z app/my-loadbalancer/50dc6c495c0c9188
192.168.131.39:2817 - 0.000 0.001 0.000 502 - 34 366
"GET http://www.example.com:80/ HTTP/1.1" "curl/7.46.0" - -
arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/my-targets/73e2d6bc24d8a067
"Root=1-58337364-23a8c76965a2ef7629b185e3" "-" "-"
0 2018-11-30T22:22:48.364000Z "forward" "-" "LambdaInvalidResponse" "-" "-" "-" "-" 
TID_1234abcd5678ef90 "-" "-" "-"
```

## 設定日誌交付通知
<a name="access-log-event-notifications"></a>

若要在 Elastic Load Balancing 將日誌交付至 S3 儲存貯體時接收通知，請使用 Amazon S3 事件通知。Elastic Load Balancing 使用 [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)、[CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) 和 [POST 物件](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)將日誌交付至 Amazon S3。為了確保您收到所有日誌交付通知，請在組態中包含所有這些物件建立事件。

如需詳細資訊，請參閱[《Amazon Simple Storage Service 使用者指南》中的 Amazon S3 事件通知](https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html)。 **

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

存取日誌檔已壓縮。如果您下載檔案，則必須先將其解壓縮才能看到資訊。

如果您的網站上有許多需求，負載平衡器產生的日誌檔可能有好幾 GB 的資料。您可能無法逐行處理這麼龐大的資料。因此，您可能需要使用提供平行處理解決方案的分析工具。例如，您可以使用以下分析工具來分析和處理存取日誌：
+ Amazon Athena 是一種互動式查詢服務，可讓您使用標準 SQL 輕鬆分析 Amazon S3 中的資料。如需詳細資訊，請參閱《Amazon Athena 使用者指南》**中的[查詢 Application Load Balancer 日誌](https://docs.aws.amazon.com/athena/latest/ug/application-load-balancer-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/)