

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 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://www.amazonaws.cn/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.amazonaws.cn/AmazonS3/latest/userguide/using-prefixes.html)。

`AWSLogs`  
我们会在您指定的存储桶名称和可选前缀后添加以 `AWSLogs` 开头的文件名部分。

*aws-account-id*  
所有者的 Amazon 账户 ID。

*region*  
负载均衡器和 S3 存储桶所在的区域。

*yyyy*/*mm*/*dd*  
传输日志的日期。

*load-balancer-id*  
负载均衡器的资源 ID。如果资源 ID 包含任何正斜杠 (/)，这些正斜杠将替换为句点 (.)。

*end-time*  
日志记录间隔结束的日期和时间。例如，结束时间 20140215T2340Z 包含在 UTC 时间（即祖鲁时间）23:35 和 23:40 之间发出的请求的条目。

*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.amazonaws.cn/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)**。

## 访问日志条目
<a name="access-log-entry-format"></a>

Elastic Load Balancing 会记录发送给负载均衡器的请求，包括从未到达目标的请求。例如，如果客户端发送格式错误的请求或者没有正常的目标响应请求，仍会记录请求。

每个日志条目都包含向负载均衡器发出的单个请求（如果是连接 WebSockets）的详细信息。对于 WebSockets，只有在连接关闭后才会写入条目。如果无法建立升级后的连接，则 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>

下表按顺序描述了访问日志条目的字段。使用空格分隔所有字段。添加新字段时，我们会将其添加到日志条目的末尾。当我们准备发布新字段时，您可能会在该字段发布之前看到一个额外的尾号“-”。务必要将日志解析配置为在最后一个记录的字段之后停止，并在我们发布新字段后更新日志解析。


| 字段（位置） | 说明 | 
| --- | --- | 
|  type（1）  |  请求或连接的类型。可能的值如下 (忽略任何其他值)： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html)  | 
|  time（2）  |  负载均衡器生成对客户端的响应的时间 (采用 ISO 8601 格式)。因为 WebSockets，这是连接关闭的时间。  | 
|  elb（3）  |  负载均衡器的资源 ID。如果您正在解析访问日志条目，请注意资源 IDs 可以包含正斜杠 (/)。  | 
|  client:port（4）  |  请求客户端的 IP 地址和端口。如果负载均衡器前面有代理，则此字段将会包含该代理的 IP 地址。  | 
|  target:port（5）  |  处理此请求的目标的 IP 地址和端口。 如果客户端没有发送完整请求，则负载均衡器无法将请求分派到目标，并且此值设置为 -。 如果目标是 Lambda 函数，则此值设置为 -。 如果请求被阻止 Amazon WAF，则此值设置为-。  | 
|  request\$1processing\$1time（6）  |  从负载均衡器收到请求到将请求发送到目标所用的总时间（以秒为单位，精度为毫秒）。 如果负载均衡器无法将请求分派到目标，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。 如果在达到 10 秒 TCP 连接超时之前无法与目标建立 TCP 连接，也可以将此值设置为 -1。 如果您 Amazon WAF 的 Application Load Balancer 启用或目标类型是 Lambda 函数，则将客户端发送 POST 请求所需数据所花费的时间计入。`request_processing_time`  | 
|  target\$1processing\$1time（7）  |  从负载均衡器将请求发送到目标到该目标开始发送响应标头所用的总时间（以秒为单位，精度为毫秒）。 如果负载均衡器无法将请求分派到目标，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。 如果注册目标在空闲超时之前未响应，则此值还可设置为 -1。 如果您 Amazon WAF 的 Application Load Balancer 未启用，则将计入客户端发送 POST 请求所需数据所花费的时间`target_processing_time`。  | 
|  response\$1processing\$1time（8）  |  从负载均衡器收到来自目标的响应标头到开始向客户端发送响应所用的总时间（以秒为单位，精度为毫秒）。此时间包括在负载均衡器上的排队时间以及从负载均衡器到客户端的连接获取时间。 如果负载平衡器没有接收到来自目标的响应，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。  | 
|  elb\$1status\$1code（9）  |  由负载均衡器生成的响应的状态码、固定响应规则或阻止操作的 Amazon WAF 自定义响应代码。  | 
|  target\$1status\$1code（10）  |  来自目标的响应的状态代码。仅在已建立与目标的连接且目标已发送响应的情况下记录此值。否则，其设置为 -。  | 
|  received\$1bytes（11）  |  从客户端 (申请方) 接收的请求大小 (以字节为单位)。对于 HTTP 请求，这包括标头。对于 WebSockets，这是连接时从客户端接收的总字节数。  | 
|  sent\$1bytes（12）  |  发送到客户端 (申请方) 的响应的大小 (以字节为单位)。对于 HTTP 请求，这包括响应标头和正文。对于 WebSockets，这是在连接上发送给客户端的总字节数。 TCP 标头和 TLS 握手有效载荷不包括在 `sent_bytes` 中。因此`sent_bytes`无法匹配`DataTransfer-Out-Bytes` Amazon Cost Explorer。  | 
|  "request\$1line"（13）  |  来自客户端的请求行，包含在双引号内并采用以下格式进行记录：HTTP 方法 \$1 协议://主机:端口/uri \$1 HTTP 版本。负载均衡器将保留客户端记录请求 URI 时发送的 URL。它不设置访问日志文件的内容类型。当您处理此字段时，请考虑客户端发送 URL 的方式。  | 
|  "user\$1agent"（14）  |  标识发出请求的客户端的用户代理字符串（用双引号括起来）。该字符串包含一个或多个产品标识符 (product[/version])。如果字符串长度超过 8 KB，则将被截断。  | 
|  ssl\$1cipher（15）  |  [HTTPS 侦听器] SSL 密码。如果侦听器不是 HTTPS 侦听器，则此值设置为 -。  | 
|  ssl\$1protocol（16）  |  [HTTPS 侦听器] SSL 协议。如果侦听器不是 HTTPS 侦听器，则此值设置为 -。  | 
|  target\$1group\$1arn（17）  |  目标组的 Amazon 资源名称（ARN）。  | 
|  "trace\$1id"（18）  |  **X-Amzn-Trace-Id** 标头的内容（用双引号括起来）。  | 
|  "domain\$1name"（19）  |  [HTTPS 侦听器] TLS 握手期间客户端提供的 SNI 域（用双引号括起来）。如果客户端不支持 SNI 或此域与证书不匹配且将向客户端提供默认证书，则此值将设置为 -。  | 
|  "chosen\$1cert\$1arn"（20）  |  [HTTPS 侦听器] 向客户端提供的证书的 ARN（用双引号括起来）。如果重复使用会话，则将此值设置为 `session-reused`。如果侦听器不是 HTTPS 侦听器，则此值设置为 -。  | 
|  matched\$1rule\$1priority（21）  |  匹配请求的规则的优先级值。如果匹配了某个规则，则此值的范围介于 1 和 50000 之间。如果未匹配任何规则并且已执行默认操作，则此值设置为 0。如果错误发生在规则评估时，则它设置为 -1。对于任何其他错误，它设置为 -。  | 
|  request\$1creation\$1time（22）  |  负载均衡器从客户端收到请求的时间 (采用 ISO 8601 格式)。  | 
|  "actions\$1executed"（23）  |  处理请求时执行的操作（用双引号括起来）。此值是一个逗号分隔的列表，可以包含 [采取的操作](#actions-taken) 中所描述的值。如果未执行任何操作（例如，针对格式错误的请求的操作），则此值设置为 - 。  | 
|  "redirect\$1url"（24）  |  HTTP 响应位置标头的重定向目标的 URL，使用双引号括起。如果不执行重定向操作，则此值设置为 -。  | 
|  "error\$1reason"（25）  |  错误原因代码（包含在双引号内）。如果请求失败，则这是 [错误原因代码](#error-reason-codes) 中描述的错误代码之一。如果所采取的操作不包含身份验证操作或目标不是 Lambda 函数，则此值设置为 -。  | 
|  "target:port\$1list"（26）  |  处理此请求的目标的 IP 地址和端口的列表，各个地址和端口之间用空格分隔，并且用双引号括起。当前，此列表可以包含一个项，并且与 target:port 字段匹配。 如果客户端没有发送完整请求，则负载均衡器无法将请求分派到目标，并且此值设置为 -。 如果目标是 Lambda 函数，则此值设置为 -。 如果请求被阻止 Amazon WAF，则此值设置为-。  | 
|  "target\$1status\$1code\$1list"（27）  |  目标响应的状态代码列表，代码之间用空格分隔，并且用双引号括起来。当前，此列表可以包含一个项，并且与 target\$1status\$1code 字段匹配。 仅在已建立与目标的连接且目标已发送响应的情况下记录此值。否则，其设置为 -。  | 
|  "classification"（28）  |  异步缓解的分类（包含在双引号内）。如果请求不符合 RFC 7230 标准，则可能的值为 “可接受”、“不明确” 和 “严重”。 如果请求符合 RFC 7230 标准，则此值设置为“-”。  | 
|  "classification\$1reason"（29）  |  分类原因代码（包含在双引号内）。如果请求不符合 RFC 7230 标准，则这是 [分类原因](#classification-reasons) 中描述的分类代码之一。如果请求符合 RFC 7230 标准，则此值设置为“-”。  | 
|  conn\$1trace\$1id（30）  |  连接可追溯性 ID 是一个**唯一的不透明 ID**，用于标识每个连接。与客户端建立连接后，来自此客户端的后续请求将在其各自的访问日志条目中包含此 ID。此 ID 充当外键，用于在连接和访问日志之间建立链接。  | 
|  "transformed\$1host"（31）  |  由主机标头重写转换修改后的主机标头。如果满足以下任何条件，则该值将设为 -。 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html)  | 
|  "transformed\$1uri"（32）  |  由 URL 重写转换修改后的 URI。如果满足以下任何条件，则该值将设为 -。 [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html)  | 
|  "request\$1transform\$1status"（33）  |  重写转换的状态。如果未应用重写转换，则该值将设为 -。否则，该值将为[转换状态代码](#transform-status-codes)中所述的状态值之一。  | 

### 采取的操作
<a name="actions-taken"></a>

负载均衡器将其采取的操作存储在访问日志的 actions\$1executed 字段中。
+ `authenticate` – 负载均衡器验证会话，验证用户身份，并将用户信息添加到规则配置所指定的请求标头中。
+ `fixed-response` – 负载均衡器发出规则配置所指定的固定响应。
+ `forward` – 负载均衡器将请求转发到规则配置所指定的目标。
+ `redirect` – 负载均衡器将请求重定向到规则配置所指定的另一个 URL。
+ `rewrite`：负载均衡器按照规则配置中的规定重写请求 URL。
+ `waf` — 负载均衡器将请求转发到 Amazon WAF 以确定是否应将请求转发到目标。如果这是最终操作，则 Amazon WAF 决定应拒绝该请求。默认情况下，被拒绝的请求 Amazon WAF 将在该字段中记录为 “403”。`elb_status_code`当配置 Amazon WAF 为拒绝使用自定义响应代码的请求时，该`elb_status_code`字段将反映配置的响应代码。
+ `waf-failed`— 负载均衡器尝试将请求转发到 Amazon WAF，但此过程失败。

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

如果请求不符合 RFC 7230 标准，负载均衡器将在访问日志的 classification\$1reason 字段中存储以下代码之一。有关更多信息，请参阅 [异步缓解模式](edit-load-balancer-attributes.md#desync-mitigation-mode)。


| 代码 | 描述 | 分类。 | 
| --- | --- | --- | 
|  `AmbiguousUri`  |  请求 URI 包含控制字符。  |  不明确  | 
|  `BadContentLength`  |  Content-Length 标头包含一个无法解析或不是有效数字的值。  |  严重  | 
|  `BadHeader`  |  标头包含 Null 字符或回车符。  |  严重  | 
|  `BadTransferEncoding`  |  Transfer-Encoding 标头包含错误的值。  |  严重  | 
|  `BadUri`  |  请求 URI 包含 Null 字符或回车符。  |  严重  | 
|  `BadMethod`  |  请求方法格式不正确。  |  严重  | 
|  `BadVersion`  |  请求版本格式不正确。  |  严重  | 
|  `BothTeClPresent`  |  请求同时包含 Transfer-Encoding 标头和 Content-Length 标头。  |  不明确  | 
|  `DuplicateContentLength`  |  存在多个具有相同值的 Content-Length 标头。  |  不明确  | 
|  `EmptyHeader`  |  标头是空的，或者有一行中只包含空格。  |  不明确  | 
|  `GetHeadZeroContentLength`  |  对于 GET 或 HEAD 请求，有一个值为 0 的 Content-Length 标头。  |  可接受  | 
|  `MultipleContentLength`  |  存在多个具有不同值的 Content-Length 标头。  |  严重  | 
|  `MultipleTransferEncodingChunked`  |  存在多个 Transfer-Encoding: chunked 标头。  |  严重  | 
|  `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\$1reason 字段中存储以下原因代码之一。负载均衡器还会增加相应的 CloudWatch 指标。有关更多信息，请参阅 [使用 Application Load Balancer 验证用户身份](listener-authenticate-users.md)。


| 代码 | 描述 | 指标 | 
| --- | --- | --- | 
|  `AuthInvalidCookie`  |  身份验证 Cookie 无效。  |  `ELBAuthFailure`  | 
|  `AuthInvalidGrantError`  |  来自令牌终端节点的授权授予代码无效。  |  `ELBAuthFailure`  | 
|  `AuthInvalidIdToken`  |  ID 令牌无效。  |  `ELBAuthFailure`  | 
|  `AuthInvalidStateParam`  |  状态参数无效。  |  `ELBAuthFailure`  | 
|  `AuthInvalidTokenResponse`  |  来自令牌终端节点的响应无效。  |  `ELBAuthFailure`  | 
|  `AuthInvalidUserinfoResponse`  |  来自用户信息终端节点的响应无效。  |  `ELBAuthFailure`  | 
|  `AuthMissingCodeParam`  |  来自授权终端节点的身份验证响应缺少名为“code”的查询参数。  |  `ELBAuthFailure`  | 
|  `AuthMissingHostHeader`  |  来自授权终端节点的身份验证响应缺少主机标头字段。  |  `ELBAuthError`  | 
|  `AuthMissingStateParam`  |  来自授权终端节点的身份验证响应缺少名为“state”的查询参数。  |  `ELBAuthFailure`  | 
|  `AuthTokenEpRequestFailed`  |  令牌终端节点存在错误响应（非 2XX）。  |  `ELBAuthError`  | 
|  `AuthTokenEpRequestTimeout`  |  负载均衡器无法与令牌端点通信，或者令牌端点在 5 秒内没有响应。  |  `ELBAuthError`  | 
|  `AuthUnhandledException`  |  负载均衡器遇到未处理的异常。  |  `ELBAuthError`  | 
|  `AuthUserinfoEpRequestFailed`  |  IdP 用户信息终端节点存在错误响应（非 2XX）。  |  `ELBAuthError`  | 
|  `AuthUserinfoEpRequestTimeout`  |  负载均衡器无法与 IdP 用户信息端点通信，或者用户信息端点在 5 秒内没有响应。  |  `ELBAuthError`  | 
|  `AuthUserinfoResponseSizeExceeded`  |  IdP 返回的声明大小超过 11 K 字节。  |  `ELBAuthUserClaimsSizeExceeded`  | 

如果负载均衡器无法完成 jwt 验证操作，则负载均衡器会在访问日志的 error\$1reason 字段中存储以下原因代码之一。负载均衡器还会增加相应的 CloudWatch 指标。有关更多信息，请参阅 [JWTs 使用 Application Load Balancer 进行验证](listener-verify-jwt.md)。


| 代码 | 描述 | 指标 | 
| --- | --- | --- | 
|  `JWTHeaderNotPresent`  |  请求不包含授权标头。  |  `JWTValidationFailureCount`  | 
|  `JWTRequestFormatInvalid`  |  请求中的令牌格式错误或缺少必填部分（标头、有效负载或签名），标头不包含 “Bearer” 前缀，Header 包含不同的身份验证类型，例如 “Basic”，如果请求中存在多个令牌，则存在授权标头但不存在令牌  |  `JWTValidationFailureCount`  | 
|  `JWKSRequestTimeout`  |  负载均衡器无法与 JWKS 端点通信，或者 JWKS 端点在 5 秒钟内没有响应。  |  `JWTValidationFailureCount`  | 
|  `JWKSResponseSizeExceeded`  |  JWKS 端点返回的响应大小超过 150KB 或者 JWKS 端点返回的密钥数量超过 10。  |  `JWTValidationFailureCount`  | 
|  `JWKSRequestFailed`  |  有来自 JWKS 端点的错误响应（非 2XX）。  |  `JWTValidationFailureCount`  | 
|  `JWKSResponseInvalid`  |  JWKS 响应存在以下一个或多个问题：非 JSON 格式、字符无效、JWKS 格式无效、 Missing/invalid 必填的 JWKS 属性、公钥的算法不支持、公钥无法转换为解码密钥、公钥大小不是 2K。  |  `JWTValidationFailureCount`  | 
|  `JWTSignatureValidationError`  |  由于任何原因都无法验证令牌签名，包括签名不匹配，令牌是使用不支持的算法签名的，JWKS 端点中不存在令牌中的 KID。  |  `JWTValidationFailureCount`  | 
|  `JWTClaimNotPresent`  |  客户端请求中的 JWT 不包含验证所需的声明  |  `JWTValidationFailureCount`  | 
|  `JWTClaimFormatInvalid`  |  JWT 中声明值的格式与配置中指定的格式不匹配  |  `JWTValidationFailureCount`  | 
|  `JWTClaimValueInvalid`  |  JWT 中的索赔值无效。  |  `JWTValidationFailureCount`  | 
|  `JWTValidationInternalError`  |  负载均衡器在验证客户端请求中的 JWT 时遇到了意外错误。  |  `JWTValidationFailureCount`  | 

如果对加权目标组的请求失败，则负载均衡器会在访问日志的 error\$1reason 字段中存储下列错误代码之一。


| 代码 | 说明 | 
| --- | --- | 
|  `AWSALBTGCookieInvalid`  |  用于加权目标群体的 AWSALBTG Cookie 无效。例如，当 Cookie 值采用 URL 编码时，负载均衡器就会返回此错误。  | 
|  `WeightedTargetGroupsUnhandledException`  |  负载均衡器遇到未处理的异常。  | 

如果对 Lambda 函数的请求失败，则负载均衡器会在访问日志的 error\$1reason 字段中存储下列原因代码之一。负载均衡器还会增加相应的 CloudWatch 指标。有关更多信息，请参阅 Lambda [调用](https://docs.amazonaws.cn/lambda/latest/api/API_Invoke.html)操作。


| 代码 | 描述 | 指标 | 
| --- | --- | --- | 
|  `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`  |  WebSockets Lambda 不支持。  |  `LambdaUserError`  | 

如果负载均衡器在向转发请求时遇到错误 Amazon WAF，它会在访问日志的 error\$1reason 字段中存储以下错误代码之一。


| 代码 | 说明 | 
| --- | --- | 
|  `WAFConnectionError`  |  负载均衡器无法连接到 Amazon WAF。  | 
|  `WAFConnectionTimeout`  |  与的连接 Amazon WAF 超时。  | 
|  `WAFResponseReadTimeout`  |  请求 Amazon WAF 超时。  | 
|  `WAFServiceError`  |  Amazon WAF 返回了一个 5XX 错误。  | 
|  `WAFUnhandledException`  |  负载均衡器遇到未处理的异常。  | 

### 转换状态代码
<a name="transform-status-codes"></a>




| 代码 | 说明 | 
| --- | --- | 
|  `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 "-" "-" "-"
```

**示例 WebSockets 条目**  
以下是 WebSockets 连接的日志条目示例。

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

**安全 WebSockets 入口示例**  
以下是安全 WebSockets连接的日志条目示例。

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

要在弹性负载均衡将日志传输到 S3 存储桶时收到通知，请使用 Amazon S3 事件通知功能。Elastic Load Balancing 使用[PutObject[CreateMultipartUpload](https://docs.amazonaws.cn/AmazonS3/latest/API/API_CreateMultipartUpload.html)](https://docs.amazonaws.cn/AmazonS3/latest/API/API_PutObject.html)、和 [POST 对象](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTObjectPOST.html)将日志传输到 Amazon S3。为确保您收到所有日志传输通知，请在配置中包含所有这些对象创建事件。

有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的 [Amazon S3 事件通知](https://docs.amazonaws.cn/AmazonS3/latest/userguide/EventNotifications.html)**。

## 处理访问日志文件
<a name="log-processing-tools"></a>

访问日志文件是压缩文件。如果您下载这些文件，则必须对其进行解压才能查看信息。

如果您的网站上有大量需求，则负载均衡器可以生成包含大量数据的日志文件 (以 GB 为单位)。您可能无法使用处理来 line-by-line处理如此大量的数据。因此，您可能必须使用提供并行处理解决方案的分析工具。例如，您可以使用以下分析工具分析和处理访问日志：
+ Amazon Athena 是一种交互式查询服务，让您能够轻松使用标准 SQL 分析 Amazon S3 中的数据。有关更多信息，请参阅 *Amazon Athena 用户指南*中的[查询 Application Load Balancer 日志](https://docs.amazonaws.cn/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/)