您的 Network Load Balancer 的访问日志 - Elastic Load Balancing

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

您的 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 存储桶中之前将自动加密,并在您访问它时进行解密。您不需要执行任何操作,因为这与您访问加密的日志文件或未加密的日志文件的方式基本相同。每个日志文件都使用唯一的密钥加密,该密钥本身使用定期轮换的 KMS 密钥进行加密。有关更多信息,请参阅 Amazon S3 用户指南中的指定 Amazon S3 加密 (SSE-S3) 和使用 AWS 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

所有者的 AWS 账户 身份证。

region

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

yyyy/mm/dd

传输日志的日期。

load-balancer-id

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

end-time

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

random-string

系统生成的随机字符串。

以下是示例日志文件名:

s3://my-bucket/prefix/AWSLogs/123456789012/elasticloadbalancing/us-east-2/2020/05/01/123456789012_elasticloadbalancing_us-east-2_net.my-loadbalancer.1234567890abcdef_20200501T0000Z_20sg8hgm.log.gz

日志文件可以在存储桶中存储任意长时间,不过您也可以定义 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 协议(采用字符串格式)。可能的值为 tlsv10tlsv11tlsv12tlsv13。如果 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 个字节时将会截断。

tls_connection_creation_time

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

示例日志条目

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

以下是没有 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 - - - 2018-12-20T02:59:30

以下是具有 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" 2020-04-01T08:51:20

存储桶要求

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

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

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

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

    { "Version": "2012-10-17", "Id": "AWSLogDeliveryWrite", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::my-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": ["012345678912"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:012345678912:*"] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::my-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": ["012345678912"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:012345678912:*"] } } } ] }

在之前的策略中,对于 aws:SourceAccount,请指定将日志传送到此存储桶的账号列表。对于 aws:SourceArn,请按 arn:aws:logs:source-region:source-account-id:* 格式指定生成日志的资源 ARN 列表。

加密

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

  • Amazon S3 托管式密钥(SSE-S3)

  • AWS KMS 存储在 AWS Key Management Service (SSE-KMS) 中的密钥†

† 对于 Network Load Balancer 访问日志,您无法使用 AWS 托管密钥,必须使用客户托管密钥。

有关更多信息,请参阅 Amazon S3 用户指南中的指定 Amazon S3 加密 (SSE-S3) 和使用 AWS KMS (SSE-KMS) 指定服务器端加密

密钥策略必须允许服务对日志进行加密和解密。以下是示例策略。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }

启用访问日志记录

在为负载均衡器启用访问日志记录时,您必须指定负载均衡器将在其中存储日志的 S3 桶。请确保您拥有此桶,且配置了此桶的必要桶策略。有关更多信息,请参阅 存储桶要求

使用控制台启用访问日志记录
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. 属性选项卡上,选择编辑

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

    1. 对于监控,打开访问日志

    2. 选择浏览 S3 并选中要使用的桶。或者,输入 S3 桶的位置,包括任何前缀。

    3. 选择保存更改

要启用访问日志记录,请使用 AWS CLI

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

禁用访问日志记录

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

使用控制台禁用访问日志记录
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

  4. 属性选项卡上,选择编辑

  5. 对于监控,关闭访问日志

  6. 选择保存更改

要禁用访问日志记录,请使用 AWS CLI

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

处理访问日志文件

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

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