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

配置和使用访问日志

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

您可以启用日志记录以作为创建分配时指定的一个选项。有关更多信息,请参阅您创建或更新 Web 分配时指定的值主题的日志记录部分。

日志记录的工作方式

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


					访问日志的基本流程

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

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

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

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

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

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

为您的访问日志选择 Amazon S3 存储桶

在为分配启用日志记录时,您需要指定希望 CloudFront 在其中存储日志文件的 Amazon S3 存储桶。如果您使用 Amazon S3 作为源,我们建议您不要对日志文件使用同一存储桶;使用单独的存储桶可简化维护。

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

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

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

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

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

  • s3:GetBucketAcl

  • s3:PutBucketAcl

请注意以下几点:

存储桶的 ACL

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

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

恢复存储桶的 ACL

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

  1. 在 CloudFront 中对您的分配禁用日志记录,然后再次启用它。有关更多信息,请参阅您创建或更新 Web 分配时指定的值主题中的日志记录

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

    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 的密钥策略中,以便能够将日志文件写入存储桶。您无法使用默认 KMS,因为 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 存储桶中保存的每个日志文件的名称使用以下文件名格式:

bucket-name.s3.amazonaws.com/optional-prefix/distribution-ID. YYYY-MM-DD-HH.unique-ID.gz

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

例如,如果您的存储桶名称为 mylogs,前缀为 myprefix/,且您的分配 ID 为 EMLARXS9EXAMPLE,则您的文件名与如下内容类似:

mylogs.s3.amazonaws.com/myprefix/EMLARXS9EXAMPLE.2014-11-14-20.RT4KCN4SGK9.gz

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

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

日志文件传输时间

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

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

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

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

注意

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

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

如果请求的 URL 太长,或包含的标头(包括 cookie)超过大小限制,则请求发送到 CloudFront 终端节点时,可能不会在访问日志中记录。根据导致 URL 过长的原因,CloudFront 执行下列操作之一:

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

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

分析访问日志

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

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

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

AWS 博客: Amazon CloudFront 请求日志记录(针对通过 HTTP 传送的内容)

AWS 博客: Amazon CloudFront 现在支持流访问日志(针对通过 RTMP 传送的内容)

AWS 博客:增强的 CloudFront 日志,现在使用查询字符串

重要

我们建议您使用日志了解内容请求的性质,而不是作为所有请求的完整描述。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 中的 DELETE Object

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

日志文件格式

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

  • 均使用 W3C 扩展日志文件格式。(有关更多信息,请转到 http://www.w3.org/TR/WD-logfile.html。)

  • 包含制表符分隔的值。

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

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

  • 用 URL 编码的等价值替换字段值中的空格和非标准字符。

    这些非标准字符由低于 32、高于 127 的 ASCII 码组成,再加上下表中的字符。URL 编码标准是 RFC 1738。有关更多信息,请转到 http://www.ietf.org/rfc/rfc1738.txt

URL 编码值

字符

%3C

<

%3E

>

%2522

"

%23

#

%25

%

%7B

{

%7D

}

%7C

|

%255C

\

%5E

^

%7E

~

%5B

[

%5D

]

%60

`

%27

'

%2520

空格

Web 分配日志文件的格式

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

字段编号 字段名称 描述
1 date 事件发生日期的格式为 yyyy-mm-dd,例如 2015-06-30。日期和时间用协调世界时 (UTC) 表示。对于 WebSocket 连接,这是关闭连接的日期。
2 time CloudFront 服务器完成响应请求的时间 (UTC),例如 01:42:39。对于 WebSocket 连接,这是关闭连接的时间。
3 x-edge-location 服务请求的边缘站点。每个边缘站点由三个字母的代码和任意分配的数字来确定,例如,DFW3。三个字母代码通常对应邻近边缘站点的机场的国际航空协会机场代码。(这些缩写将来可能会更改。) 有关边缘站点列表,请参阅 Amazon CloudFront 详细信息页面 (http://aws.amazon.com/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/daily-ad.jpg
9 sc-status

下列值之一:

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

URI 的查询字符串部分 (如果有)。当 URI 不包含查询字符串时,cs-uri-query 的值为连字符 (-)。

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

13 cs(Cookie)

请求中的 Cookie 标头,包括名值对和相关的属性。如果您启用了 Cookie 日志记录,无论您选择哪个 Cookie(无、全部或 Cookie 名称的白名单)转发到原点,CloudFront 将记录所有请求中的 Cookie。当请求中不包含 Cookie 标头时,cs(Cookie) 的值为连字符 (-)。

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

14 x-edge-result-type

当最后一个字节离开边缘站点后,CloudFront 如何对响应进行分类。在某些情况下,结果类型可能会在 CloudFront 准备发送响应的时间与 CloudFront 完成发送响应的时间之间发生变化。

例如,在 HTTP 流中,假设 CloudFront 在边缘缓存中发现一个段。x-edge-response-result-type 的值为 Hit,这是在 CloudFront 开始响应请求之前的结果类型。但是,如果用户在 CloudFront 传送整个段之前关闭查看器,则最终结果类型(x-edge-result-type 的值)更改为 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 请求虽然成功,但客户端未及下载完所有字节连接就已断开。

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

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

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

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

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

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

  • 如果在您的对象 URL 中使用的是备用域名,例如 http://example.com/logo.png,则 x-host-header 字段会包含备用域名,例如 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 地址。在此情况下,x-forwarded-for 为发出请求的查看器的 IP 地址。

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

注意

X-Forwarded-For 标头根据具体情况,可包含 IPv4 地址 (例如 192.0.2.44) 和 IPv6 地址 (例如 2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

21 ssl-protocol

如果字段 17 中的 cs-protocolhttps,客户端和 CloudFront 协商传输请求和响应的 SSL 协议。当 cs-protocolhttp 时,ssl-protocol 的值为连字符 (-)。

可能的值包括:

  • SSLv3

  • TLSv1

  • TLSv1.1

  • TLSv1.2

22 ssl-cipher

如果字段 17 中的 cs-protocolhttps,客户端和 CloudFront 协商加密请求和响应的 SSL 密码。当 cs-protocolhttp 时,ssl-cipher 的值为连字符 (-)。

可能的值包括:

  • 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

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)。

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

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

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

24 cs-protocol-version 查看器在请求中指定的 HTTP 版本。可能的值包括 HTTP/0.9HTTP/1.0HTTP/1.1HTTP/2.0
25 fle-status

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

如果 CloudFront 成功处理了请求正文,加密了指定字段中的值并将请求转发到源,则 fle-status 列的值为 Processedx-edge-result-type 的值 (列 14) 仍然会指示客户端或服务器端错误。

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

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

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

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

fle-status 的其他可能值包括:

  • 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 值为连字符 (-)。

注意

URL 和查询字符串中的问号 (?) 不包含在日志中。

以下是 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 2014-05-23 01:13:11 FRA2 182 192.0.2.10 GET d111111abcdef8.cloudfront.net /view/my/file.html 200 www.displaymyfiles.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 2014-05-23 01:13:12 LAX1 2390282 192.0.2.202 GET d111111abcdef8.cloudfront.net /soundtrack/happy.mp3 304 www.unknownsingers.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 - -

RTMP 分配日志文件的格式

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

注意

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

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

字段编号 字段名称 描述
1 date 事件发生的日期格式为 yyyy-mm-dd,例如 2014-05-23。日期和时间用协调世界时 (UTC) 表示。
2 time 服务器接收到请求的时间 (采用 UTC 时间),例如 01:42:39。
3 x-edge-location 回放事件发生的边缘站点。每个边缘站点由三个字母的代码和任意分配的数字来确定,例如,DFW3。三个字母代码通常对应邻近边缘站点的机场的国际航空协会机场代码。(这些缩写将来可能会更改。) 有关边缘站点列表,请参阅 Amazon CloudFront 详细信息页面 (http://aws.amazon.com/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
10 cs-uri-query 包含在连接字符串上的 URI 的查询字符串部分。
11 c-referrer 提交者的 URI。
12 x-page-url 页面的 URL,SWF 与其连接在一起。
13 c-user-agent 请求中的 User-Agent 标头的值。User-Agent 标头将标识提交请求的设备的类型。有关更多信息,请参阅 User-Agent 标头

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

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

注意

URL 和查询字符串中的问号 (?) 不包含在日志中。

以下是 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.longtailvideo.com/player.swf http://www.longtailvideo.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.longtailvideo.com/player.swf http://www.longtailvideo.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.longtailvideo.com/player.swf http://www.longtailvideo.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.longtailvideo.com/player.swf http://www.longtailvideo.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.longtailvideo.com/player.swf http://www.longtailvideo.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.longtailvideo.com/player.swf http://www.longtailvideo.com/support/jw-player-setup-wizard?example=204 LNX%2010,0,32,18 - - - -

访问日志的费用

访问日志记录是 CloudFront 的一个可选功能。启用访问日志记录不会产生额外的费用。但是,在 Amazon S3 上存储和访问文件(您可以随时将其删除)时,将会产生正常的 Amazon S3 费用。有关 CloudFront 费用的更多信息,请参阅控制台中的 CloudFront 报告