您的 Network Load Balancer 的访问日志 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

您的 Network Load Balancer 的访问日志

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

重要

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

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

您可以使用 Amazon S3 托管加密密钥(SSE-S3)启用服务器端加密,也可使用 Key Management Service 与 S3 存储桶的客户管理的密钥(SSE-KMS CMK)来启用服务器端加密。每个访问日志文件在存储到 S3 存储桶中之前将自动加密,并在您访问它时进行解密。您不需要执行任何操作,因为这与您访问加密的日志文件或未加密的日志文件的方式基本相同。每个日志文件都使用一个唯一密钥进行加密,此密钥本身将使用定期轮换的主密钥进行加密。有关更多信息,请参阅《Amazon S3 用户指南》中的指定 Amazon S3 加密 (SSE-S3)使用 Amazon KMS 指定服务器端加密 (SSE-KMS)

使用访问日志无需额外付费。您需要支付 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_net.load-balancer-id_end-time_random-string.log.gz
bucket

S3 存储桶的名称。

prefix

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

aws-account-id

拥有者的 Amazon 账户 ID。

region

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

yyyy/mm/dd

传输日志的日期。

load-balancer-id

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

end-time

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

random-string

系统生成的随机字符串。

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

访问日志条目

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

字段 描述

类型

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

版本

日志条目的版本。当前版本为 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 协议(采用字符串格式)。可能的值为tlsv10tlsv11tlsv12。如果 TLS 协商未完成,则此值设置为 -。

tls_named_group

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

domain_name

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

alpn_fe_protocol

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

alpn_be_protocol

与目标协商的应用程序协议,采用字符串格式。可能的值为h2http/1.1http/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:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - ECDHE-RSA-AES128-SHA tlsv12 - my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-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:acm:us-east-2:671290407336:certificate/2a108f19-aded-46b0-8493-c63eb1ef4a99 - ECDHE-RSA-AES128-SHA tlsv12 - my-network-loadbalancer-c6e77e28c25b2234.elb.us-east-2.amazonaws.com h2 h2 "h2","http/1.1"

存储桶要求

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

要求

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

  • 您指定的前缀不得包含 AmazonLogs。我们会在您指定的存储桶名称和前缀后添加以 Amazon Logs 开头的文件名部分。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::bucket_name/prefix/AWSLogs/aws-account-id/*", "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:s3:::bucket_name" } ] }

加密

您可以使用下列任何一种方式为 Amazon S3 访问日志存储桶启用服务器端加密:

  • 使用 Amazon S3 托管加密密钥(SSE-S3)。

  • 将 Key Management Service(SSE-KMS)与客户管理的密钥结合使用。

Network Load Balancer 访问日志不支持将 KMS 与 Amazon 托管密钥结合使用。有关更多信息,请参阅《Amazon S3 用户指南》中的指定 Amazon S3 加密 (SSE-S3)使用 Amazon KMS 指定服务器端加密 (SSE-KMS)

启用访问日志记录

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

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

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/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 S3 用户指南》中的存储桶限制

    4. 选择保存

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

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

禁用访问日志记录

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

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

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Load Balancers (负载均衡器)

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

  4. Description (说明) 选项卡上,选择 Edit attributes (编辑属性)

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

  6. 选择保存

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

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

处理访问日志文件

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

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