的访问日志网络负载均衡器 - Elastic Load Balancing
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

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

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

重要

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

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

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

使用访问日志无需额外付费。您的存储成本为 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。

region

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

年年年/毫米/DD

传输日志的日期。

load-balancer-id

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

end-time

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

random-string

系统生成的随机字符串。

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

访问日志条目

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

字段 Description

$type

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

version

日志条目的版本。当前版本为 2.0。

time

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

elb

负载均衡器的资源 ID。

侦听器

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

client:port

客户端的 IP 地址和端口。

目的地:端口

目的地 IP 地址和端口。如果客户端直接连接到负载均衡器,则目的地是侦听器。如果客户端使用 VPC 终端节点服务进行连接,则目的地是 VPC 终端节点。

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 协议(采用字符串格式)。可能的值是 tlsv10tlsv11,和 tlsv12...如果TLS谈判未完成,此值设置为-。

tls_named_group

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

domain_name

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

alpn_fe_protocol

与客户端协商的应用程序协议,采用字符串格式。可能的值是 h2http/1.1,和 http/1.0...如果TLS侦听程序中未配置ALPN策略,则未找到匹配协议,或者未发送有效协议列表,此值设置为-。

alpn_be_protocol

与目标协商的应用程序协议,采用字符串格式。可能的值是 h2http/1.1,和 http/1.0...如果TLS侦听程序中未配置ALPN策略,则未找到匹配协议,或者未发送有效协议列表,此值设置为-。

alpn_client_preference_list

客户端 hello 消息中 application_layer_protocol_negotiation 扩展的值。此值是 URL 编码的。每个协议都用双引号括起来,协议用逗号分隔。如果在 TLS 侦听器中未配置 ALPN 策略、未发送有效的客户端 hello 消息或扩展名不存在,则此值设置为 -。字符串长度在超过 256 个字节时将会截断。

示例日志条目

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

以下是没有 ALPN 策略的 TLS 侦听器的示例。

tls 2.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 - - -

以下是具有 ALPN 策略的 TLS 侦听器的示例。

tls 2.0 2020-04-01T08:51:42 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 h2 h2 "h2","http/1.1"

存储桶要求

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

Requirements

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

  • 您指定的前缀不能包括Awslogs。我们在您指定的桶名称和前缀之后以awslogs开头添加文件名的部分。

  • Amazon S3需要使用 托管加密密钥 (SSE-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. 在导航窗格中,选择 负载平衡器.

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

  4. 描述 选项卡,选择 编辑属性.

  5. 编辑负载均衡器属性 页面,请执行以下操作:

    1. 对于 访问日志,选择 启用.

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

    3. (可选)如果桶不存在,请选择 为我创建此位置. 您必须指定在 Amazon S3 中的所有现有存储桶名称中唯一的名称,并遵循 DNS 命名约定。有关详细信息,请参阅 桶命名规则Amazon Simple Storage Service 开发人员指南.

    4. 选择 保存.

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

使用 修改负载均衡器属性 命令。

禁用访问日志记录

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

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

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

  2. 在导航窗格中,选择 负载平衡器.

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

  4. 描述 选项卡,选择 编辑属性.

  5. 对于 访问日志,透明 启用.

  6. 选择 保存.

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

使用 修改负载均衡器属性 命令。

处理访问日志文件

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

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