Amazon CloudFront
开发人员指南 (API 版本 2016-09-29)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

配置和使用访问日志

您可以配置 CloudFront 以创建包含有关 CloudFront 接收的每个用户请求的详细信息的日志文件。这些访问日志同时适用于 Web 和 RTMP 分配。如果启用日志记录,您还可以指定希望 CloudFront 在其中保存文件的 Amazon S3 存储桶。

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

日志记录的工作方式

下图显示了 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 作为源,我们建议您不要对日志文件使用同一存储桶;使用单独的存储桶可简化维护。

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

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

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

  • 存储桶的 S3 访问控制列表 (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,如下所示:

    a52cb28745c0c06e84ec548334e44bfa7fc2a85c54af20cd59e4969344b7af56

    有关将 ACL 添加到 S3 存储桶的更多信息,请参阅Amazon Simple Storage Service 控制台用户指南中的如何设置 ACL 存储桶权限?

每个日志文件的 ACL

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

禁用日志记录

如果您禁用日志记录,则 CloudFront 并不会删除存储桶或日志文件的 ACL。如果您希望,您可自己撤销。

与 SSE-KMS 存储桶结合使用时必需的 CMK 密钥策略

如果使用具有客户托管的客户主密钥 (CMK) 的 AWS KMS 托管密钥 (SSE-KMS) 为 Amazon S3 存储桶启用了服务器端加密,则必须将以下内容添加到 CMK 的密钥策略中,以便能够将日志文件写入存储桶。您无法使用默认 CMK,因为 CloudFront 无法将日志文件上传到存储桶。

{ "Sid": "Allow CloudFront Flow Logs to use the key", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "kms:GenerateDataKey*", "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 在您启用日志记录后大约四个小时开始可靠地传输访问日志。您可能会获得一些在此时间之前的访问日志。

注意

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

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

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

如果正文大小超过大小限制,则记录请求,包括 HTTP 错误状态代码。

分析访问日志

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

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

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

重要

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

编辑您的日志记录设置

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

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

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

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

  • 要使用 CloudFront API 更新 RTMP 分配,请参阅Amazon CloudFront API Reference中的 UpdateStreamingDistribution

要使用 CloudFront API 更改 Web 分配的访问日志设置,您必须使用 2009-04-02 或更高版本的 API。要使用 CloudFront API 更改 RTMP 分配的访问日志设置,您必须使用 2010-05-01 或更高版本的 API。

删除 Amazon S3 存储桶中的日志文件

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

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

  • 使用 REST API:Amazon Simple Storage Service API Reference 中的 DeleteObject

日志文件格式

日志文件中的每个条目分别提供有关单个查看器请求的详细信息。Web 和 RTMP 分配的日志文件是不相同的,但它们具有如下共同特征:

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

  • 包含制表符分隔的值。

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

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

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

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

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

    • ASCII 字符代码 127 及更大值

    • 下表中的所有字符

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

URL 编码值

字符

%3C

<

%3E

>

%2522

"

%23

#

%25

%

%7B

{

%7D

}

%7C

|

%255C

\

%5E

^

%7E

~

%5B

[

%5D

]

%60

`

%27

'

%2520

空格

Web 分配日志文件的格式

Web 分配的日志文件包括以下所列顺序的字段。

注意

CloudFront 将很快添加七个新字段来访问日志。有关更多信息,请参阅新字段即将推出

字段编号 字段名称 描述
1 date 事件发生日期的格式为 YYYY-MM-DD。例如:2019-06-30。日期和时间用协调世界时 (UTC) 表示。对于 WebSocket 连接,这是关闭连接的日期。
2 time CloudFront 服务器完成响应请求的时间 (UTC),例如 01:42:39。对于 WebSocket 连接,这是关闭连接的时间。
3 x-edge-location 服务请求的边缘站点。每个边缘站点由三个字母的代码和任意分配的数字来确定,例如,DFW3。三个字母代码通常对应邻近边缘站点的机场的国际航空协会机场代码。(这些缩写将来可能会更改。) 有关边缘站点的列表,请参阅Amazon CloudFront 基础结构页面。
4 sc-bytes CloudFront 在响应请求时向查看器提供的总字节数,包括标头,例如 1045619。对于 WebSocket 连接,这是通过连接从服务器发送到客户端的字节的总数。
5 c-ip 已发出请求的查看器的 IP 地址,例如 192.0.2.1832001:0db8:85a3:0000:0000:8a2e:0370:7334。如果查看器使用 HTTP 代理或负载均衡器发送请求,则 c-ip 的值为该代理或负载均衡器的 IP 地址。另请参阅字段 20 中的 X-Forwarded-For
6 cs-method HTTP 请求方法:DELETEGETHEADOPTIONSPATCHPOSTPUT
7 cs(Host) CloudFront 分配的域名,例如 d111111abcdef8.cloudfront.net
8 cs-uri-stem 用于标识路径和对象的 URI 部分,例如 /images/cat.jpg。URL 和查询字符串中的问号 (?) 不包含在日志中。
9 sc-status

下列值之一:

10 cs(Referer) 发出请求的域的名称。常见引用站点包括搜索引擎、直接链接到您的对象的其他网站及您自己的网站。
11 cs(User-Agent) 请求中的 User-Agent 标头的值。User-Agent 标头标识请求的来源,例如提交请求的设备和浏览器的类型,而如果请求来自搜索引擎,则标识具体的搜索引擎。有关更多信息,请参阅 User-Agent 标头
12 cs-uri-query

URI 的查询字符串部分 (如果有)。如果 URI 不包含查询字符串,则此字段的值为连字符 (-)。

有关更多信息,请参阅 根据查询字符串参数缓存内容

13 cs(Cookie)

请求中的 Cookie 标头,包括名值对和相关的属性。如果您启用了 Cookie 日志记录,无论您选择将哪种 Cookie 转发到源,CloudFront 都将记录所有请求中的 Cookie。当请求不包含 Cookie 标头时,此字段的值为连字符 (-)。

有关 Cookie 的更多信息,请参阅 根据 Cookie 缓存内容

14 x-edge-result-type

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

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

在另一个示例中,WebSocket 连接将具有此字段的值 Miss,因为内容不可缓存,并直接代理回源服务器。

可能的值包括:

  • Hit – CloudFront 从边缘缓存中向查看器提供对象。

    有关 CloudFront 将结果类型分类为 Hit 的情形(即使来自源的响应包含 Cache-Control: no-cache 标头)的信息,请参阅同一对象的并行请求 (流量高峰)

  • RefreshHit – CloudFront 在边缘缓存中找到了对象,但对象已过期,因此,CloudFront 与源联系以确定缓存是否具有该对象的最新版本,如果没有,则获取最新版本。

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

  • LimitExceeded – 请求被拒绝,因为超过了 CloudFront 限制。

  • CapacityExceeded – CloudFront 返回 HTTP 503 状态代码 (Service Unavailable),因为 CloudFront 边缘服务器暂时无法响应请求。

  • Error – 通常,这意味着请求导致客户端错误(sc-status4xx)或服务器错误(sc-status5xx)。如果 sc-status200,则表示 HTTP 请求虽然成功,但客户端未及下载完所有字节连接就已断开。

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

  • Redirect – CloudFront 从 HTTP 重定向到 HTTPS。

    如果 sc-status403,并且将 CloudFront 配置为限制内容的地理分配,则请求可能来自某个受限制的位置。有关地理限制的更多信息,请参阅限制您的内容的地理分配

15 x-edge-request-id 唯一标识请求的加密字符串。在响应标头中,这是 x-amz-cf-id
16 x-host-header

查看器在该请求的 Host 标头中包含的值。这是请求中的域名称:

  • 如果在对象 URL 中使用 CloudFront 域名(如 http://d111111abcdef8.cloudfront.net/logo.png),则此字段包含该域名。

  • 如果在您的对象 URL 中使用的是备用域名,例如 http://example.com/logo.png,则此字段会包含备用域名,例如 example.com。要使用备用域名,您必须将其添加到您的分配中。有关更多信息,请参阅通过添加备用域名 (CNAME) 将自定义 URL 用于文件

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

17 cs-protocol 查看器在请求中指定的协议:httphttpswswss
18 cs-bytes 查看器包含在请求中的数据字节数,包括标头。对于 WebSocket 连接,这是通过连接从客户端发送到服务器的字节的总数。
19 time-taken CloudFront 边缘服务器收到查看器的请求的时间与 CloudFront 将响应的最后一个字节写入到边缘服务器的输出队列的时间之间相隔的秒数,精确至千分之一秒,例如 0.002(以服务器上测量的时间为准)。从查看器的角度看,由于网络延迟和 TCP 缓冲的原因,获得完整对象的总时间将会超过该值。
20 x-forwarded-for

如果查看器使用 HTTP 代理或负载均衡器发送请求,则字段 5 中 c-ip 的值为代理或负载均衡器的 IP 地址。在本例中,此字段为发出请求的查看器的 IP 地址。根据具体情况,此字段包含 IPv4 地址(例如 192.0.2.44)和 IPv6 地址(例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

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

21 ssl-protocol

如果字段 17 中的 cs-protocolhttps,则此字段包含客户端和 CloudFront 协商用于传输请求和响应的 SSL/TLS 密码。

可能的值包括:

  • SSLv3

  • TLSv1

  • TLSv1.1

  • TLSv1.2

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

22 ssl-cipher

如果字段 17 中的 cs-protocolhttps,则此字段包含客户端和 CloudFront 协商用于加密请求和响应的 SSL/TLS 密码。

可能的值包括:

  • ECDHE-RSA-AES128-GCM-SHA256

  • ECDHE-RSA-AES128-SHA256

  • ECDHE-RSA-AES128-SHA

  • ECDHE-RSA-AES256-GCM-SHA384

  • ECDHE-RSA-AES256-SHA384

  • ECDHE-RSA-AES256-SHA

  • AES128-GCM-SHA256

  • AES256-GCM-SHA384

  • AES128-SHA256

  • AES256-SHA

  • AES128-SHA

  • DES-CBC3-SHA

  • RC4-MD5

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

23 x-edge-response-result-type

在将响应返回到查看器之前 CloudFront 如何对响应进行分类。另请参阅字段 14 中的 x-edge-result-type

可能的值包括:

  • Hit – CloudFront 从边缘缓存中向查看器提供对象。

  • RefreshHit – CloudFront 在边缘缓存中找到对象,但已过期,因此,CloudFront 与源联系以验证缓存是否具有对象的最新版本。

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

  • LimitExceeded – 请求被拒绝,因为超过了 CloudFront 限制。

  • CapacityExceeded – CloudFront 返回 503 错误,因为边缘站点在请求时没有足够的容量来服务对象。

  • Error – 通常,这意味着请求导致客户端错误(sc-status4xx)或服务器错误(sc-status5xx)。

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

  • Redirect – CloudFront 从 HTTP 重定向到 HTTPS。

    如果 sc-status403,并且将 CloudFront 配置为限制内容的地理分配,则请求可能来自某个受限制的位置。有关地理限制的更多信息,请参阅限制您的内容的地理分配

24 cs-protocol-version

查看器在请求中指定的 HTTP 版本。可能的值包括:

  • HTTP/0.9

  • HTTP/1.0

  • HTTP/1.1

  • HTTP/2.0

25 fle-status

为分配配置字段级加密时,此字段包含一段指示是否已成功处理请求正文的代码。如果没有为分配配置字段级加密,则此字段的值为连字符 (-)。

如果 CloudFront 成功处理了请求正文,加密了指定字段中的值并将请求转发到源,则此字段的值为 Processed。在这种情况下 ,字段 14 x-edge-result-type 的值仍然可以指示客户端或服务器端错误。

如果请求超出字段级加密限制,则 fle-status 包含以下错误代码之一,并且 CloudFront 向查看器返回 HTTP 状态代码 400。有关字段级加密的当前限制列表,请参阅对字段级加密的限制

  • FieldLengthLimitClientError – 配置为加密的字段超出长度限制。

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

  • RequestLengthLimitClientError – 在配置了字段级加密时,请求正文长度超出限制。

此字段的其他可能值包括以下这些:

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

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

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

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

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

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

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

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

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

26 fle-encrypted-fields CloudFront 加密并转发到源的字段数。CloudFront 在加密数据时将处理的请求流式传输到源,这样,即使 fle-status 值存在错误,fle-encrypted-fields 也可能具有值。如果没有为分配配置字段级加密,则 fle-encrypted-fields 值为连字符 (-)。

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

#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 2019-05-23 01:13:11 FRA2 182 192.0.2.10 GET d111111abcdef8.cloudfront.net /view/my/file.html 200 www.example.com Mozilla/4.0%20(compatible;%20MSIE%205.0b1;%20Mac_PowerPC) - zip=98101 RefreshHit MRVMF7KydIvxMWfJIglgwHQwZsbG2IhRJ07sn9AkKUFSHS9EXAMPLE== d111111abcdef8.cloudfront.net http - 0.001 - - - RefreshHit HTTP/1.1 Processed 1 2019-05-23 01:13:12 LAX1 2390282 192.0.2.202 GET d111111abcdef8.cloudfront.net /soundtrack/happy.mp3 304 www.example.com Mozilla/4.0%20(compatible;%20MSIE%207.0;%20Windows%20NT%205.1) a=b&c=d zip=50158 Hit xGN7KWpVEmB9Dp7ctcVFQC4E-nrcOcEKS3QyAez--06dV7TEXAMPLE== d111111abcdef8.cloudfront.net http - 0.002 - - - Hit HTTP/1.1 - -

新字段即将推出

CloudFront 将很快添加以下七个字段来访问日志。

字段编号 字段名称 描述
27 c-port 查看器发出的请求的端口号。
28 time-to-first-byte 从收到请求到写入响应的第一个字节之间的秒数(在服务器上测量)。
29 x-edge-detailed-result-type 当结果类型为错误时,此字段包含特定类型的错误。
30 sc-content-type 响应的 HTTP Content-Type 标头的值。
31 sc-content-length 响应的 HTTP Content-Length 标头的值。
32 sc-range-start 当响应包含 HTTP Content-Range 标头时,此字段包含范围起始值。
33 sc-range-end 当响应包含 HTTP Content-Range 标头时,此字段包含范围结束值。

RTMP 分配日志文件的格式

RTMP 访问日志中的每条记录代表一个回放事件,例如,连接、播放、暂停、停止、断开等等。因此,每次观众观看视频时,CloudFront 将产生多个日志记录。要关联源自相同流的 ID 的日志记录,请使用 x-sid 字段。

注意

有些字段拥有所有事件的值,而有些字段仅拥有播放、停止、暂停、取消暂停及搜索事件的值。通常,当日志文件对某个字段使用连字符 (-) 时,表示该字段与相应事件无关。

下表描述了 RTMP 分配日志文件中每条记录中出现的字段,不考虑事件的类型。字段以所列顺序出现在日志中。

字段编号 字段名称 描述
1 date 事件发生的日期格式为 YYYY-MM-DD,例如 2019-05-23。日期和时间用协调世界时 (UTC) 表示。
2 time 服务器接收到请求的时间 (采用 UTC 时间),例如 01:42:39。
3 x-edge-location 回放事件发生的边缘站点。每个边缘站点由三个字母的代码和任意分配的数字来确定,例如,DFW3。三个字母代码通常对应邻近边缘站点的机场的国际航空协会机场代码。(这些缩写将来可能会更改。) 有关边缘站点的列表,请参阅Amazon CloudFront 基础结构页面。
4 c-ip 客户端 IP,例如,192.0.2.183。
5 x-event 事件类型。这是连接、断开、播放、停止、暂停、不暂停或搜索事件。
6 sc-bytes 截至事件发生时,从服务器发送到客户端的运行总字节数。
7 x-cf-status 指示事件状态的代码。目前,“OK”是此字段的唯一值。未来的新功能可能要求新的状态代码。
8 x-cf-client-id

可用于区分客户端的不透明的字符串标识符.

该值是每个连续的唯一值。

9 cs-uri-stem URI 的主干部分,包括应用程序和应用程序实例。这个有时被称为 FMS 连接字符串。例如:rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st。URL 和查询字符串中的问号 (?) 不包含在日志中。
10 cs-uri-query 包含在连接字符串上的 URI 的查询字符串部分。URL 和查询字符串中的问号 (?) 不包含在日志中。
11 c-referrer 提交者的 URI。
12 x-page-url 页面的 URL,SWF 与其连接在一起。
13 c-user-agent 请求中的 User-Agent 标头的值。User-Agent 标头将标识提交请求的设备的类型。有关更多信息,请参阅 User-Agent 标头

以下字段通常仅拥有播放、停止、暂停、取消暂停及搜索事件的值。对于其他事件,它们包含单个连字符 (-)。这些字段在日志中出现在上表中字段的后面,并且以所列顺序出现。

字段编号 字段名称 描述
14 x-sname 流名称。
15 x-sname-query 流查询字符串,如有。
16 x-file-ext 流类型,例如 FLV。
17 x-sid 流 ID。这是连接的唯一整数标识符。

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

#Version: 1.0 #Fields: date time x-edge-location c-ip x-event sc-bytes x-cf-status x-cf-client-id cs-uri-stem cs-uri-query c-referrer x-page-url​ c-user-agent x-sname x-sname-query x-file-ext x-sid 2010-03-12 23:51:20 SEA4 192.0.2.147 connect 2014 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 - - - - 2010-03-12 23:51:21 SEA4 192.0.2.222 play 3914 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 myvideo p=2&q=4 flv 1 2010-03-12 23:53:44 SEA4 192.0.2.4 stop 323914 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/other/myvideo p=2&q=4 flv 1 2010-03-12 23:53:44 SEA4 192.0.2.103 play 8783724 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/favs/myothervideo p=42&q=14 mp4 2 2010-03-12 23:56:21 SEA4 192.0.2.199 stop 429822014 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 dir/favs/myothervideo p=42&q=14 mp4 2 2010-03-12 23:59:44 SEA4 192.0.2.14 disconnect 429824092 OK bfd8a98bee0840d9b871b7f6ade9908f rtmp://shqshne4jdp4b6.cloudfront.net/cfx/st​ key=value http://player.example.com/player.swf http://www.example.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 - - - -

访问日志的费用

访问日志记录是 CloudFront 的一个可选功能。启用访问日志记录不会产生额外的费用。但是,在 Amazon S3 上存储和访问文件(您可以随时将其删除)时,将会产生正常的 Amazon S3 费用。

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

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