Elastic Load Balancing
Network Load Balancer
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

网络负载均衡器的访问日志

Elastic Load Balancing 提供了访问日志,该访问日志可捕获有关发送到网络负载均衡器的 TLS 请求的详细信息。您可以使用这些访问日志分析流量模式并解决问题。

重要

仅当负载均衡器具有 TLS 侦听器且它们仅包含有关 TLS 请求的信息时,才创建访问日志。

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

如果为 S3 存储桶启用了使用 Amazon S3 托管加密密钥 (SSE-S3) 的服务器端加密,则每个访问日志文件在存储到 S3 存储桶之前会自动加密,并在您访问它时自动解密。您不需要执行任何操作,因为这与您访问加密的日志文件或未加密的日志文件的方式基本相同。每个日志文件都使用一个唯一密钥进行加密,此密钥本身将使用定期轮换的主密钥进行加密。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的使用具有 Amazon S3托管加密密钥的服务器端加密 (SSE-S3) 保护数据

使用访问日志无需额外付费。您将需要支付 Amazon S3 的存储费用,但无需为 Elastic Load Balancing 用来将日志文件发送到 Amazon S3 的带宽付费。有关存储成本的更多信息,请参阅 Amazon S3 定价

访问日志文件

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

访问日志的文件名采用以下格式:

bucket[/prefix]/AWSLogs/aws-account-id/elasticloadbalancing/region/yyyy/mm/dd/aws-account-id_elasticloadbalancing_region_load-balancer-id_end-time_random-string.log.gz
存储桶

S3 存储桶的名称。

前缀

存储桶中的前缀 (逻辑层级结构)。如果您不指定前缀,则会将日志置于存储桶的根级。

aws-account-id

拥有者的 AWS 账户 ID。

区域

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

yyyy/mm/dd

传输日志的日期。

load-balancer-id

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

end-time

日志记录间隔结束的日期和时间。例如,结束时间 20181220T2340Z 包含在 23:35 和 23:40 之间发出的请求的条目。

random-string

系统生成的随机字符串。

日志文件可以在存储桶中存储任意长时间,不过您也可以定义 Amazon S3 生命周期规则以自动存档或删除日志文件。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南 中的对象生命周期管理

访问日志条目

下表按顺序描述了访问日志条目的字段。使用空格分隔所有字段。在引入新的字段时,会将这些字段添加到日志条目的末尾。在处理日志文件时,您应忽略日志条目结尾的任何不需要的字段。

字段 说明

type

侦听器的类型。支持的值为 tls

version

日志条目的版本。支持的版本为 1.0。

timestamp

在 TLS 连接结束时记录的时间戳(采用 ISO 8601 格式)。

elb

负载均衡器的资源 ID。

侦听器

连接的 TLS 侦听器的资源 ID。

client:port

客户端的 IP 地址和端口。

listener:port

侦听器的 IP 地址和端口。

connection_time

连接完成(从开始到结束)的总时间(以毫秒为单位)。

tls_handshake_time

建立 TCP 连接后完成 TLS 握手的总时间,包括客户端延迟(以毫秒为单位)。此时间包括在 connection_time 字段中。

received_bytes

解密后,负载均衡器从客户端处收到的字节数。

sent_bytes

在加密之前,负载均衡器发送到客户端的字节数。

incoming_tls_alert

负载均衡器从客户端处收到的 TLS 提醒的整数值(如果存在)。否则,该值将设置为 -。

chosen_cert_arn

提供给客户端的证书的 ARN。如果未发送有效的客户端 hello 消息,则此值设置为 -。

chosen_cert_serial

留待将来使用。此值始终设置为 -。

tls_cipher

与客户端协商的密码套件(采用 OpenSSL 格式)。如果 TLS 协商未完成,则此值设置为 -。

tls_protocol_version

与客户端协商的 TLS 协议(采用字符串格式)。可能的值为 tlsv10、tlsv11 和 tlsv12。如果 TLS 协商未完成,则此值设置为 -。

tls_named_group

留待将来使用。此值始终设置为 -。

domain_name

客户端 hello 消息中的 server_name 扩展名的值。此值是 URL 编码的。如果未发送有效的客户端 hello 消息或扩展名不存在,则此值设置为 - 。

示例日志条目

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

tls 1.0 2018-12-20T02:59:40 net/my-network-loadbalancer/c6e77e28c25b2234 g3d4b5e8bb8464cd 72.21.218.154:51341 172.100.100.185:443 5 2 98 246 - arn:aws-cn:acm:us-west-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - ECDHE-RSA-AES128-SHA tlsv12 - my-network-loadbalancer-c6e77e28c25b2234.elb.us-west-2.amazonaws.com

存储桶要求

在启用访问日志记录时,您必须为访问日志指定 S3 存储桶。该存储桶可由与拥有负载均衡器的账户不同的账户拥有。存储桶必须满足以下要求。

要求

  • 存储桶必须位于与负载均衡器相同的区域中。

  • 存储桶必须具有授予将访问日志写入存储桶的权限的存储桶策略。存储桶策略是 JSON 语句的集合,这些语句以访问策略语言编写,用于为存储桶定义访问权限。以下是示例策略。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws-cn:s3:::bucket_name/prefix/AWSLogs/123456789012/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws-cn:s3:::bucket_name" } ] }

启用访问日志记录

在为负载均衡器启用访问日志记录时,您必须指定负载均衡器将在其中存储日志的 S3 存储桶的名称。有关更多信息,请参阅 存储桶要求

使用控制台启用访问日志记录

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers

  3. 选择您的负载均衡器。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit load balancer attributes 页面上,执行以下操作:

    1. 对于 Access logs (访问日志),选择 Enable (启用)

    2. 对于 S3 location,键入 S3 存储桶的名称,包括任何前缀 (例如,my-loadbalancer-logs/my-app)。您可以指定现有存储桶的名称或新存储桶名称。如果您指定现有存储桶,请确保您拥有此存储桶,且配置了必要的存储桶策略。

    3. (可选) 如果存储桶不存在,请选择 Create this location for me。您必须指定在 Amazon S3 中的所有现有存储桶名称中唯一的名称,并遵循 DNS 命名约定。有关更多信息,请参阅 Amazon Simple Storage Service 开发人员指南中的存储桶命名规则

    4. 选择 Save

使用 AWS CLI 启用访问日志记录

使用 modify-load-balancer-attributes 命令。

禁用访问日志记录

您随时可为您的负载均衡器禁用访问日志记录。在禁用访问日志记录后,您的访问日志将在 S3 存储桶中保留,直至您将其删除。有关更多信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的使用存储桶

使用控制台禁用访问日志记录

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers

  3. 选择您的负载均衡器。

  4. Description 选项卡上,选择 Edit attributes

  5. 对于 Access logs (访问日志),清除 Enable (启用)

  6. 选择 Save

使用 AWS CLI 禁用访问日志记录

使用 modify-load-balancer-attributes 命令。

处理访问日志文件

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

如果您的网站上有大量需求,则负载均衡器可以生成包含大量数据的日志文件 (以 GB 为单位)。您可能无法通过逐行处理来处理数量如此庞大的数据。因此,您可能必须使用提供并行处理解决方案的分析工具。例如,您可以使用以下分析工具分析和处理访问日志: