

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

# 监控 Application Load Balancer
<a name="load-balancer-monitoring"></a>

您可使用以下功能监控负载均衡器，分析流量模式及解决与负载均衡器和目标相关的问题。

**CloudWatch 指标**  
*您可以使用 Amazon CloudWatch 以一组有序的时间序列数据（称为指标）的形式检索有关负载均衡器和目标的数据点的统计数据。*您可使用这些指标来验证您的系统是否按预期运行。有关更多信息，请参阅 [CloudWatch Application Load Balancer 的指标](load-balancer-cloudwatch-metrics.md)。

**访问日志**  
您可以使用访问日志来捕获有关向负载均衡器发出的请求的详细信息，并将这些详细信息作为日志文件存储在 Amazon S3 中。您可以使用这些访问日志分析流量模式并解决与目标相关的问题。有关更多信息，请参阅 [Application Load Balancer 的访问日志](load-balancer-access-logs.md)。

**连接日志**  
您可以使用连接日志捕获有关发送到负载均衡器的请求的属性，并将其作为日志文件存储在 Amazon S3 中。您可以使用这些连接日志来确定客户端 IP 地址和端口、客户端证书信息、连接结果以及正在使用的 TLS 密码。然后可以使用这些连接日志来查看请求模式和其他趋势。有关更多信息，请参阅 [应用程序负载均衡器的连接日志](load-balancer-connection-logs.md)。

**Health 检查日志**  
您可以使用运行状况检查日志来捕获有关对负载均衡器的注册目标进行的运行状况检查的详细信息，并将其作为日志文件存储在 Amazon S3 中。您可以使用这些运行状况检查日志来解决目标的问题。有关更多信息，请参阅 [Health 检查日志](load-balancer-health-check-logs.md)。

**请求跟踪**  
您可以使用来请求跟踪来跟踪 HTTP 请求。负载均衡器会为它接收的每个请求添加一个包含跟踪标识符的标头。有关更多信息，请参阅 [请求 Application Load Balancer 的跟踪](load-balancer-request-tracing.md)。

**CloudTrail 日志**  
您可以使用 AWS CloudTrail 捕获有关对 Elastic Load Balancing API 的调用的详细信息，并将其作为日志文件存储在 Amazon S3 中。您可以使用这些 CloudTrail 日志来确定拨打了哪些呼叫、呼叫来自哪个源 IP 地址、谁拨打了电话、何时拨打了呼叫等。有关更多信息，请参阅使用[记录 Elastic Load Balancing 的 API 调用 CloudTrail](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/cloudtrail-logs.html)。

# CloudWatch Application Load Balancer 的指标
<a name="load-balancer-cloudwatch-metrics"></a>

Elastic Load Balancing 将您的 CloudWatch 负载均衡器和目标的数据点发布到亚马逊。 CloudWatch允许您以一组有序的时间序列数据（称为*指标*）的形式检索有关这些数据点的统计信息。可将指标视为要监控的变量，而将数据点视为该变量随时间变化的值。例如，您可以在指定时间段内监控负载均衡器的正常目标的总数。每个数据点都有相关联的时间戳和可选测量单位。

您可使用指标来验证系统是否正常运行。例如，您可以创建 CloudWatch 警报来监控指定的指标，并在该指标超出您认为可接受的范围时启动操作（例如向电子邮件地址发送通知）。

 CloudWatch 仅当请求流经负载均衡器时，Elastic Load Balancing 才会向其报告指标。如果有请求流经负载均衡器，则 Elastic Load Balancing 进行测量并以 60 秒的间隔发送其指标。如果没有请求流经负载均衡器或指标无数据，则不报告指标。

应用程序负载均衡器的指标不包括运行状况检查请求。

有关更多信息，请参阅 [Amazon CloudWatch 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)。

**Topics**
+ [Application Load Balancer 指标](#load-balancer-metrics-alb)
+ [Application Load Balancer 的指标维度](#load-balancer-metric-dimensions-alb)
+ [Application Load Balancer 指标的统计数据](#metric-statistics)
+ [查看您的负载均衡器的 CloudWatch 指标](#view-metric-data)

## Application Load Balancer 指标
<a name="load-balancer-metrics-alb"></a>
+ [负载均衡器](#load-balancer-metric-table)
+ [LCUs](#lcu-metric-table)
+ [目标](#target-metric-table)
+ [目标组运行状况](#target-group-health-metric-table)
+ [Lambda 函数](#lambda-metric-table)
+ [用户身份验证](#user-authentication-metric-table)
+ [目标优化器](#target-optimizer-metric-table)<a name="load-balancer-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括负载均衡器的以下指标。


| 指标 | 描述 | 
| --- | --- | 
| ActiveConnectionCount |  从客户端到负载均衡器以及从负载均衡器到目标的并发活动 TCP 连接的总数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| BYoIPUtilPercentage |  IP 池的使用百分比。 **报告标准**：在负载均衡器上启用 BYo IP。 **统计数据**：唯一有意义的统计数据是 `Average`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ClientTLSNegotiationErrorCount |  由因 TLS 错误而未能与负载均衡器建立会话的客户端发起的 TLS 连接数。可能的原因包括密码或协议不匹配或者客户端因无法验证服务器证书而关闭了连接。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| DesyncMitigationMode\$1NonCompliant\$1Request\$1Count |  不符合 RFC 7230 标准的请求数。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| DroppedInvalidHeaderRequestCount |  负载均衡器在路由请求之前删除具有无效标头字段的 HTTP 标头的请求数。仅当 `routing.http.drop_invalid_header_fields.enabled` 属性设置为 `true` 时，负载均衡器才会删除这些标头。 **报告标准**：有非零值 **统计数据**：全部 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ForwardedInvalidHeaderRequestCount |  由负载均衡器路由的具有无效 HTTP 标头字段的 HTTP 标头的请求数。只有当 `routing.http.drop_invalid_header_fields.enabled` 属性设置为 `false` 时，负载均衡器才会转发带有这些标头的请求。 **报告标准**：始终报告 **统计数据**：全部 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| GrpcRequestCount |  通过和处理的 gRPC 请求数。 IPv4 IPv6 **报告标准**：有非零值 **统计数据**：最有用的统计数据是 `Sum`. `Minimum`、`Maximum` 以及 `Average` 全部返回 1。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTP\$1Fixed\$1Response\$1Count |  成功的固定响应操作的次数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTP\$1Redirect\$1Count |  成功的重定向操作的次数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTP\$1Redirect\$1Url\$1Limit\$1Exceeded\$1Count |  由于响应位置标头中的 URL 大于 8K 而无法完成的重定向操作数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$13XX\$1Count |  源自负载均衡器的 HTTP 3XX 重定向代码数。该计数不包含目标生成的响应代码。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$14XX\$1Count |  源自负载均衡器的 HTTP 4XX 客户端错误代码的数量。该计数不包含目标生成的响应代码。 如果请求格式错误或不完整，则会生成客户端错误。除了负载均衡器返回 [HTTP 460 错误代码](load-balancer-troubleshooting.md#http-460-issues)的情况之外，目标不会收到这些请求。该计数不包含目标生成的任何响应代码。 **报告标准**：有非零值 **统计数据**：最有用的统计数据是 `Sum`. `Minimum`、`Maximum` 以及 `Average` 全部返回 1。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$15XX\$1Count |  源自负载均衡器的 HTTP 5XX 服务器错误代码的数量。该计数不包含目标生成的任何响应代码。 **报告标准**：有非零值 **统计数据**：最有用的统计数据是 `Sum`. `Minimum`、`Maximum` 以及 `Average` 全部返回 1。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$1500\$1Count |  源自负载均衡器的 HTTP 500 错误代码的数量。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$1502\$1Count |  源自负载均衡器的 HTTP 502 错误代码的数量。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$1503\$1Count |  源自负载均衡器的 HTTP 503 错误代码的数量。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1ELB\$1504\$1Count |  源自负载均衡器的 HTTP 504 错误代码的数量。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| IPv6ProcessedBytes |  负载均衡器处理的总字节数 IPv6。此计数包含在 `ProcessedBytes` 中。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| IPv6RequestCount |  负载均衡器收到的 IPv6 请求数。 **报告标准**：有非零值 **统计数据**：最有用的统计数据是 `Sum`. `Minimum`、`Maximum` 以及 `Average` 全部返回 1。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| LowReputationPacketsDropped |  已知恶意源丢弃的数据包数量。当请求被资源级 DDo S 保护阻止时，就会记录此指标。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| LowReputationRequestsDenied |  被拒绝并返回 HTTP 403 响应的 HTTP 请求数量。当请求被资源级 DDo S 保护阻止时，就会记录此指标。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| NewConnectionCount |  从客户端到负载均衡器以及从负载均衡器到目标建立的新 TCP 连接的总数。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| NonStickyRequestCount |  负载均衡器因其无法使用现有粘性会话而选择新目标的请求的数目。例如，请求是来自新客户端的第一个请求且未提供粘性 Cookie，提供了粘性 Cookie 但未指定已注册到此目标组的目标，粘性 Cookie 的格式错误或已过期，或者出现内部错误，导致负载均衡器无法读取粘性 Cookie。 **报告标准**：已在目标组上启用粘性。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ProcessedBytes |  负载均衡器通过 IPv4 和处理的总字节数 IPv6 （HTTP 标头和 HTTP 有效负载）。此计数包括流入和流出客户端和 Lambda 函数的流量、通过 Websocket 连接的流量，以及来自身份提供者（IdP）的流量（如果启用了用户身份验证）。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| RejectedConnectionCount |  由于负载均衡器达到连接数上限被拒绝的链接的数量。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| RequestCount |  经过 IPv4 和处理的请求数 IPv6。此指标仅在负载均衡器节点能够选择目标的请求中递增。在选择目标之前拒绝的请求不会反映在此指标中。 **报告标准**：在有注册目标时报告。 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| RuleEvaluations |  负载均衡器在处理请求时评估的规则数量。默认规则不计算在内。此计数包含每个请求的 10 次免费规则评估。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="lcu-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括下列负载均衡器容量单位（LCU）指标。


| 指标 | 说明 | 
| --- | --- | 
| ConsumedLCUs |  负载均衡器使用的负载均衡器容量单位 (LCU) 数量。您需要为每小时 LCUs 的使用量付费。当 LCU 预留处于活动状态时，“已使用” LCUs 将报告使用量是否低于预留容量，`0`如果使用量超过预留容量，`0`则会报告高于预留 LCUs容量的值。有关更多信息，请参阅 [Elastic Load Balancing 定价](https://aws.amazon.com/elasticloadbalancing/pricing/)。 **报告标准**：始终报告 **统计数据**：全部 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| PeakLCUs |  负载均衡器在给定时间点使用的最大负载均衡器容量单位（LCU）数量。仅在使用 LCU 预留时适用。 **报告标准**：始终 **统计数据**：最有用的统计工具为 `Sum` 和 `Max`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ReservedLCUs |  按分钟报告预留容量的计费指标。任何时段LCUs 的预留总额就是 LCUs 您要支付的金额。例如，如果为一小时预留 500， LCUs 则每分钟指标将为 8.3 LCUs 3。有关更多信息，请参阅 [监控预留](monitor-capacity-unit-reservation.md)。 **报告标准**：有非零值 **统计数据**：全部 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="target-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括目标的以下指标。


| 指标 | 说明 | 
| --- | --- | 
| AnomalousHostCount |  检测到异常的主机数量。 **报告标准**：始终报告 **统计数据**：唯一有意义的统计数据是 `Minimum` 和 `Maximum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HealthyHostCount |  被视为正常运行的目标数量。 **报告标准**：如果有注册目标则进行报告。 **统计数据**：最有用的统计工具是 `Average`、`Minimum` 和 `Maximum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HTTPCode\$1Target\$12XX\$1Count, HTTPCode\$1Target\$13XX\$1Count, HTTPCode\$1Target\$14XX\$1Count, HTTPCode\$1Target\$15XX\$1Count |  目标生成的 HTTP 响应代码的数量。它不包括负载均衡器生成的任何响应代码。 **报告标准**：如果有注册目标则进行报告。 **统计数据**：最有用的统计数据是 `Sum`. `Minimum`、`Maximum` 以及 `Average` 全部返回 1。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| MitigatedHostCount |  正在缓解的目标数量。 **报告标准**：始终报告 **统计数据**：最有用的统计工具是 `Average`、`Minimum` 和 `Maximum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| RequestCountPerTarget |  目标组中每个目标的平均请求数。您必须使用 `TargetGroup` 维度指定目标组。如果目标是 Lambda 函数，则此指标不适用。 此计数使用目标组收到的请求总数除以目标组中运行状况良好的目标的数量。如果目标组中没有运行状况良好的目标，则将其除以已注册目标的总数。 **报告标准**：始终报告 **统计**：唯一有效的统计数据是 `Sum`。这代表平均值，而不是总和。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetConnectionErrorCount |  负载均衡器和目标之间连接建立不成功的次数。如果目标是 Lambda 函数，则此指标不适用。运行状况检查连接失败不会增加此指标的值。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetResponseTime |  请求离开负载均衡器到目标开始发送响应标头所经过的时间（以秒为单位）。这与访问日志中的 `target_processing_time` 字段是等效的。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Average` 和 `pNN.NN`（百分比）。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetTLSNegotiationErrorCount |  由未与目标建立会话的负载均衡器发起的 TLS 连接数。可能的原因包括密码或协议不匹配。如果目标是 Lambda 函数，则此指标不适用。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| UnHealthyHostCount |  被视为未正常运行的目标数量。 注销某个目标将会减少 `HealthyHostCount` 的值，但不会增加 `UnhealthyHostCount` 的值。 **报告标准**：如果有注册目标则进行报告。 **统计数据**：最有用的统计工具是 `Average`、`Minimum` 和 `Maximum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ZonalShiftedHostCount |  因可用区转移而被视为禁用的目标数量。 **报告标准**：在有值时报告。 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="target-group-health-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括目标组运行状况的以下指标。有关更多信息，请参阅 [目标组运行状况](load-balancer-target-groups.md#target-group-health)。


| 指标 | 说明 | 
| --- | --- | 
| HealthyStateDNS |  符合 DNS 运行状况良好状态要求的区域数量。 **Statistics**：最有用的统计工具是 `Max`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| HealthyStateRouting |  符合路由运行状况良好状态要求的区域数量。 **Statistics**：最有用的统计工具是 `Max`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| UnhealthyRoutingRequestCount |  使用路由故障转移操作（失败时开放）路由的请求数。 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| UnhealthyStateDNS |  不符合 DNS 运行状况良好状态要求，因此在 DNS 中被标记为运行状况不佳的区域数量。 **Statistics**：最有用的统计工具是 `Min`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| UnhealthyStateRouting |  不符合路由运行状况良好状态要求，因此负载均衡器会将流量分配到区域中的所有目标（包括运行状况不佳的目标）的区域数量。 **Statistics**：最有用的统计工具是 `Min`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="lambda-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括已注册为目标的 Lambda 函数的以下指标。


| 指标 | 说明 | 
| --- | --- | 
| LambdaInternalError |  因负载均衡器或 AWS Lambda内部出现问题而导致失败的对 Lambda 函数的请求数。要获取错误原因代码，请查看访问日志的 error\$1reason 字段。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| LambdaTargetProcessedBytes |  负载均衡器为针对 Lambda 函数的请求和来自该函数的响应处理的字节的总数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| LambdaUserError |  因 Lambda 函数出现问题而导致失败的对 Lambda 函数的请求数。例如，负载均衡器没有调用该函数的权限，负载均衡器从格式错误或缺少必填字段的函数接收 JSON，或者请求正文或响应的大小超过了 1 MB 的最大大小。要获取错误原因代码，请查看访问日志的 error\$1reason 字段。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="user-authentication-metric-table"></a>

`AWS/ApplicationELB` 命名空间包括用户身份验证的以下指标。


| 指标 | 描述 | 
| --- | --- | 
| ELBAuthError |  由于身份验证操作配置错误、负载均衡器无法与 IdP 建立连接，或负载均衡器因内部错误无法完成身份验证流程，所导致的无法完成用户身份验证的次数。要获取错误原因代码，请查看访问日志的 error\$1reason 字段。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ELBAuthFailure |  由于 IdP 拒绝用户访问或授权代码多次使用导致的无法完成用户身份验证的次数。要获取错误原因代码，请查看访问日志的 error\$1reason 字段。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ELBAuthLatency |  向 IdP 查询 ID 令牌和用户信息所用的时间（毫秒）。如果这些操作中有一项或多项操作失败，这表示失败时间。 **报告标准**：有非零值 **统计数据**：所有统计数据均有意义。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ELBAuthRefreshTokenSuccess |  负载均衡器使用 IdP 提供的刷新令牌成功刷新用户声明的次数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ELBAuthSuccess |  成功的身份验证操作的次数。负载均衡器从 IdP 检索用户身份声明后，验证工作流结束时此指标会递增。 **报告标准**：有非零值 **Statistics**：最有用的统计工具是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| ELBAuthUserClaimsSizeExceeded |  配置的 IdP 返回大小超过 11K 字节的用户声明的次数。 **报告标准**：有非零值 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | <a name="target-optimizer-metric-table"></a>

`AWS/ApplicationELB`命名空间包括目标优化器的以下指标。


| 指标 | 说明 | 
| --- | --- | 
| TargetControlRequestCount |  ALB 向代理转发的请求数。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlRequestRejectCount |  由于没有目标可以接收请求而被 ALB 拒绝的请求数。该指标在为零时 TargetControlWorkQueueLength 显示上升。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlActiveChannelCount |  ALB 和代理之间的活动控制通道数。对于负载均衡器，这应等于代理的数量。低于预期的数字表示代理配置不正确或不可用。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlNewChannelCount |  ALB 和代理之间创建的新控制通道的数量。当安装了代理的新目标成功添加到目标组时，您会看到该指标有所上升。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlChannelErrorCount |  ALB 和代理之间未能建立或遇到意外错误的控制通道的数量。控制通道错误将导致该代理（和目标）未收到任何应用程序流量。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlWorkQueueLength |  ALB 从代理处收到的请求请求的信号数。  这些数据来自以 1 分钟为间隔拍摄的快照。不捕捉子分钟变更。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计数据**：唯一有意义的统计数据是 `Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 
| TargetControlProcessedBytes |  ALB 为启用目标优化器的目标组的流量处理的字节数。 **报告标准**：目标组上启用了目标优化器，并且存在非零值。 **统计**：最有意义的统计数据是`Sum`。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-cloudwatch-metrics.html)  | 

## Application Load Balancer 的指标维度
<a name="load-balancer-metric-dimensions-alb"></a>

要筛选 Application Load Balancer 的指标，请使用以下维度。


| 维度 | 描述 | 
| --- | --- | 
| AvailabilityZone |  按可用区筛选指标数据。  | 
| LoadBalancer |  按负载均衡器筛选指标数据。按如下方式指定负载均衡器：app *load-balancer-name*/*1234567890123456*（负载均衡器 ARN 的最后一部分）。  | 
| TargetGroup |  按目标组筛选指标数据。按如下方式指定目标组：targetgroup *target-group-name*/*1234567890123456*（目标组 ARN 的最后一部分）。  | 

## Application Load Balancer 指标的统计数据
<a name="metric-statistics"></a>

CloudWatch 根据 Elastic Load Balancing 发布的指标数据点提供统计数据。统计数据是在指定的时间段内汇总的指标数据。当请求统计数据时，返回的数据流按指标名称和维度进行识别。维度是用于唯一标识指标的名称-值对。例如，您可以请求在特定可用区内启动的负载均衡器背后所有正常状态 EC2 实例的统计数据。

`Minimum` 和 `Maximum` 统计数据反映每个采样窗口中各个负载均衡器节点报告的数据点的最小值和最大值。例如，假定应用程序负载均衡器由两个负载均衡器节点组成。一个节点的 `HealthyHostCount` 的 `Minimum` 为 2，`Maximum` 为 10，`Average` 为 6，另一个节点的 `HealthyHostCount` 的 `Minimum` 为 1，`Maximum` 为 5，`Average` 为 3。因此，负载均衡器的 `Minimum` 为 1，`Maximum` 为 10，`Average` 大约为 4。

我们建议您监控 `Minimum` 统计数据中的非零值 `UnHealthyHostCount`，并在多个数据点为非零值时发出警报。如果您使用 `Minimum`，则系统将检测负载均衡器中每个节点和可用区认为目标运行不正常的情况。如果您想收到有关潜在问题的提醒，则可以设置为按 `Average` 或 `Maximum` 发出警报，我们建议客户检查此指标并调查非零值情况。要自动减少故障，请遵循有关在 Amazon EC2 Auto Scaling 或 Amazon Elastic Container Service（Amazon ECS）中使用负载均衡器运行状况检查的最佳实践。

`Sum` 统计数据是所有负载均衡器节点的汇总值。由于这些指标在每个周期均包含多个报告，因此 `Sum` 仅适用于对所有负载均衡器节点进行汇总的指标。

`SampleCount` 统计数据是测量的样本数。由于这些指标是基于采样间隔和事件进行收集的，因此此统计信息一般没有用。例如，对于 `HealthyHostCount`，`SampleCount` 基于每个负载均衡器节点报告的样本数，而不是运行状况正常的主机数。

百分位数指示某个值在数据集中的相对位置。您可以指定任何百分位数，最多使用两位小数 (例如 p95.45)。例如，第 95 个百分位数表示 95% 的数据低于此值，5% 的数据高于此值。百分位数通常用于隔离异常值。例如，假设某个应用程序从缓存服务大多数请求的时间是 1-2 毫秒，但如果缓存是空的，则时间需要 100-200 毫秒。最大值反映了最慢的情况，也就是大约 200 毫秒。平均值不表示数据的分布。百分位提供了一个更有意义的应用程序性能视图。通过使用第 99 个百分位数作为 Auto Scaling 触发器或 CloudWatch 警报，您可以将处理时间超过 2 毫秒的请求设定为不超过 1%。

## 查看您的负载均衡器的 CloudWatch 指标
<a name="view-metric-data"></a>

您可以使用 Amazon EC2 控制台查看您的负载均衡器的 CloudWatch 指标。这些指标显示为监控图表。如果负载均衡器处于活动状态并且正在接收请求，则监控图表会显示数据点。

或者，您可以使用 CloudWatch 控制台查看负载均衡器的指标。

**使用控制台查看指标**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 要查看按目标组筛选的指标，请执行以下操作：

   1. 在导航窗格中，选择 **Target Groups**。

   1. 选择目标组，然后选择 **Monitoring** 选项卡。

   1. (可选) 要按时间筛选结果，请从 **Showing data for** 中选择时间范围。

   1. 要获得单个指标的一个较大视图，请选择其图形。

1. 要查看按负载均衡器筛选的指标，请执行以下操作：

   1. 在导航窗格中，选择 **Load Balancers**。

   1. 选择您的负载均衡器，然后选择 **Monitoring** 选项卡。

   1. (可选) 要按时间筛选结果，请从 **Showing data for** 中选择时间范围。

   1. 要获得单个指标的一个较大视图，请选择其图形。

**使用 CloudWatch 控制台查看指标**

1. 打开 CloudWatch 控制台，网址为[https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/)。

1. 在导航窗格中，选择**指标**。

1. 选择 **ApplicationELB** 命名空间。

1. （可选）要跨所有维度查看某个指标，请在搜索字段中输入其名称。

1. (可选) 要按维度筛选，请选择下列选项之一：
   + 要仅显示为负载均衡器报告的指标，请选择 **Per AppELB Metrics**。要查看单个负载均衡器的指标，请在搜索字段中输入其名称。
   + 要仅显示为您的目标组报告的指标，请选择 **Per AppELB, per TG Metrics**。要查看单个目标组的指标，请在搜索字段中输入其名称。
   + 要仅按可用区显示为负载均衡器报告的指标，请选择 **Per AppELB, per AZ Metrics**。要查看单个负载均衡器的指标，请在搜索字段中输入其名称。要查看单个可用区的指标，请在搜索字段中输入其名称。
   + 要仅按可用区和目标组显示为负载均衡器报告的指标，请选择 **Per AppELB, per AZ, per TG Metrics**。要查看单个负载均衡器的指标，请在搜索字段中输入其名称。要查看单个目标组的指标，请在搜索字段中输入其名称。要查看单个可用区的指标，请在搜索字段中输入其名称。

**要查看指标，请使用 AWS CLI**  
使用以下 [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 命令列出可用指标：

```
aws cloudwatch list-metrics --namespace AWS/ApplicationELB
```

**要获取指标的统计数据，请使用 AWS CLI**  
使用以下[get-metric-statistics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/get-metric-statistics.html)命令获取指定指标和维度的统计信息。 CloudWatch 将每个唯一的维度组合视为一个单独的指标。您无法使用未专门发布的维度组合检索统计数据。您必须指定创建指标时使用的同一维度。

```
aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name UnHealthyHostCount --statistics Average  --period 3600 \
--dimensions Name=LoadBalancer,Value=app/my-load-balancer/50dc6c495c0c9188 \
Name=TargetGroup,Value=targetgroup/my-targets/73e2d6bc24d8a067 \
--start-time 2016-04-18T00:00:00Z --end-time 2016-04-21T00:00:00Z
```

下面是示例输出：

```
{
    "Datapoints": [
        {
            "Timestamp": "2016-04-18T22:00:00Z",
            "Average": 0.0,
            "Unit": "Count"
        },
        {
            "Timestamp": "2016-04-18T04:00:00Z",
            "Average": 0.0,
            "Unit": "Count"
        },
        ...
    ],
    "Label": "UnHealthyHostCount"
}
```

# 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 包含在 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.aws.amazon.com/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.aws.amazon.com/zh_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 函数，则此值设置为 -。 如果请求被阻止 AWS WAF，则此值设置为-。  | 
|  request\$1processing\$1time（6）  |  从负载均衡器收到请求到将请求发送到目标所用的总时间（以秒为单位，精度为毫秒）。 如果负载均衡器无法将请求分派到目标，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。 如果在达到 10 秒 TCP 连接超时之前无法与目标建立 TCP 连接，也可以将此值设置为 -1。 如果您 AWS WAF 的 Application Load Balancer 启用或目标类型是 Lambda 函数，则将客户端发送 POST 请求所需数据所花费的时间计入。`request_processing_time`  | 
|  target\$1processing\$1time（7）  |  从负载均衡器将请求发送到目标到该目标开始发送响应标头所用的总时间（以秒为单位，精度为毫秒）。 如果负载均衡器无法将请求分派到目标，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。 如果注册目标在空闲超时之前未响应，则此值还可设置为 -1。 如果您 AWS WAF 的 Application Load Balancer 未启用，则将计入客户端发送 POST 请求所需数据所花费的时间`target_processing_time`。  | 
|  response\$1processing\$1time（8）  |  从负载均衡器收到来自目标的响应标头到开始向客户端发送响应所用的总时间（以秒为单位，精度为毫秒）。此时间包括在负载均衡器上的排队时间以及从负载均衡器到客户端的连接获取时间。 如果负载平衡器没有接收到来自目标的响应，则此值设置为 -1。如果目标在空闲超时前关闭连接，或客户端发送了格式错误的请求，则会发生这种情况。  | 
|  elb\$1status\$1code（9）  |  由负载均衡器生成的响应的状态码、固定响应规则或阻止操作的 AWS WAF 自定义响应代码。  | 
|  target\$1status\$1code（10）  |  来自目标的响应的状态代码。仅在已建立与目标的连接且目标已发送响应的情况下记录此值。否则，其设置为 -。  | 
|  received\$1bytes（11）  |  从客户端 (申请方) 接收的请求大小 (以字节为单位)。对于 HTTP 请求，这包括标头。对于 WebSockets，这是连接时从客户端接收的总字节数。  | 
|  sent\$1bytes（12）  |  发送到客户端 (申请方) 的响应的大小 (以字节为单位)。对于 HTTP 请求，这包括响应标头和正文。对于 WebSockets，这是在连接上发送给客户端的总字节数。 TCP 标头和 TLS 握手有效载荷不包括在 `sent_bytes` 中。因此`sent_bytes`无法匹配`DataTransfer-Out-Bytes` AWS 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 函数，则此值设置为 -。 如果请求被阻止 AWS 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.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-access-logs.html)  | 
|  "transformed\$1uri"（32）  |  由 URL 重写转换修改后的 URI。如果满足以下任何条件，则该值将设为 -。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_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` — 负载均衡器将请求转发到 AWS WAF 以确定是否应将请求转发到目标。如果这是最终操作，则 AWS WAF 决定应拒绝该请求。默认情况下，被拒绝的请求 AWS WAF 将在该字段中记录为 “403”。`elb_status_code`当配置 AWS WAF 为拒绝使用自定义响应代码的请求时，该`elb_status_code`字段将反映配置的响应代码。
+ `waf-failed`— 负载均衡器尝试将请求转发到 AWS 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.aws.amazon.com/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`  | 

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


| 代码 | 说明 | 
| --- | --- | 
|  `WAFConnectionError`  |  负载均衡器无法连接到 AWS WAF。  | 
|  `WAFConnectionTimeout`  |  与的连接 AWS WAF 超时。  | 
|  `WAFResponseReadTimeout`  |  请求 AWS WAF 超时。  | 
|  `WAFServiceError`  |  AWS 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.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.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 为单位)。您可能无法使用处理来 line-by-line处理如此大量的数据。因此，您可能必须使用提供并行处理解决方案的分析工具。例如，您可以使用以下分析工具分析和处理访问日志：
+ 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/)

# 为 Application Load Balancer 启用访问日志
<a name="enable-access-logging"></a>

在为负载均衡器启用访问日志时，您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。

**Topics**
+ [步骤 1：创建 S3 存储桶](#access-log-create-bucket)
+ [步骤 2：将策略附加到 S3 存储桶](#attach-bucket-policy)
+ [步骤 3：配置访问日志](#enable-access-logs)
+ [步骤 4：确认存储桶权限](#verify-bucket-permissions)
+ [问题排查](#bucket-permissions-troubleshooting)

## 步骤 1：创建 S3 存储桶
<a name="access-log-create-bucket"></a>

在启用访问日志时，您必须为访问日志指定 S3 存储桶。您可以使用现有存储桶，也可以创建专门用于访问日志的存储桶。存储桶必须满足以下要求。

**要求**
+ 存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
+ 唯一支持的服务器端加密选项是 Amazon S3 托管密钥 (SSE-S3) 有关更多信息，请参阅 [Amazon S3 托管的加密密钥 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

**使用 Amazon S3 控制台创建 S3 存储桶。**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择 **Create bucket (创建存储桶)**。

1. 在 **Create a bucket (创建存储桶)** 页上，执行以下操作：

   1. 对于**存储桶名称**，请输入存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域，可能对存储桶名称有其他限制。有关更多信息，请参阅*《Amazon S3 用户指南》*中的[存储桶限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

   1. 对于 **AWS 区域**，选择在其中创建负载均衡器的区域。

   1. 对于**默认加密**，选择 **Amazon S3 托管式密钥（SSE-S3）**。

   1. 选择 **创建存储桶 **。

## 步骤 2：将策略附加到 S3 存储桶
<a name="attach-bucket-policy"></a>

S3 存储桶必须具有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合，这些语句以访问策略语言编写，用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

如果您正在使用具有附加策略的现有存储桶，则可以将 Elastic Load Balancing 访问日志的语句添加到该策略。如果您这样做，则建议您评估生成的权限集，以确保它们适用于需要具有对访问日志的存储桶的访问权的用户。

### 存储桶策略
<a name="bucket-policy-logdelivery"></a>

该策略向日志传送服务授予权限。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    }
  ]
}
```

对于 `Resource`，使用示例策略中显示的格式，输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在[步骤 3](#enable-access-logs) 中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 传统存储桶策略
<a name="legacy-bucket-policy"></a>

在此之前，对于 2022 年 8 月之前可用的区域，我们要求向该区域特定的弹性负载均衡账户授予权限的策略。此旧版策略仍然受到支持，但我们建议您将其替换为上述新版策略。当然如果您愿意，也可以继续使用旧版策略（此处未显示）。

 以下是要在 IDs 旧策略中指定的 Elastic Load Balanc `Principal` ing 账户供参考。请注意，不在此列表中的区域不支持旧版策略。
+ 美国东部（弗吉尼亚州北部）– 127311923021
+ 美国东部（俄亥俄州）– 033677994240
+ 美国西部（北加利福尼亚）– 027434742980
+ 美国西部（俄勒冈州）– 797873946194
+ 非洲（开普敦）– 098369216593
+ 亚太地区（香港）– 754344448648
+ 亚太地区（雅加达）– 589379963580
+ 亚太地区（孟买）– 718504428378
+ 亚太地区（大阪）– 383597477331
+ 亚太地区（首尔）– 600734575887
+ 亚太地区（新加坡）– 114774131450
+ 亚太地区（悉尼）– 783225319266
+ 亚太地区（东京）– 582318560864
+ 加拿大（中部）– 985666609251
+ 欧洲（法兰克福）– 054676820928
+ 欧洲（爱尔兰）– 156460612806
+ 欧洲（伦敦）– 652711504416
+ 欧洲（米兰）– 635631232127
+ 欧洲（巴黎）– 009996457667
+ 欧洲（斯德哥尔摩）– 897822967062
+ 中东（巴林）– 076674570225
+ 南美洲（圣保罗）– 507241528517
+ AWS GovCloud （美国东部）— 190560391635
+ AWS GovCloud （美国西部）— 048591011584

### Outposts 区域
<a name="bucket-policy-outposts"></a>

以下策略向指定的日志传送服务授予权限。将此策略用于 Outposts 区域中的负载均衡器。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elb.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*",
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}
```

对于 `Resource`，使用示例策略中显示的格式，输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 S3 存储桶 ARN 取决于您是否计划在[第 3 步](#enable-access-logs)中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 安全最佳实践
<a name="bucket-policy-security-best-practices"></a>
+ 使用完整的资源路径，包括 S3 存储桶 ARN 的账户 ID 部分。请勿在 S3 存储桶 ARN 的账户 ID 部分使用通配符（\$1）。

  ```
  "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
  ```
+ 使用 `aws:SourceArn` 确保只有来自指定区域和账户的负载均衡器才能使用您的存储桶。

  ```
  "Condition": {
      "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticloadbalancing:region:123456789012:loadbalancer/*"
      }
  }
  ```
+ 将 `aws:SourceOrgId` 和 `aws:SourceArn` 结合使用，以确保只有来自指定组织的负载均衡器才能使用您的存储桶。

  ```
  "Condition": {
      "StringEquals": {
          "aws:SourceOrgId": "o-1234567890"
      },
      "ArnLike": {
          "aws:SourceArn": "arn:aws:elasticloadbalancing:*:*:loadbalancer/*"
      }
  }
  ```
+ 如果您有 `Deny` 语句会阻止除显式允许的主体之外的服务主体访问，请务必将 `logdelivery.elasticloadbalancing.amazonaws.com` 添加到允许的服务主体列表中。例如，假设您使用了 `aws:PrincipalServiceNamesList` 条件，请按如下所示添加 `logdelivery.elasticloadbalancing.amazonaws.com`：

  ```
  {
    "Effect": "Deny",
    "Principal": "*",
    "Condition": {
        "StringNotEqualsIfExists": {
            "aws:PrincipalServiceNamesList": [
                "logdelivery.elasticloadbalancing.amazonaws.com",
                "service.amazonaws.com"
            ]
        }
    }
  }
  ```

  如果您使用了 `NotPrincipal` 元素，请按如下所示添加 `logdelivery.elasticloadbalancing.amazonaws.com`。请注意，我们建议您使用 `aws:PrincipalServiceName` 或 `aws:PrincipalServiceNamesList` 条件键来显式允许服务主体，而不是使用 `NotPrincipal` 元素。有关更多信息，请参阅 [NotPrincipal](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_notprincipal.html)。

  ```
  {
    "Effect": "Deny",
    "NotPrincipal": {
      "Service": [
         "logdelivery.elasticloadbalancing.amazonaws.com",
         "service.amazonaws.com"
      ]
    }
  },
  ```

创建存储桶策略后，使用 Amazon S3 接口（例如 Amazon S3 控制台或 AWS CLI 命令）将您的存储桶策略附加到 S3 存储桶。

------
#### [ Console ]

**将您的存储桶策略附加到 S3 存储桶**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择存储桶的名称以打开其详细信息页面。

1. 选择 **Permissions**（权限），然后选择 **Bucket policy**（存储桶策略)、**Edit**（编辑）。

1. 更新存储桶策略以授予所需权限。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**将您的存储桶策略附加到 S3 存储桶**  
使用 [put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html) 命令。在此示例中，存储桶策略已保存到指定的 .json 文件中。

```
aws s3api put-bucket-policy \
    --bucket amzn-s3-demo-bucket \
    --policy file://access-log-policy.json
```

------

## 步骤 3：配置访问日志
<a name="enable-access-logs"></a>

使用以下过程配置访问日志，以捕获请求信息并将日志文件传输到 S3 存储桶。

**要求**  
存储桶必须满足[第 1 步](#access-log-create-bucket)中所描述的要求，并且必须附加[第 2 步](#attach-bucket-policy)中所描述的存储桶策略。如果包含前缀，则不得包含字符串 “AWSLogs”。

**管理保存访问日志的 S3 存储桶**  
要删除您配置用于访问日志的存储桶，请确保首先禁用访问日志。否则，如果在一个不属于您的 AWS 账户 中创建了具有相同名称和必要的存储桶策略的新存储桶，Elastic Load Balancing 会将您的负载均衡器的访问日志写入这个新存储桶。

------
#### [ Console ]

**启用访问日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，打开**访问日志**。

1. 对于 **S3 URI**，输入日志文件的 S3 URI。您指定的 URI 取决于您是否使用前缀。
   + 带有前缀的 URI: s3:/*amzn-s3-demo-logging-bucket*/*logging-prefix*
   + 不带前缀的 URI: s3://*amzn-s3-demo-logging-bucket*

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**启用访问日志**  
使用带有相关属性的[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html)命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes \
        Key=access_logs.s3.enabled,Value=true \
        Key=access_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=access_logs.s3.prefix,Value=logging-prefix
```

------
#### [ CloudFormation ]

**启用访问日志**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含相关属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "access_logs.s3.enabled"
          Value: "true"
        - Key: "access_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "access_logs.s3.prefix"
          Value: "logging-prefix"
```

------

## 步骤 4：确认存储桶权限
<a name="verify-bucket-permissions"></a>

在为负载均衡器启用访问日志后，Elastic Load Balancing 将验证 S3 存储桶，并创建测试文件以确保存储桶策略指定所需权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的访问日志文件；它不包含示例记录。

**使用 Amazon S3 控制台验证您的存储桶中是否创建了测试文件**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择您指定用于访问日志的存储桶的名称。

1. 导航到测试文件 `ELBAccessLogTestFile`。位置取决于您是否使用前缀。
   + 带有前缀的位置：*amzn-s3-demo-logging-bucket**logging-prefix*/AWSLogs/*123456789012*/ELBAccessLogTestFile
   + 不带前缀的位置：*amzn-s3-demo-logging-bucket*/AWSLogs/*123456789012*/ELBAccessLogTestFile

## 问题排查
<a name="bucket-permissions-troubleshooting"></a>

如果您遇到访问被拒绝错误，则可能的原因如下：
+ 存储桶策略没有为 Elastic Load Balancing 授予将访问日志写入存储桶的权限。确认您使用的是该区域正确的存储桶策略。确认资源 ARN 使用的存储桶名称与您在启用访问日志时指定的存储桶名称相同。如果您在启用访问日志时未指定前缀，请确认资源 ARN 不包含前缀。
+ 存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥（SSE-S3）。

# 为 Application Load Balancer 禁用访问日志
<a name="disable-access-logging"></a>

您随时可为您的负载均衡器禁用访问日志。在禁用访问日志后，您的访问日志将在 S3 存储桶中保留，直至您将其删除。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建、配置和使用 S3 存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)**。

------
#### [ Console ]

**要禁用访问日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，关闭**访问日志**。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**要禁用访问日志**  
使用 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes Key=access_logs.s3.enabled,Value=false
```

------

# 应用程序负载均衡器的连接日志
<a name="load-balancer-connection-logs"></a>

Elastic Load Balancing 提供了连接日志，该连接日志可捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含客户端的 IP 地址和端口、侦听器端口、使用的 TLS 密码和协议、TLS 握手延迟、连接状态和客户端证书详细信息等信息。您可以使用这些连接日志来分析请求模式并排查问题。

链接日志是 Elastic Load Balancing 的一项可选功能，默认情况下已禁用此功能。为负载均衡器启用连接日志之后，Elastic Load Balancing 捕获日志并将其作为压缩文件存储在您指定的 Amazon S3 存储桶中。您可以随时禁用连接日志。

您需要支付 Amazon S3 的存储费用，但无需支付 Elastic Load Balancing 用以将日志文件发送到 Amazon S3 的带宽费用。有关存储成本的更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [连接日志文件](#connection-log-file-format)
+ [连接日志条目](#connection-log-entry-format)
+ [示例 日志条目](#connection-log-entry-examples)
+ [处理连接日志文件](#connection-log-processing-tools)
+ [启用连接日志](enable-connection-logging.md)
+ [禁用连接日志](disable-connection-logging.md)

## 连接日志文件
<a name="connection-log-file-format"></a>

Elastic Load Balancing 每 5 分钟为每个负载均衡器节点发布一次日志文件。日志传输最终是一致的。负载均衡器可以传输相同时间段的多个日志。通常，如果站点具有高流量，会出现此情况。

连接日志的文件名采用以下格式：

```
bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/conn_log_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 包含在 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/conn_log_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/conn_log_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="connection-log-entry-format"></a>

每次连接尝试在连接日志文件中都有一个条目。客户端请求如何发送取决于连接是持久的还是非持久的。非持久连接只有一个请求，其会在访问日志和连接日志中创建一个条目。持久连接有多个请求，其会在访问日志中创建多个条目，并在连接日志中创建单个条目。

**Topics**
+ [语法](#connection-log-entry-syntax)
+ [错误原因代码](#connection-error-reason-codes)

### 语法
<a name="connection-log-entry-syntax"></a>

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


| 字段（位置） | 说明 | 
| --- | --- | 
|  timestamp（1）  |  负载均衡器成功建立连接或建立连接失败的时间（采用 ISO 8601 格式）。  | 
|  client\$1ip（2）  |  请求客户端的 IP 地址。  | 
|  client\$1port（3）  |  请求客户端的端口。  | 
|  listener\$1port（4）  |  接收客户端请求的负载均衡器侦听器的端口。  | 
|  tls\$1protocol（5）  |  [HTTPS 侦听器] 握手期间使用的 SSL/TLS 协议。`-`对于非 SSL/TLS 请求，此字段设置为。  | 
|  tls\$1cipher（6）  |  [HTTPS 侦听器] 握手期间使用的 SSL/TLS 协议。`-`对于非 SSL/TLS 请求，此字段设置为。  | 
|  tls\$1handshake\$1latency（7）  |  [HTTPS 侦听器] 建立成功握手所经过的总时间（以秒为单位，精确到毫秒）。在下列情况下，此字段设置为 `-`： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-connection-logs.html)  | 
|  leaf\$1client\$1cert\$1subject（8）  |  [HTTPS 侦听器] 叶客户端证书的使用者名称。在下列情况下，此字段设置为 `-`： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-connection-logs.html)  | 
|  leaf\$1client\$1cert\$1validity（9）  |  [HTTPS 侦听器] 叶客户端证书的有效期，`not-before` 和 `not-after` 采用 ISO 8601 格式。在下列情况下，此字段设置为 `-`： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-connection-logs.html)  | 
|  leaf\$1client\$1cert\$1serial\$1number（10）  |  [HTTPS 侦听器] 叶客户端证书的序列号。在下列情况下，此字段设置为 `-`： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-connection-logs.html)  | 
|  tls\$1verify\$1status（11）  |  [HTTPS 侦听器] 连接请求的状态。如果成功建立连接，则此值为 `Success`。连接失败时，该值为`Failed:$error_code`。   | 
|  conn\$1trace\$1id（12）  |  连接可追溯性 ID 是一个**唯一的不透明 ID**，用于标识每个连接。与客户端建立连接后，来自此客户端的后续请求将在各自的访问日志条目中包含此 ID。此 ID 充当外键，用于在连接和访问日志之间建立链接。  | 
|  tls\$1keyxchange (13)  |  [HTTPS 侦听器] 在 TLS 或 PQ-TLS 握手期间使用的密钥交换。`-`对于非 SSL/TLS 请求，此字段设置为。  | 

### 错误原因代码
<a name="connection-error-reason-codes"></a>

如果负载均衡器无法建立连接，则负载均衡器将在连接日志中存储以下原因代码之一。


| 代码 | 说明 | 
| --- | --- | 
|  `ClientCertMaxChainDepthExceeded`  |  已超过最大客户端证书链深度  | 
|  `ClientCertMaxSizeExceeded`  |  已超过最大客户端证书大小  | 
|  `ClientCertCrlHit`  |  客户端证书已被 CA 吊销  | 
|  `ClientCertCrlProcessingError`  |  CRL 处理错误  | 
|  `ClientCertUntrusted`  |  客户端证书不可信  | 
|  `ClientCertNotYetValid`  |  客户证书尚未生效  | 
|  `ClientCertExpired`  |  客户端证书已过期  | 
|  `ClientCertTypeUnsupported`  |  客户端证书类型不受支持  | 
|  `ClientCertInvalid`  |  客户端证书无效  | 
|  `ClientCertPurposeInvalid`  |  客户证书用途无效  | 
|  `ClientCertRejected`  |  客户端证书被自定义服务器验证拒绝  | 
|  `UnmappedConnectionError`  |  未映射的运行时连接错误  | 

## 示例 日志条目
<a name="connection-log-entry-examples"></a>

以下是连接日志条目示例。请注意，示例文本以多行形式显示，这只是为了更方便阅读。

以下是与端口 443 上启用了双向 TLS 验证模式的 HTTPS 侦听器成功连接的日志条目示例。

```
2023-10-04T17:05:15.514108Z 203.0.113.1 36280 443 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 4.036 
"CN=amazondomains.com,O=endEntity,L=Seattle,ST=Washington,C=US" NotBefore=2023-09-21T22:43:21Z;NotAfter=2026-06-17T22:43:21Z 
FEF257372D5C14D4 Success TID_3180a73013c8ca4bac2f731159d4b0fe
```

以下是与端口 443 上启用了双向 TLS 验证模式的 HTTPS 侦听器连接失败的日志条目示例。

```
2023-10-04T17:05:15.514108Z 203.0.113.1 36280 443 TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 - 
"CN=amazondomains.com,O=endEntity,L=Seattle,ST=Washington,C=US" NotBefore=2023-09-21T22:43:21Z;NotAfter=2026-06-17T22:43:21Z 
FEF257372D5C14D4 Failed:ClientCertUntrusted TID_1c71a68d70587445ad5127ff8b2687d7
```

## 处理连接日志文件
<a name="connection-log-processing-tools"></a>

连接日志文件已被压缩。如果您使用 Amazon S3 控制台打开这些文件，则将对其进行解压缩，并且将显示信息。如果您下载这些文件，则必须对其进行解压才能查看信息。

如果您的网站上有大量需求，则负载均衡器可以生成包含大量数据的日志文件 (以 GB 为单位)。您可能无法使用处理来 line-by-line处理如此大量的数据。因此，您可能必须使用提供并行处理解决方案的分析工具。例如，您可以使用以下分析工具分析和处理连接日志：
+ Amazon Athena 是一种交互式查询服务，方便使用标准 SQL 分析 Amazon S3 的数据。
+ [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/)

# 启用应用程序负载均衡器的连接日志
<a name="enable-connection-logging"></a>

在为负载均衡器启用连接日志时，您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。

**Topics**
+ [步骤 1：创建 S3 存储桶](#connection-log-create-bucket)
+ [步骤 2：将策略附加到 S3 存储桶](#attach-bucket-policy-connection)
+ [步骤 3：配置连接日志](#enable-connection-logs)
+ [步骤 4：确认存储桶权限](#verify-bucket-permissions-connection)
+ [问题排查](#bucket-permissions-troubleshooting-connection)

## 步骤 1：创建 S3 存储桶
<a name="connection-log-create-bucket"></a>

在启用连接日志时，您必须为连接日志指定 S3 存储桶。您可以使用现有存储桶，也可以创建专门用于连接日志的存储桶。存储桶必须满足以下要求。

**要求**
+ 存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
+ 唯一支持的服务器端加密选项是 Amazon S3 托管密钥 (SSE-S3) 有关更多信息，请参阅 [Amazon S3 托管的加密密钥 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

**使用 Amazon S3 控制台创建 S3 存储桶。**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择 **Create bucket (创建存储桶)**。

1. 在 **Create a bucket (创建存储桶)** 页上，执行以下操作：

   1. 对于**存储桶名称**，请输入存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域，可能对存储桶名称有其他限制。有关更多信息，请参阅*《Amazon S3 用户指南》*中的[存储桶限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

   1. 对于 **AWS 区域**，选择在其中创建负载均衡器的区域。

   1. 对于**默认加密**，选择 **Amazon S3 托管式密钥（SSE-S3）**。

   1. 选择 **创建存储桶 **。

## 步骤 2：将策略附加到 S3 存储桶
<a name="attach-bucket-policy-connection"></a>

S3 存储桶必须具有为 Elastic Load Balancing 授予将连接日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合，这些语句以访问策略语言编写，用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

如果您正在使用具有附加策略的现有存储桶，则可以将 Elastic Load Balancing 连接日志的语句添加到该策略。如果您这样做，则建议您评估生成的权限集，以确保它们适用于需要具有对连接日志的存储桶的访问权的用户。

### 存储桶策略
<a name="bucket-policy-logdelivery-connection"></a>

该策略向指定的日志传送服务授予权限。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    }
  ]
}
```

对于 `Resource`，使用示例策略中显示的格式，输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在[步骤 3](enable-access-logging.md#enable-access-logs) 中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 传统存储桶策略
<a name="legacy-bucket-policy"></a>

在此之前，对于 2022 年 8 月之前可用的区域，我们要求向该区域特定的弹性负载均衡账户授予权限的策略。此旧版策略仍然受到支持，但我们建议您将其替换为上述新版策略。当然如果您愿意，也可以继续使用旧版策略（此处未显示）。

 以下是要在 IDs 旧策略中指定的 Elastic Load Balanc `Principal` ing 账户供参考。请注意，不在此列表中的区域不支持旧版策略。
+ 美国东部（弗吉尼亚州北部）– 127311923021
+ 美国东部（俄亥俄州）– 033677994240
+ 美国西部（北加利福尼亚）– 027434742980
+ 美国西部（俄勒冈州）– 797873946194
+ 非洲（开普敦）– 098369216593
+ 亚太地区（香港）– 754344448648
+ 亚太地区（雅加达）– 589379963580
+ 亚太地区（孟买）– 718504428378
+ 亚太地区（大阪）– 383597477331
+ 亚太地区（首尔）– 600734575887
+ 亚太地区（新加坡）– 114774131450
+ 亚太地区（悉尼）– 783225319266
+ 亚太地区（东京）– 582318560864
+ 加拿大（中部）– 985666609251
+ 欧洲（法兰克福）– 054676820928
+ 欧洲（爱尔兰）– 156460612806
+ 欧洲（伦敦）– 652711504416
+ 欧洲（米兰）– 635631232127
+ 欧洲（巴黎）– 009996457667
+ 欧洲（斯德哥尔摩）– 897822967062
+ 中东（巴林）– 076674570225
+ 南美洲（圣保罗）– 507241528517
+ AWS GovCloud （美国东部）— 190560391635
+ AWS GovCloud （美国西部）— 048591011584

### Outposts 区域
<a name="bucket-policy-outposts"></a>

以下策略向指定的日志传送服务授予权限。将此策略用于 Outposts 区域中的负载均衡器。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elb.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}
```

对于 `Resource`，请输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在[步骤 3](enable-access-logging.md#enable-access-logs) 中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 安全最佳实践
<a name="bucket-policy-security-best-practices"></a>

为了增强安全性，请使用精确的 S3 存储桶 ARNs。
+ 使用完整的资源路径，而不仅仅是 S3 存储桶 ARN。
+ 包括 S3 存储桶 ARN 的账户 ID 部分。
+ 请勿在 S3 存储桶 ARN 的账户 ID 部分使用通配符（\$1）。

创建存储桶策略后，使用 Amazon S3 接口（例如 Amazon S3 控制台或 AWS CLI 命令）将您的存储桶策略附加到 S3 存储桶。

------
#### [ Console ]

**将您的存储桶策略附加到 S3 存储桶**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择存储桶的名称以打开其详细信息页面。

1. 选择 **Permissions**（权限），然后选择 **Bucket policy**（存储桶策略)、**Edit**（编辑）。

1. 更新存储桶策略以授予所需权限。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**将您的存储桶策略附加到 S3 存储桶**  
使用 [put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html) 命令。在此示例中，存储桶策略已保存到指定的 .json 文件中。

```
aws s3api put-bucket-policy \
    --bucket amzn-s3-demo-bucket \
    --policy file://access-log-policy.json
```

------

## 步骤 3：配置连接日志
<a name="enable-connection-logs"></a>

使用以下过程配置连接日志，以捕获日志文件并将其传输到 S3 存储桶。

**要求**  
存储桶必须满足[第 1 步](#connection-log-create-bucket)中所描述的要求，并且必须附加[第 2 步](#attach-bucket-policy-connection)中所描述的存储桶策略。如果指定前缀，则前缀不得包含字符串 “AWSLogs”。

**管理连接日志的 S3 存储桶**  
要删除您配置用于连接日志的存储桶，请确保首先禁用连接日志。否则，如果在一个不属于您的 AWS 账户 中创建了具有相同名称和必要的存储桶策略的新存储桶，Elastic Load Balancing 会将您的负载均衡器的连接日志写入这个新存储桶。

------
#### [ Console ]

**启用连接日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，启用**连接日志**。

1. 对于 **S3 URI**，输入日志文件的 S3 URI。您指定的 URI 取决于您是否使用前缀。
   + 带有前缀的 URI：`s3://bucket-name/prefix`
   + 不带前缀的 URI：`s3://bucket-name`

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**启用连接日志**  
使用带有相关属性的[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html)命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes \
        Key=connection_logs.s3.enabled,Value=true \
        Key=connection_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=connection_logs.s3.prefix,Value=logging-prefix
```

------
#### [ CloudFormation ]

**启用连接日志**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含相关属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "connection_logs.s3.enabled"
          Value: "true"
        - Key: "connection_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "connection_logs.s3.prefix"
          Value: "logging-prefix"
```

------

## 步骤 4：确认存储桶权限
<a name="verify-bucket-permissions-connection"></a>

在为负载均衡器启用连接日志后，Elastic Load Balancing 将验证 S3 存储桶，并创建测试文件以确保存储桶策略指定所需权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的连接日志文件；它不包含示例记录。

**验证 Elastic Load Balancing 是否在 S3 存储桶中创建了测试文件**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择您指定用于连接日志的存储桶的名称。

1. 导航到测试文件 `ELBConnectionLogTestFile`。位置取决于您是否使用前缀。
   + 带有前缀的位置：*amzn-s3-demo-logging-bucket**prefix*/AWSLogs/*123456789012*/ELBConnectionLogTestFile
   + 不带前缀的位置：*amzn-s3-demo-logging-bucket*/AWSLogs/*123456789012*/ELBConnectionLogTestFile

## 问题排查
<a name="bucket-permissions-troubleshooting-connection"></a>

如果您遇到访问被拒绝错误，则可能的原因如下：
+ 存储桶策略没有为 Elastic Load Balancing 授予将连接日志写入存储桶的权限。确认您使用的是该区域正确的存储桶策略。确认资源 ARN 使用的存储桶名称与您在启用连接日志时指定的存储桶名称相同。如果您在启用连接日志时未指定前缀，请确认资源 ARN 不包含前缀。
+ 存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥（SSE-S3）。

# 禁用应用程序负载均衡器的连接日志
<a name="disable-connection-logging"></a>

您可以随时为负载均衡器禁用连接日志。在禁用连接日志后，您的连接日志将在 S3 存储桶中保留，直至您将其删除。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建、配置和使用存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)**。

------
#### [ Console ]

**禁用连接日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，关闭**连接日志**。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**禁用连接日志**  
使用 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes Key=connection_logs.s3.enabled,Value=false
```

------

# Health 检查日志
<a name="load-balancer-health-check-logs"></a>

Elastic Load Balancing 提供运行状况检查日志，用于捕获有关注册目标运行状况检查状态的详细信息，包括运行状况检查失败时的失败原因。EC2 实例、IP 地址和 Lambda 函数目标都支持运行状况检查日志。每个日志条目都包含运行状况检查请求类型或连接、时间戳、目标地址、目标组 ID、健康状态和原因代码等信息。您可以使用这些运行状况检查日志来分析目标运行状况模式、监控运行状况变化并解决问题。

Health check 日志是一项可选功能，默认情况下处于禁用状态。为负载均衡器启用运行状况检查日志后，Elastic Load Balancing 会捕获日志并将其作为压缩文件存储在您指定的 Amazon S3 存储桶中。您可以随时禁用运行状况检查日志。

您需要支付 Amazon S3 的存储费用，但无需支付 Elastic Load Balancing 用以将日志文件发送到 Amazon S3 的带宽费用。有关存储成本的更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

**Topics**
+ [Health 检查日志文件](#health-check-log-file-format)
+ [Health check 日志条目](#health-check-log-entry-format)
+ [示例 日志条目](#health-check-log-file-entries)
+ [配置日志传输通知](#health-check-log-event-notifications)
+ [处理运行状况检查日志文件](#health-check-log-processing-tools)
+ [为 Application Load Balancer 启用运行状况检查日志](enable-health-check-logging.md)
+ [禁用 Application Load Balancer 的运行状况检查日志](disable-health-check-logging.md)

## Health 检查日志文件
<a name="health-check-log-file-format"></a>

Elastic Load Balancing 每 5 分钟为每个负载均衡器节点发布一次日志文件。当有大量目标连接到负载均衡器或配置了较小的运行状况检查间隔（例如，每 5 秒）时，负载均衡器可以在同一时间段内传送多个日志。

运行状况检查日志的文件名使用以下格式：

```
bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/health_check_log_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 包含在 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/health_check_log_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/health_check_log_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)**。

## Health check 日志条目
<a name="health-check-log-entry-format"></a>

Elastic Load Balancing 记录目标运行状况检查结果，包括该负载均衡器的所有注册目标的失败原因。每个日志条目都包含对注册目标进行的单个运行状况检查结果的详细信息。

**Topics**
+ [语法](#health-check-log-entry-syntax)
+ [错误原因代码](#health-check-error-reason-codes)

### 语法
<a name="health-check-log-entry-syntax"></a>

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


| 字段（位置） | 说明 | 
| --- | --- | 
|  type（1）  |  运行状况检查请求或连接的类型。可能的值如下 (忽略任何其他值)： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/elasticloadbalancing/latest/application/load-balancer-health-check-logs.html)  | 
|  time（2）  |  对目标启动运行状况检查的时间戳，格式为 ISO 8601。  | 
|  延迟 (3)  |  完成当前运行状况检查所用的总时间（以秒为单位）。  | 
|  target\$1addr (4)  |  目标的 IP 地址和端口，格式为 IP: 端口。如果目标是 Lambda 函数，则为 Lambda 的 ARN。  | 
|  目标群组 ID (5)  |  与目标关联的目标组的名称。  | 
|  状态 (6)  |  运行状况检查的状态。`PASS`如果运行状况检查成功，则此值为。运行状况检查失败时，该值为 `FAIL`  | 
|  状态码 (7)  |  从目标收到的运行状况检查请求的响应代码。  | 
|  原因代码 (8)  |  如果运行状况检查失败，则失败的原因。请参阅 [错误原因代码](#health-check-error-reason-codes)。  | 

### 错误原因代码
<a name="health-check-error-reason-codes"></a>

如果目标运行状况检查失败，负载均衡器将在运行状况检查日志中记录以下原因代码之一。


| 代码 | 说明 | 
| --- | --- | 
|  `RequestTimedOut`  |  Health 检查请求在等待响应时超时  | 
|  `ConnectionTimedOut`  |  由于 TCP 连接尝试超时，Health 检查失败  | 
|  `ConnectionReset`  |  由于连接重置，Health 检查失败  | 
|  `ResponseCodeMismatch`  |  目标对运行状况检查请求的响应的 HTTP 状态代码与配置的状态码不匹配  | 
|  `ResponseStringMismatch`  |  目标返回的响应正文不包含目标组运行状况检查配置中配置的字符串  | 
|  `InternalError`  |  内部负载均衡器错误  | 
|  `TargetError`  |  Target 在响应运行状况检查请求时返回 5xx 错误代码  | 
|  `GRPCStatusHeaderEmpty`  |  GRPC 目标响应有一个没有值的 grpc-status 标头  | 
|  `GRPCUnexpectedStatus`  |  GRPC 目标以意外的 grpc 状态进行响应  | 

## 示例 日志条目
<a name="health-check-log-file-entries"></a>

以下是运行状况检查日志条目的示例。请注意，示例文本以多行形式显示，这只是为了更方便阅读。

以下是成功运行状况检查的日志条目示例。

```
http 2025-10-31T12:44:59.875678Z 0.019584011 172.31.20.97:80 HCLogsTestIPs PASS 200 -
```

以下是运行状况检查失败的示例日志条目。

```
http 2025-10-31T12:44:58.901409Z 1.121980746 172.31.31.9:80 HCLogsTestIPs FAIL 502 TargetError
```

## 配置日志传输通知
<a name="health-check-log-event-notifications"></a>

要在弹性负载均衡将日志传输到 S3 存储桶时收到通知，请使用 Amazon S3 事件通知功能。Elastic Load Balancing 使用[PutObject[CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.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="health-check-log-processing-tools"></a>

运行状况检查日志文件已压缩。如果您下载这些文件，则必须对其进行解压才能查看信息。

如果您的网站上有大量需求，则负载均衡器可以生成包含大量数据的日志文件 (以 GB 为单位)。您可能无法使用处理来 line-by-line处理如此大量的数据。因此，您可能必须使用提供并行处理解决方案的分析工具。例如，您可以使用以下分析工具来分析和处理运行状况检查日志：
+ Amazon Athena 是一种交互式查询服务，方便使用标准 SQL 分析 Amazon S3 的数据。
+ [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/)

# 为 Application Load Balancer 启用运行状况检查日志
<a name="enable-health-check-logging"></a>

为负载均衡器启用运行状况检查日志时，必须指定负载均衡器将存储日志的 S3 存储桶的名称。存储桶必须具有为 Elastic Load Balancing 授予写入存储桶的权限的存储桶策略。

**Topics**
+ [步骤 1：创建 S3 存储桶](#health-check-log-create-bucket)
+ [步骤 2：将策略附加到 S3 存储桶](#attach-bucket-policy-health-check)
+ [步骤 3：配置运行状况检查日志](#enable-health-check-logs)
+ [步骤 4：确认存储桶权限](#verify-bucket-permissions-health-check)
+ [问题排查](#bucket-permissions-troubleshooting-health-check)

## 步骤 1：创建 S3 存储桶
<a name="health-check-log-create-bucket"></a>

启用运行状况检查日志时，必须为运行状况检查日志指定 S3 存储桶。您可以使用现有的存储桶，也可以创建专门用于运行状况检查日志的存储桶。存储桶必须满足以下要求。

**要求**
+ 存储桶必须位于与负载均衡器相同的区域中。该存储桶和负载均衡器可由不同的账户拥有。
+ 唯一支持的服务器端加密选项是 Amazon S3 托管密钥 (SSE-S3) 有关更多信息，请参阅 [Amazon S3 托管的加密密钥 (SSE-S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingServerSideEncryption.html)。

**使用 Amazon S3 控制台创建 S3 存储桶。**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择 **Create bucket (创建存储桶)**。

1. 在 **Create a bucket (创建存储桶)** 页上，执行以下操作：

   1. 对于**存储桶名称**，请输入存储桶的名称。此名称在 Amazon S3 内所有现有存储桶名称中必须唯一。在某些区域，可能对存储桶名称有其他限制。有关更多信息，请参阅*《Amazon S3 用户指南》*中的[存储桶限制](https://docs.aws.amazon.com/AmazonS3/latest/userguide/BucketRestrictions.html)。

   1. 对于 **AWS 区域**，选择在其中创建负载均衡器的区域。

   1. 对于**默认加密**，选择 **Amazon S3 托管式密钥（SSE-S3）**。

   1. 选择 **创建存储桶 **。

## 步骤 2：将策略附加到 S3 存储桶
<a name="attach-bucket-policy-health-check"></a>

您的 S3 存储桶必须具有存储桶策略，该策略授予 Elastic Load Balancing 将运行状况检查日志写入存储桶的权限。存储桶策略是 JSON 语句的集合，这些语句以访问策略语言编写，用于为存储桶定义访问权限。每个语句都包括有关单个权限的信息并包含一系列元素。

如果您使用的是已附加策略的现有存储桶，则可以将 Elastic Load Balancing 运行状况检查日志的语句添加到策略中。如果您这样做，我们建议您评估生成的权限集，以确保它们适用于需要访问存储桶以获取运行状况检查日志的用户。

### 存储桶策略
<a name="bucket-policy-logdelivery-health-check"></a>

该策略向指定的日志传送服务授予权限。

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "logdelivery.elasticloadbalancing.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    }
  ]
}
```

对于 `Resource`，使用示例策略中显示的格式，输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在[步骤 3](enable-access-logging.md#enable-access-logs) 中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

**AWS GovCloud (US)**：以下示例使用 AWS GovCloud (US) Regions的 ARN 语法。

```
arn:aws-us-gov:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 传统存储桶策略
<a name="legacy-bucket-policy"></a>

在此之前，对于 2022 年 8 月之前可用的区域，我们要求向该区域特定的弹性负载均衡账户授予权限的策略。此旧版策略仍然受到支持，但我们建议您将其替换为上述新版策略。当然如果您愿意，也可以继续使用旧版策略（此处未显示）。

 以下是要在 IDs 旧策略中指定的 Elastic Load Balanc `Principal` ing 账户供参考。请注意，不在此列表中的区域不支持旧版策略。
+ 美国东部（弗吉尼亚州北部）– 127311923021
+ 美国东部（俄亥俄州）– 033677994240
+ 美国西部（北加利福尼亚）– 027434742980
+ 美国西部（俄勒冈州）– 797873946194
+ 非洲（开普敦）– 098369216593
+ 亚太地区（香港）– 754344448648
+ 亚太地区（雅加达）– 589379963580
+ 亚太地区（孟买）– 718504428378
+ 亚太地区（大阪）– 383597477331
+ 亚太地区（首尔）– 600734575887
+ 亚太地区（新加坡）– 114774131450
+ 亚太地区（悉尼）– 783225319266
+ 亚太地区（东京）– 582318560864
+ 加拿大（中部）– 985666609251
+ 欧洲（法兰克福）– 054676820928
+ 欧洲（爱尔兰）– 156460612806
+ 欧洲（伦敦）– 652711504416
+ 欧洲（米兰）– 635631232127
+ 欧洲（巴黎）– 009996457667
+ 欧洲（斯德哥尔摩）– 897822967062
+ 中东（巴林）– 076674570225
+ 南美洲（圣保罗）– 507241528517
+ AWS GovCloud （美国东部）— 190560391635
+ AWS GovCloud （美国西部）— 048591011584

### Outposts 区域
<a name="bucket-policy-outposts"></a>

以下策略向指定的日志传送服务授予权限。将此策略用于 Outposts 区域中的负载均衡器。

```
{
    "Effect": "Allow",
    "Principal": {
        "Service": "logdelivery.elb.amazonaws.com"
    },
    "Action": "s3:PutObject",
    "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
    "Condition": {
        "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
        }
    }
}
```

对于 `Resource`，请输入访问日志所在位置的 ARN。请务必在 S3 存储桶 ARN 的资源路径中，包含该负载均衡器所在账户的账户 ID。这样可以确保只有来自指定账户的负载均衡器才能将访问日志写入 S3 存储桶。

您指定的 ARN 取决于您是否计划在[步骤 3](enable-access-logging.md#enable-access-logs) 中启用访问日志时包含前缀。

**带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket，前缀为 logging-prefix。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/logging-prefix/AWSLogs/123456789012/*
```

**不带前缀的 S3 存储桶 ARN 示例**  
S3 存储桶名称为 amzn-s3-demo-logging-bucket。S3 存储桶 ARN 中没有前缀部分。

```
arn:aws:s3:::amzn-s3-demo-logging-bucket/AWSLogs/123456789012/*
```

### 安全最佳实践
<a name="bucket-policy-security-best-practices"></a>

为了增强安全性，请使用精确的 S3 存储桶 ARNs。
+ 使用完整的资源路径，而不仅仅是 S3 存储桶 ARN。
+ 包括 S3 存储桶 ARN 的账户 ID 部分。
+ 请勿在 S3 存储桶 ARN 的账户 ID 部分使用通配符（\$1）。

创建存储桶策略后，使用 Amazon S3 接口（例如 Amazon S3 控制台或 AWS CLI 命令）将您的存储桶策略附加到 S3 存储桶。

------
#### [ Console ]

**将您的存储桶策略附加到 S3 存储桶**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择存储桶的名称以打开其详细信息页面。

1. 选择 **Permissions**（权限），然后选择 **Bucket policy**（存储桶策略)、**Edit**（编辑）。

1. 更新存储桶策略以授予所需权限。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**将您的存储桶策略附加到 S3 存储桶**  
使用 [put-bucket-policy](https://docs.aws.amazon.com/cli/latest/reference/s3api/put-bucket-policy.html) 命令。在此示例中，存储桶策略已保存到指定的 .json 文件中。

```
aws s3api put-bucket-policy \
    --bucket amzn-s3-demo-bucket \
    --policy file://access-log-policy.json
```

------

## 步骤 3：配置运行状况检查日志
<a name="enable-health-check-logs"></a>

使用以下过程配置运行状况检查日志，以捕获日志文件并将其传送到您的 S3 存储桶。

**要求**  
存储桶必须满足[第 1 步](#health-check-log-create-bucket)中所描述的要求，并且必须附加[第 2 步](#attach-bucket-policy-health-check)中所描述的存储桶策略。如果指定前缀，则前缀不得包含字符串 “AWSLogs”。

**管理运行状况检查日志的 S3 存储桶**  
在删除为运行状况检查日志配置的存储桶之前，请务必禁用运行状况检查日志。否则，如果有一个新的存储桶名称和所需的存储桶策略，但是在您不拥有的存储桶中创建的，Elastic Load Balan AWS 账户 cing 可能会将您的负载均衡器的运行状况检查日志写入这个新存储桶。

------
#### [ Console ]

**启用运行状况检查日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，请打开 Healt **h Check 日志**。

1. 对于 **S3 URI**，输入日志文件的 S3 URI。您指定的 URI 取决于您是否使用前缀。
   + 带有前缀的 URI：`s3://bucket-name/prefix`
   + 不带前缀的 URI：`s3://bucket-name`

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**启用运行状况检查日志**  
使用带有相关属性的[modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html)命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes \
        Key=health_check_logs.s3.enabled,Value=true \
        Key=health_check_logs.s3.bucket,Value=amzn-s3-demo-logging-bucket \
        Key=health_check_logs.s3.prefix,Value=logging-prefix
```

------
#### [ CloudFormation ]

**启用运行状况检查日志**  
更新[AWS::ElasticLoadBalancingV2::LoadBalancer](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-loadbalancer.html)资源以包含相关属性。

```
Resources:
  myLoadBalancer:
    Type: 'AWS::ElasticLoadBalancingV2::LoadBalancer'
    Properties:
      Name: my-alb
      Type: application
      Scheme: internal
      Subnets: 
        - !Ref subnet-AZ1
        - !Ref subnet-AZ2
      SecurityGroups: 
        - !Ref mySecurityGroup
      LoadBalancerAttributes: 
        - Key: "health_check_logs.s3.enabled"
          Value: "true"
        - Key: "health_check_logs.s3.bucket"
          Value: "amzn-s3-demo-logging-bucket"
        - Key: "health_check_logs.s3.prefix"
          Value: "logging-prefix"
```

------

## 步骤 4：确认存储桶权限
<a name="verify-bucket-permissions-health-check"></a>

为您的负载均衡器启用运行状况检查日志后，Elastic Load Balancing 会验证 S3 存储桶并创建一个测试文件以确保存储桶策略指定了所需的权限。您可以使用 Amazon S3 控制台验证是否已创建测试文件。测试文件不是实际的运行状况检查日志文件；它不包含示例记录。

**验证 Elastic Load Balancing 是否在 S3 存储桶中创建了测试文件**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 选择您为运行状况检查日志指定的存储桶的名称。

1. 导航到测试文件 `ELBHealthCheckLogTestFile`。位置取决于您是否使用前缀。
   + 带有前缀的位置：*amzn-s3-demo-logging-bucket**prefix*/AWSLogs/*123456789012*/ELBHealthCheckLogTestFile
   + 不带前缀的位置：*amzn-s3-demo-logging-bucket*/AWSLogs/*123456789012*/ELBHealthCheckLogTestFile

## 问题排查
<a name="bucket-permissions-troubleshooting-health-check"></a>

如果您遇到访问被拒绝错误，则可能的原因如下：
+ 存储桶策略不授予 Elastic Load Balancing 向存储桶写入运行状况检查日志的权限。确认您使用的是该区域正确的存储桶策略。确认资源 ARN 使用的存储桶名称与您在启用运行状况检查日志时指定的存储桶名称相同。如果您在启用运行状况检查日志时未指定前缀，请确认资源 ARN 不包含前缀。
+ 存储桶使用不支持的服务器端加密选项。该存储段必须使用 Amazon S3 托管密钥（SSE-S3）。

# 禁用 Application Load Balancer 的运行状况检查日志
<a name="disable-health-check-logging"></a>

您可以随时禁用负载均衡器的运行状况检查日志。禁用运行状况检查日志后，您的运行状况检查日志将保留在您的 S3 存储桶中，直到您将其删除。有关更多信息，请参阅《Amazon S3 用户指南》中的[创建、配置和使用存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-buckets-s3.html)**。

------
#### [ Console ]

**禁用运行状况检查日志**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择您的负载均衡器的名称以打开其详细信息页面。

1. 在**属性**选项卡上，选择**编辑**。

1. 对于**监控**，请关闭 **Health 检查日志**。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**禁用运行状况检查日志**  
使用 [modify-load-balancer-attributes](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-load-balancer-attributes.html) 命令。

```
aws elbv2 modify-load-balancer-attributes \
    --load-balancer-arn load-balancer-arn \
    --attributes Key=health_check_logs.s3.enabled,Value=false
```

------

# 请求 Application Load Balancer 的跟踪
<a name="load-balancer-request-tracing"></a>

当负载均衡器从客户端接收到某个请求时，它将添加或更新 **X-Amzn-Trace-Id** 标头，然后再将该请求发送到目标。负载均衡器和目标之间的任何服务或应用程序也可以添加或更新此标头。

您可以使用请求跟踪来跟踪 HTTP 请求 (从客户端到目标或其他服务)。如果您启用访问日志，则将记录 **X-Amzn-Trace-Id** 标头的内容。有关更多信息，请参阅 [Application Load Balancer 的访问日志](load-balancer-access-logs.md)。

## 语法
<a name="request-tracing-syntax"></a>

**X-Amzn-Trace-Id** 标头包含使用以下格式的字段：

```
Field=version-time-id
```

*字段*  
字段的名称。支持的值是 `Root` 和 `Self`。  
应用程序可以出于自身目的添加任意字段。负载均衡器将保留这些字段，但不会使用它们。

*版本*  
版本号。该值为 1。

*时间*  
新纪元时间 (用秒表示)。该值的长度为 8 位十六进制数字。

*id*  
跟踪标识符。该值的长度为 24 位十六进制数字。

**示例**  
如果传入的请求中不存在 **X-Amzn-Trace-Id** 标头，则负载均衡器会生成一个包含 `Root` 字段的标头，然后再转发该请求。例如：

```
X-Amzn-Trace-Id: Root=1-67891233-abcdef012345678912345678
```

如果 **X-Amzn-Trace-Id** 标头存在并且包含 `Root` 字段，则负载均衡器将插入 `Self` 字段，然后再转发该请求。例如：

```
X-Amzn-Trace-Id: Self=1-67891233-12456789abcdef012345678;Root=1-67891233-abcdef012345678912345678
```

如果应用程序添加了包含一个 `Root` 字段和一个自定义字段的标头，则负载均衡器将保留这两个字段并插入一个 `Self` 字段，然后再转发该请求：

```
X-Amzn-Trace-Id: Self=1-67891233-12456789abcdef012345678;Root=1-67891233-abcdef012345678912345678;CalledFrom=app
```

如果 **X-Amzn-Trace-Id** 标头存在并包含 `Self` 字段，则负载均衡器将更新 `Self` 字段的值。

## 限制
<a name="request-tracing-limits"></a>
+ 负载均衡器在接收到传入的请求时将更新标头，而在接收到响应时不进行更新。
+ 如果 HTTP 标头大于 7 KB，则负载均衡器将重写编写包含 `Root` 字段的 **X-Amzn-Trace-Id** 标头。
+ 使用 WebSockets，您只能在升级请求成功之前进行跟踪。