配置和使用标准日志(访问日志) - Amazon CloudFront

配置和使用标准日志(访问日志)

您可以将 CloudFront 配置为创建包含有关 CloudFront 接收的每个用户请求的详细信息的日志文件。这些日志称为标准日志,也称为访问日志。如果启用标准记录,您还可以指定希望 CloudFront 在其中保存文件的 Amazon S3 存储桶。

您可以在创建或更新分配时启用标准日志。有关更多信息,请参阅 日志记录

CloudFront 还提供了实时日志,可以实时向您提供有关向分配发出的请求的信息(日志在收到请求后的几秒钟内传输)。您可以使用实时日志来进行监控和分析,并根据内容交付性能采取相应措施。有关更多信息,请参阅 使用实时日志

标准日志记录的工作方式

下图显示了 CloudFront 如何记录有关对您的对象的请求的信息。

访问日志的基本流程

下面介绍 CloudFront 如何记录有关对您的对象的请求的信息(如上图中所示)。

  1. 在此图中,您有 A 和 B 两个网站和两个对应的 CloudFront 分配。用户使用与您的分配相关联的 URL 来请求您的对象。

  2. CloudFront 会将每个请求路由到适当的边缘站点。

  3. CloudFront 将每个请求的数据写入分配特定的日志文件。在本示例中,与分配 A 有关的请求信息将写入分配 A 的日志文件,与分配 B 有关的请求信息将写入分配 B 的日志文件。

  4. CloudFront 会定期将有关分配的日志文件保存在您启用日志记录时指定的 Amazon S3 存储桶。然后,CloudFront 开始将有关后续请求的信息保存在关于该分配的新日志文件中。

如果在给定时间内无用户访问您的内容,您在该时间内不会接收任何日志文件。

日志文件中的每个条目分别提供有关单个请求的详细信息。有关文件格式的更多信息,请参阅标准日志文件格式

注意

建议您使用日志来了解内容的请求性质,而不是作为所有请求的完整描述。CloudFront 将尽力提供访问日志。特定请求的日志条目可能会在实际处理该请求之后很久才进行传输,而且极少数情况下,可能根本不会传输日志条目。当访问日志中省略了日志条目时,访问日志中的条目数将与 AWS 账单和使用率报告中出现的使用率不匹配。

为标准日志选择 Amazon S3 存储桶

当您对分配启用日志记录时,需要指定您希望 CloudFront 将日志文件存储到其中的 Amazon S3 存储桶。如果您使用 Amazon S3 作为源,建议您对日志文件使用单独的存储桶。

可将多个分配的日志文件存储在同一存储桶中。当您启用日志记录时,可为文件名指定一个可选前缀,以便您可以跟踪哪些日志文件与哪些分配相关联。

关于选择 S3 存储桶
  • 您的存储桶必须启用访问控制列表 (ACL)。如果从 CloudFront 控制台选择了未启用 ACL 的存储桶,则会出现一条错误消息。请参阅 配置标准日志记录和访问日志文件所需的权限

  • 不要选择 S3 对象所有权设置为强制桶拥有者的 Amazon S3 存储桶。该设置对存储桶以及其中的对象禁用 ACL,这会阻止 CloudFront 将日志文件传输到存储桶。

  • 请勿选择以下 AWS 区域中的 Amazon S3 存储桶。CloudFront 不会向这些区域中的存储桶提供标准日志:

    • Africa (Cape Town)

    • 亚太地区(香港)

    • 亚太地区(海得拉巴)

    • 亚太地区(雅加达)

    • 亚太地区(墨尔本)

    • 加拿大西部(卡尔加里)

    • 欧洲地区(米兰)

    • 欧洲(西班牙)

    • 欧洲(苏黎世)

    • 以色列(特拉维夫)

    • 中东(巴林)

    • 中东(阿联酋)

配置标准日志记录和访问日志文件所需的权限

重要

从 2023 年 4 月开始,您必须为用于 CloudFront 标准日志的新 S3 存储桶启用 S3 ACL。您可以在创建存储桶时启用 ACL,也可以为现有存储桶启用 ACL。

有关这些更改的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的新 S3 桶的原定设置常见问题解答和《AWS 新闻博客》中的提醒:Amazon S3 安全更改将于 2023 年 4 月发布

您的 AWS 账户必须对您为日志文件指定的存储桶拥有以下权限:

  • 存储桶的 ACL 必须向您授予 FULL_CONTROL 如果您是存储桶拥有者,则默认情况下,您的账户具有此权限。如果您不是,则存储桶拥有者必须更新存储桶的 ACL。

  • s3:GetBucketAcl

  • s3:PutBucketAcl

存储桶的 ACL

当您创建或更新分配并启用日志记录时,CloudFront 会使用这些权限更新存储桶的 ACL,以授予 awslogsdelivery 账户 FULL_CONTROL 权限。awslogsdelivery 账户将日志文件写入存储桶。如果您的账户没有更新 ACL 所需的权限,则创建或更新分配将会失败。

在某些情况下,如果以编程方式提交请求以创建存储桶,但具有指定名称的存储桶已存在,则 S3 将存储桶上的权限重置为默认值。如果您已将 CloudFront 配置为将访问日志保存在 S3 存储桶中,并停止获取该存储桶中的日志,请检查存储桶上的权限,以确保 CloudFront 具有必要的权限。

恢复存储桶的 ACL

如果您删除对 awslogsdelivery 账户的权限,则 CloudFront 无法将日志保存到 S3 存储桶。要使 CloudFront 能够再次开始保存您的分配的日志,请通过执行以下操作之一恢复 ACL 权限:

  • 在 CloudFront 中对您的分配禁用日志记录,然后再次启用它。有关更多信息,请参阅 日志记录

  • 通过在 Amazon S3 控制台中导航到 S3 存储桶并添加权限,手动为 awslogsdelivery 添加 ACL 权限。要为 awslogsdelivery 添加 ACL,您必须提供账户的规范 ID,如下所示:

    c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0

    有关将 ACL 添加到 S3 存储桶的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的配置 ACL

每个日志文件的 ACL

除了存储桶上的 ACL 之外,每个日志文件上还有一个 ACL。存储桶拥有者对每个日志文件均具有 FULL_CONTROL 权限,分配所有者(如果与存储桶拥有者不同)没有权限,而 awslogsdelivery 账户具有读取和写入权限。

禁用日志记录

如果您禁用日志记录,则 CloudFront 并不会删除存储桶或日志文件的 ACL。如果需要,您可以删除 ACL。

SSE-KMS 存储桶的必需密钥策略

如果您的标准日志的 S3 存储桶通过 AWS KMS keys (SSE-KMS) 的客户托管密钥使用服务器端加密,您必须为您的客户托管密钥的密钥策略添加以下语句。这样一来,CloudFront 可以将日志文件写入存储桶中。您无法将 SSE-KMS 与 AWS 托管式密钥结合使用,因为 CloudFront 无法将日志文件写入存储桶。

{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "Resource": "*" }

如果标准日志的 S3 存储桶将 SSE-KMS 与 S3 存储桶密钥结合使用,您还需要将 kms:Decrypt 权限添加到策略语句中。在这种情况下,完整的策略语句如下所示。

{ "Sid": "Allow CloudFront to use the key to deliver logs", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "kms:GenerateDataKey*", "kms:Decrypt" ], "Resource": "*" }

文件名格式

CloudFront 保存在您的 Amazon S3 存储桶中的每个日志文件的名称使用以下文件名格式:

<optional prefix>/<distribution ID>.YYYY-MM-DD-HH.unique-ID.gz

日期和时间用协调世界时 (UTC) 表示。

例如,如果您使用 example-prefix 作为前缀,并且您的分配 ID 为 EMLARXS9EXAMPLE,则您的文件名看起来类似于以下内容:

example-prefix/EMLARXS9EXAMPLE.2019-11-14-20.RT4KCN4SGK9.gz

当您对分配启用日志记录时,可为文件名指定一个可选前缀,以便您可以跟踪哪些日志文件与哪些分配相关联。如果您包含日志文件前缀的值,并且您的前缀不以正斜杠 (/) 结尾,CloudFront 则会自动追加一个。如果您的前缀以正斜杠结尾,则 CloudFront 不会添加另一个斜杠。

文件名末尾的 .gz 表示 CloudFront 已使用 gzip 压缩日志文件。

标准日志文件传输计时

CloudFront 一个小时内会为分配提交若干次标准日志。一般而言,日志文件包含有关 CloudFront 在给定时间段内收到的请求的信息。CloudFront 通常会在日志中所显示事件发生后的一个小时内将该时间段内的日志文件传输至 Amazon S3 存储桶。但是,请注意,某个时间段内的某些或所有日志文件条目有时可延迟长达 24 小时。当日志条目延迟后,CloudFront 会将它们保存在其文件名称包括发生请求的时间段的日期和时间(而不是文件传输的日期和时间)的日志文件中。

创建日志文件时,CloudFront 将在日志文件涵盖的时间段内从收到对象请求的所有边缘站点整合分配信息。

CloudFront 可为某个时间段保存多个文件,具体取决于 CloudFront 收到的针对与分配相关联的对象的请求数。

CloudFront 在您启用日志记录后大约四个小时开始可靠地传输访问日志。您可能会获得一些在此时间之前的访问日志。

注意

如果在此期间没有用户请求您的对象,您就不会收到该期间的任何日志文件。

CloudFront 还提供了实时日志,可以实时向您提供有关向分配发出的请求的信息(日志在收到请求后的几秒钟内传输)。您可以使用实时日志来进行监控和分析,并根据内容交付性能采取相应措施。有关更多信息,请参阅 使用实时日志

当请求 URL 或标头超出最大大小时如何记录请求

如果所有请求标头(包括 Cookie)的总大小超过 20KB,或者如果 URL 超过 8192 字节,则 CloudFront 无法完整解析并记录请求。由于未记录该请求,因此您在日志文件中看不到返回的 HTTP 错误状态代码。

如果请求正文超出最大大小,则会记录请求,包括 HTTP 错误状态代码。

分析标准日志

由于您每小时可以收到多个访问日志,因此建议您将给定时段内接收的所有日志文件合并成一个文件。然后,您可更准确更全面地分析该时期内的数据。

分析访问日志的一种方式是使用 Amazon Athena。Athena 是一项交互式查询服务,可以帮助您为 AWS 服务(包括 CloudFront)分析数据。要了解更多信息,请参阅《Amazon Athena 用户指南》中的查询 Amazon CloudFront 日志

此外,以下 AWS 博客文章讨论了分析访问日志的一些方式。

重要

建议您使用日志来了解内容的请求性质,而不是作为所有请求的完整描述。CloudFront 将尽力提供访问日志。特定请求的日志条目可能会在实际处理该请求之后很久才进行传输,而且极少数情况下,可能根本不会传输日志条目。当访问日志中省略了日志条目时,访问日志中的条目数将与 AWS 使用率和账单报告中出现的使用率不匹配。

编辑标准日志记录设置

您可通过使用 CloudFront 控制台或 CloudFront API 来启用或禁用日志记录、更改存储日志的 Amazon S3 存储桶以及更改日志文件的前缀。您对日志记录设置的更改将在 12 小时内生效。

有关更多信息,请参阅以下主题:

  • 要使用 CloudFront 控制台更新分配,请参阅更新分配

  • 要使用 CloudFront API 更新分配,请参阅 Amazon CloudFront API 参考中的 UpdateDistribution

从 Amazon S3 存储桶删除标准日志文件

CloudFront 不会自动从您的 Amazon S3 存储桶中删除日志文件。有关删除 Amazon S3 存储桶中日志文件的信息,请参阅以下主题:

  • 使用 Amazon S3 控制台:《Amazon Simple Storage Service 控制台用户指南》中的删除对象

  • 使用 REST API:《Amazon Simple Storage Service API 参考》中的 DeleteObject

标准日志文件格式

日志文件中的每个条目分别提供有关单个查看器请求的详细信息。日志文件具有以下特征:

  • 使用 W3C 扩展日志文件格式

  • 包含制表符分隔的值。

  • 包含不一定按时间顺序排列的记录。

  • 包含两个标题行:一个具有文件格式版本,另一个列出了包含在每个记录中的 W3C 字段。

  • 包含字段值中的空格和某些其他字符的 URL 编码等效值。

    URL 编码的等效值用于以下字符:

    • ASCII 字符代码 0 到 32(含这两个值)

    • ASCII 字符代码 127 及更大值

    • 下表中的所有字符

    URL 编码标准在 RFC 1738 中定义。

URL 编码值

字符

%3C

<

%3E

>

%22

"

%23

#

%25

%

%7B

{

%7D

}

%7C

|

%5C

\

%5E

^

%7E

~

%5B

[

%5D

]

%60

`

%27

'

%20

空格

标准日志文件字段

分配的日志文件包含 33 个字段。以下列表包含每个字段名称(按顺序)以及该字段中信息的描述。

  1. date

    事件发生日期的格式为 YYYY-MM-DD。例如,2019-06-30。日期和时间用协调世界时 (UTC) 表示。对于 WebSocket 连接,这是关闭连接的日期。

  2. time

    CloudFront 服务器完成响应请求的时间(采用 UTC 时间),例如 01:42:39。对于 WebSocket 连接,这是关闭连接的时间。

  3. x-edge-location

    服务请求的边缘站点。每个边缘站点由三个字母的代码和任意分配的数字来确定(例如,DFW3)。三个字母代码通常对应邻近边缘站点的地理位置的机场的国际航空协会(IATA)机场代码。(这些缩写将来可能会更改。)

  4. sc-bytes

    服务器在响应请求时向查看器提供的字节的总数,包括标头。对于 WebSocket 连接,这是通过连接从服务器发送到客户端的字节的总数。

  5. c-ip

    已发出请求的查看器的 IP 地址,例如 192.0.2.1832001:0db8:85a3::8a2e:0370:7334。如果查看器已使用 HTTP 代理或负载均衡器发送请求,则此字段的值为该代理或负载均衡器的 IP 地址。另请参阅 x-forwarded-for 字段。

  6. cs-method

    从查看器接收的 HTTP 请求方法。

  7. cs(Host)

    CloudFront 分配的域名(例如,d111111abcdef8.cloudfront.net)。

  8. cs-uri-stem

    请求 URL 中标识路径和对象的部分(例如 /images/cat.jpg)。URL 和查询字符串中的问号 (?) 不包含在日志中。

  9. sc-status

    包含下列值之一:

    • 服务器响应的 HTTP 状态代码(例如 200)。

    • 000,表示查看器已在服务器可以响应请求之前关闭连接。如果查看器在服务器开始发送响应后关闭连接,则此字段包含服务器开始发送的响应的 HTTP 状态代码。

  10. cs(Referer)

    请求中的 Referer 标头的值。这是发出请求的域的名称。常见引用站点包括搜索引擎、直接链接到您的对象的其他网站及您自己的网站。

  11. cs(User-Agent)

    请求中的 User-Agent 标头的值。User-Agent 标头标识请求的来源,例如提交请求的设备和浏览器的类型,如果请求来自搜索引擎,则标识具体的搜索引擎。

  12. cs-uri-query

    请求 URL 的查询字符串部分(如果有)。

    如果 URL 不包含查询字符串,则此字段的值为连字符 (-)。有关更多信息,请参阅 根据查询字符串参数缓存内容

  13. cs(Cookie)

    请求中的 Cookie 标头,包括名称/值对和关联的属性。

    如果您启用了 Cookie 日志记录,无论您选择将哪种 Cookie 转发到源,CloudFront 都将记录所有请求中的 Cookie。当请求不包含 Cookie 标头时,此字段的值为连字符 (-)。有关 cookies 的更多信息,请参阅 根据 Cookie 缓存内容

  14. x-edge-result-type

    在最后一个字节离开服务器后服务器如何对响应进行分类。在某些情况下,结果类型可能会在服务器准备发送响应的时间与完成发送响应的时间之间发生变化。另请参阅 x-edge-response-result-type 字段。

    例如,在 HTTP 流中,假设服务器在缓存中发现流的一个区段。在这种情况下,此字段的值通常为 Hit。但是,如果查看器在服务器传送整个区段之前关闭连接,则最终结果类型(以及此字段的值)为 Error

    WebSocket 连接将具有此字段的值 Miss,因为内容不可缓存,并直接通过代理回到源。

    可能的值包括:

    • Hit – 服务器从缓存中将对象提供给查看器。

    • RefreshHit – 服务器在缓存中找到了对象,但该对象已过期,因此,服务器联系了源,以验证缓存是否具有该对象的最新版本。

    • Miss – 缓存中的对象无法满足请求,因此,服务器将请求转发到源并将结果返回到查看器。

    • LimitExceeded – 请求被拒绝,因为超出了 CloudFront 配额(以前称为限制)。

    • CapacityExceeded – 服务器返回了 HTTP 503 状态代码,因为它在请求时没有足够的容量来服务对象。

    • Error – 通常,这意味着请求会导致客户端错误(sc-status 字段的值在 4xx 范围内)或服务器错误(sc-status 字段的值在 5xx 范围内)。如果 sc-status 字段的值为 200,或者如果此字段的值为 Errorx-edge-response-result-type 字段的值不是 Error,则表示 HTTP 请求已成功,但客户端在接收所有字节之前断开连接。

    • Redirect – 服务器已根据分发设置将查看器从 HTTP 重定向到 HTTPS。

  15. x-edge-request-id

    唯一地标识请求的不透明字符串。CloudFront 还会在 x-amz-cf-id 响应标头中发送此字符串。

  16. x-host-header

    查看器在该请求的 Host 标头中包含的值。如果您在对象 URL 中使用 CloudFront 域名(如 d111111abcdef8.cloudfront.net),则此字段将包含该域名。如果在您的对象 URL(例如 www.example.com)中使用的是备用域名(CNAME),则此字段将包含备用域名。

    如果您使用的是备用域名,请参阅与您的分配关联的域名的字段 7 中的 cs(Host)

  17. cs-protocol

    查看器请求的协议(httphttpswswss)。

  18. cs-bytes

    查看器包含在请求中的数据字节总数,包括标头。对于 WebSocket 连接,这是通过连接从客户端发送到服务器的字节的总数。

  19. time-taken

    服务器收到查看器的请求的时间与服务器将响应的最后一个字节写入输出队列的时间之间相隔的秒数(精确至千分之一秒,例如 0.082),以服务器上测量的时间为准。从查看器的角度看,由于网络延迟和 TCP 缓冲的原因,获得完整响应的总时间将会超过该值。

  20. x-forwarded-for

    如果查看器已使用 HTTP 代理或负载均衡器发送请求,则 c-ip 字段的值为该代理或负载均衡器的 IP 地址。在本例中,此字段为发出请求的查看器的 IP 地址。此字段可以包含多个逗号分隔的 IP 地址。每个 IP 地址可以是 IPv4 地址(如 192.0.2.183)或 IPv6 地址(如 2001:0db8:85a3::8a2e:0370:7334)。

    如果查看器未使用 HTTP 代理或负载均衡器,则此字段的值为连字符 (-)。

  21. ssl-protocol

    如果请求使用了 HTTPS,则此字段包含查看器和服务器协商用于传输请求和响应的 SSL/TLS 协议。有关可能的值的列表,请参阅查看器和 CloudFront 之间支持的协议和密码中支持的 SSL/TLS 协议。

    如果字段 17 中的 cs-protocolhttp,则此字段的值为连字符 (-)。

  22. ssl-cipher

    如果请求使用了 HTTPS,则此字段包含查看器和服务器协商用于加密请求和响应的 SSL/TLS 密码。有关可能的值的列表,请参阅查看器和 CloudFront 之间支持的协议和密码中支持的 SSL/TLS 密码。

    如果字段 17 中的 cs-protocolhttp,则此字段的值为连字符 (-)。

  23. x-edge-response-result-type

    服务器在将响应返回到查看器之前如何对响应进行分类。另请参阅 x-edge-result-type 字段。可能的值包括:

    • Hit – 服务器从缓存中将对象提供给查看器。

    • RefreshHit – 服务器在缓存中找到了对象,但该对象已过期,因此,服务器联系了源,以验证缓存是否具有该对象的最新版本。

    • Miss – 缓存中的对象无法满足请求,因此,服务器将请求转发到源服务器并将结果返回到查看器。

    • LimitExceeded – 请求被拒绝,因为超出了 CloudFront 配额(以前称为限制)。

    • CapacityExceeded – 服务器返回了 503 错误,因为它在请求时没有足够的容量来服务对象。

    • Error – 通常,这意味着请求会导致客户端错误(sc-status 字段的值在 4xx 范围内)或服务器错误(sc-status 字段的值在 5xx 范围内)。

      如果 x-edge-result-type 字段的值为 Error,而此字段的值不是 Error,则客户端在下载完成前已断开连接。

    • Redirect – 服务器已根据分发设置将查看器从 HTTP 重定向到 HTTPS。

  24. cs-protocol-version

    查看器在请求中指定的 HTTP 版本。可能的值包括 HTTP/0.9HTTP/1.0HTTP/1.1HTTP/2.0HTTP/3.0

  25. fle-status

    在为分配配置字段级加密时,此字段包含一个指示是否已成功处理请求正文的代码。如果服务器成功处理了请求正文,加密了指定字段中的值并将请求转发到源,则此字段的值为 Processed。在这种情况下,x-edge-result-type 的值仍可以指示客户端或服务器端错误。

    此字段的可能值包括:

    • ForwardedByContentType – 由于没有配置内容类型,因此服务器将请求转发到了源,而不进行解析或加密。

    • ForwardedByQueryArgs – 由于请求包含的查询参数不在字段级加密的配置中,因此服务器将请求转发到了源,而不进行解析或加密。

    • ForwardedDueToNoProfile – 由于在字段级加密的配置中没有指定配置文件,因此服务器将请求转发到了源,而不进行解析或加密。

    • MalformedContentTypeClientError – 由于 Content-Type 标头值的格式无效,因此,服务器拒绝了该请求并向查看器返回了 HTTP 400 状态代码。

    • MalformedInputClientError – 由于请求正文的格式无效,因此服务器拒绝了该请求,并向查看器返回了 HTTP 400 状态代码。

    • MalformedQueryArgsClientError – 由于查询参数为空或格式无效,因此服务器拒绝了该请求,并向查看器返回了 HTTP 400 状态代码。

    • RejectedByContentType – 由于在字段级加密的配置中没有指定内容类型,因此服务器拒绝了该请求,并向查看器返回了 HTTP 400 状态代码。

    • RejectedByQueryArgs – 由于在字段级加密的配置中没有指定查询参数,因此服务器拒绝了该请求,并向查看器返回了 HTTP 400 状态代码。

    • ServerError – 源服务器返回了错误。

    如果请求超出字段级加密配额(以前称作限制),则此字段包含下列错误代码之一,并且服务器向查看器返回 HTTP 状态代码 400。有关字段级加密的当前配额的列表,请参对字段级加密的配额

    • FieldLengthLimitClientError – 配置为加密的字段超出允许的最大长度。

    • FieldNumberLimitClientError – 将分配配置为加密的请求包含的字段数超过允许值。

    • RequestLengthLimitClientError – 在配置了字段级加密时,请求正文的长度超出允许的最大长度。

    如果没有为分配配置字段级加密,则此字段的值为连字符 (-)。

  26. fle-encrypted-fields

    服务器加密并转发到源的字段级加密字段的数量。CloudFront 服务器在加密数据时会将处理的请求传输到源,这样一来,即使 fle-status 的值为错误,此字段也会具有值。

    如果没有为分配配置字段级加密,则此字段的值为连字符 (-)。

  27. c-port

    查看器发出的请求的端口号。

  28. time-to-first-byte

    从收到请求到写入响应的第一个字节之间的秒数(在服务器上测量)。

  29. x-edge-detailed-result-type

    此字段包含与 x-edge-result-type 字段相同的值,但以下情况除外:

    • 当对象从源护盾层提供给查看器时,该字段包含 OriginShieldHit

    • 当对象不在 CloudFront 缓存中并且响应是由源请求 Lambda@Edge 函数生成时,此字段包含 MissGeneratedResponse

    • x-edge-result-type 字段的值为 Error 时,此字段包含以下值之一,其中包含有关错误的更多信息:

      • AbortedOrigin – 服务器遇到了源方面的问题。

      • ClientCommError – 由于服务器与查看器之间的通信问题,对查看器的响应已中断。

      • ClientGeoBlocked - 将分配配置为拒绝来自查看器地理位置的请求。

      • ClientHungUpRequest - 查看器在发送请求时提前停止。

      • Error – 出现错误,其错误类型不适合任何其他类别。当服务器从缓存提供错误响应时,可能会发生此类型的错误。

      • InvalidRequest – 服务器收到了来自查看器的无效请求。

      • InvalidRequestBlocked - 阻止对所请求资源的访问。

      • InvalidRequestCertificate - 分配与建立 HTTPS 连接的 SSL/TLS 证书不匹配。

      • InvalidRequestHeader - 请求包含无效的标头。

      • InvalidRequestMethod - 未将分配配置为处理所使用的 HTTP 请求方法。当分配仅支持可缓存请求时,可能会发生这种情况。

      • OriginCommError – 连接到源或从源读取数据时,请求超时。

      • OriginConnectError – 服务器无法连接到源。

      • OriginContentRangeLengthError - 源响应中的 Content-Length 标头与 Content-Range 标头中的长度不匹配。

      • OriginDnsError – 服务器无法解析源的域名。

      • OriginError - 源返回不正确的响应。

      • OriginHeaderTooBigError - 源返回的标头太大,边缘服务器无法处理。

      • OriginInvalidResponseError - 源返回无效响应。

      • OriginReadError – 服务器无法从源读取。

      • OriginWriteError – 服务器无法写入到源。

      • OriginZeroSizeObjectError - 从源发送的零大小对象会导致错误。

      • SlowReaderOriginError - 查看器读取导致源错误的消息时速度较慢。

  30. sc-content-type

    响应的 HTTP Content-Type 标头的值。

  31. sc-content-len

    响应的 HTTP Content-Length 标头的值。

  32. sc-range-start

    当响应包含 HTTP Content-Range 标头时,此字段包含范围起始值。

  33. sc-range-end

    当响应包含 HTTP Content-Range 标头时,此字段包含范围结束值。

以下是分配的一个日志文件示例:

#Version: 1.0 #Fields: date time x-edge-location sc-bytes c-ip cs-method cs(Host) cs-uri-stem sc-status cs(Referer) cs(User-Agent) cs-uri-query cs(Cookie) x-edge-result-type x-edge-request-id x-host-header cs-protocol cs-bytes time-taken x-forwarded-for ssl-protocol ssl-cipher x-edge-response-result-type cs-protocol-version fle-status fle-encrypted-fields c-port time-to-first-byte x-edge-detailed-result-type sc-content-type sc-content-len sc-range-start sc-range-end 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit SOX4xwn4XV6Q4rgb7XiVGOHms_BGlTAC4KyHmureZmBNrjGdRLiNIQ== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - - 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit k6WGMNkEzR5BEM_SaF47gjtX9zBDO2m349OY2an0QPEaUum1ZOLrow== d111111abcdef8.cloudfront.net https 23 0.000 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.000 Hit text/html 78 - - 2019-12-04 21:02:31 LAX1 392 192.0.2.100 GET d111111abcdef8.cloudfront.net /index.html 200 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Hit f37nTMVvnKvV2ZSvEsivup_c2kZ7VXzYdjC-GUQZ5qNs-89BlWazbw== d111111abcdef8.cloudfront.net https 23 0.001 - TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256 Hit HTTP/2.0 - - 11040 0.001 Hit text/html 78 - - 2019-12-13 22:36:27 SEA19-C1 900 192.0.2.200 GET d111111abcdef8.cloudfront.net /favicon.ico 502 http://www.example.com/ Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Error 1pkpNfBQ39sYMnjjUQjmH2w1wdJnbHYTbag21o_3OfcQgPzdL2RSSQ== www.example.com http 675 0.102 - - - Error HTTP/1.1 - - 25260 0.102 OriginDnsError text/html 507 - - 2019-12-13 22:36:26 SEA19-C1 900 192.0.2.200 GET d111111abcdef8.cloudfront.net / 502 - Mozilla/5.0%20(Windows%20NT%2010.0;%20Win64;%20x64)%20AppleWebKit/537.36%20(KHTML,%20like%20Gecko)%20Chrome/78.0.3904.108%20Safari/537.36 - - Error 3AqrZGCnF_g0-5KOvfA7c9XLcf4YGvMFSeFdIetR1N_2y8jSis8Zxg== www.example.com http 735 0.107 - - - Error HTTP/1.1 - - 3802 0.107 OriginDnsError text/html 507 - - 2019-12-13 22:37:02 SEA19-C2 900 192.0.2.200 GET d111111abcdef8.cloudfront.net / 502 - curl/7.55.1 - - Error kBkDzGnceVtWHqSCqBUqtA_cEs2T3tFUBbnBNkB9El_uVRhHgcZfcw== www.example.com http 387 0.103 - - - Error HTTP/1.1 - - 12644 0.103 OriginDnsError text/html 507 - -

标准日志的费用

标准日志记录是 CloudFront 的一个可选功能。启用标准日志记录无额外费用。但是,在 Amazon S3 上存储和访问文件(您可随时删除他们)会产生常规的 Amazon S3 费用。

有关 Amazon S3 定价的更多信息,请参阅 Amazon S3 定价

有关 CloudFront 定价的更多信息,请参阅 CloudFront 定价