配置标准日志记录(v2) - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

配置标准日志记录(v2)

注意

标准日志记录(v2)功能在中国区域不可用。

您可以在创建或更新分配时启用标准日志记录。标准日志记录(v2)包括以下功能:

  • 将访问日志传输到 Amazon CloudWatch Logs、Amazon Data Firehose 和 Amazon Simple Storage Service(Amazon S3)。

  • 选择所需的日志字段。您也可以选择实时日志字段的子集

  • 选择其他输出日志文件格式。

如果您使用 Amazon S3,则有以下可选功能:

  • 发送日志到选择的 Amazon Web Services 区域。

  • 通过分区整理日志。

  • 启用与 Hive 兼容的文件名。

有关更多信息,请参阅 将日志发送到 Amazon S3

要开始使用标准日志记录,请完成以下步骤:

  1. 为将接收您的日志的指定 Amazon Web Services 服务 设置所需权限。

  2. 使用 CloudFront 控制台或 CloudWatch API 配置标准日志记录。

  3. 查看您的访问日志。

注意
  • 如果您启用标准日志记录(v2),这不会影响或更改标准日志记录(旧版)。对于您的分配,在使用标准日志记录(v2)之外,您还可以继续使用标准日志记录(旧版)。有关更多信息,请参阅 配置标准日志记录(旧版)

  • 如果您已经启用了标准日志记录(旧版),并且想要启用在 Amazon S3 中进行标准日志记录(v2),我们建议您指定不同的 Amazon S3 存储桶,或在同一存储桶中使用单独的路径(例如,使用日志前缀或分区)。这可以帮助您跟踪哪些日志文件与哪个分配相关联,并防止日志文件相互覆盖。

权限

CloudFront 使用 CloudWatch 公开发布的日志来传输访问日志。为此,您需要具有指定 Amazon Web Services 服务 的权限才能启用日志记录传输。

要查看在各个日志记录目标上需要的权限,请选择《Amazon CloudWatch Logs User Guide》中的以下主题。

在您设置了日志记录目标上的权限后,您可以为分配启用标准日志记录。

注意

CloudFront 支持向不同 Amazon Web Services 账户(跨账户)发送访问日志。要启用跨账户传输,两个账户(您的账户和接收账户)都必须具有所需的权限。有关更多信息,请参阅为跨账户传输启用标准日志记录一节或《Amazon CloudWatch Logs User Guide》中的 Cross-account delivery example

启用标准日志记录

要启用标准日志记录,您可以使用 CloudFront 控制台或 CloudWatch API。

启用标准日志记录(CloudFront 控制台)

为 CloudFront 分配启用标准日志记录(控制台)
  1. 使用 CloudFront 控制台创建新分配更新现有分配

  2. 标准日志记录部分下,对于日志传输,选择开启

  3. (可选)对于 Cookie 日志记录,指定日志中是否包含 Cookie。

    提示

    Cookie 日志记录是一项全局设置,应用到您的分配的所有标准日志记录。您不能为单独的传输目标覆盖此设置。

  4. 对于交付至部分,指定用于接收日志的服务:

    • CloudWatch Logs

    • Firehose

    • Amazon S3

  5. 对于目标,选择您的服务的资源。如果您尚未创建资源,则可以选择创建或查看以下文档。

    • 对于 CloudWatch Logs,输入日志组名称

    • 对于 Firehose,输入 Firehose 传输流

    • 对于 Amazon S3,输入存储桶名称

      提示

      要指定前缀,请在存储桶名称之后输入前缀,例如 amzn-s3-demo-bucket.s3.amazonaws.com/MyLogPrefix。如果您未指定前缀,CloudFront 会自动为您添加前缀。有关更多信息,请参阅 将日志发送到 Amazon S3

  6. 对于其他设置 – 可选,您可以指定以下选项:

    1. 对于字段选择,请选择要传输到目标的日志字段名称。您可以选择访问日志字段以及实时日志字段的子集。

    2. (仅限 Amazon S3)对于分区,请指定日志文件数据分区的路径。

    3. (仅限 Amazon S3)对于与 Hive 兼容的文件格式,您可以选中复选框,使用与 Hive 兼容的 S3 路径。这有助于简化将新数据加载到与 Hive 兼容的工具中的过程。

    4. 对于输出格式,指定您偏好的格式。

      注意

      如果您选择 Parquet,则需要将您的访问日志转换为 Apache Parquet,因而此选项会产生 CloudWatch 费用。有关更多信息,请参阅 CloudWatch 定价中的“公开日志”部分

    5. 字段分隔符中,指定如何分隔日志字段。

  7. 完成更新或创建分配的步骤。

  8. 要添加其他目标,请选择添加另一个目标,然后重复步骤 4-7。

  9. 日志页面中,验证分配旁边的标准日志状态是否为已启用

    有关标准日志传输和日志字段的更多信息,请参阅标准日志记录引用

启用标准日志记录(CloudWatch API)

您还可以使用 CloudWatch API 来为分配启用标准日志记录。

备注
  • 在调用 CloudWatch API 以启用标准日志记录时,您必须指定美国东部(弗吉尼亚州北部)区域(us-east-1),即使您想要启用跨区域传输到其他目标也是如此。例如,如果您要将访问日志发送到欧洲地区(爱尔兰)区域的 S3 存储桶(eu-west-1),请使用 us-east-1 区域的中的 CloudWatch API。

  • 系统还提供了一个选项,用于在标准日志记录中包含 Cookie。在 CloudFront API 中,这是 IncludeCookies 参数。如果您使用 CloudWatch API 配置访问日志并指定要包含 Cookie,则必须使用 CloudFront 控制台或 CloudFront API 来更新您的分配以包含 Cookie。否则,CloudFront 无法向您的日志目标发送 Cookie。有关更多信息,请参阅 Cookie 日志记录

为分配启用标准日志记录(CloudWatch API)
  1. 在您创建分配之后,需要获取 Amazon 资源名称(ARN)。

    您可以在 CloudFront 控制台的分配页面中找到 ARN,也可以使用 GetDistribution API 操作。分配 ARN 遵循以下格式:arn:aws:cloudfront::123456789012:distribution/d111111abcdef8

  2. 接下来,使用 CloudWatch PutDeliverySource API 操作为分配创建传输源。

    1. 输入传输源的名称。

    2. 传递分配的 resourceArn

    3. 对于 logType,指定 ACCESS_LOGS 作为要收集的日志的类型。

    4. 例 Amazon CLI put-delivery-source 命令示例

      以下示例为分配配置传输源。

      aws logs put-delivery-source --name S3-delivery --resource-arn arn:aws:cloudfront::123456789012:distribution/d111111abcdef8 --log-type ACCESS_LOGS

      输出

      { "deliverySource": { "name": "S3-delivery", "arn": "arn:aws:logs:us-east-1:123456789012:delivery-source:S3-delivery", "resourceArns": [ "arn:aws:cloudfront::123456789012:distribution/d111111abcdef8" ], "service": "cloudfront", "logType": "ACCESS_LOGS" } }
  3. 使用 PutDeliveryDestination API 操作配置日志的存储位置。

    1. 对于 destinationResourceArn,指定目标的 ARN。这可以是 CloudWatch 日志组、Firehose 传输流或 Amazon S3 存储桶。

    2. 对于 outputFormat,请指定日志的输出格式。

    3. 例 Amazon CLI put-delivery-destination 命令示例

      以下示例将传输目标配置为 Amazon S3 存储桶。

      aws logs put-delivery-destination --name S3-destination --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket

      输出

      { "name": "S3-destination", "arn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination", "deliveryDestinationType": "S3", "deliveryDestinationConfiguration": { "destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket" } }
    注意

    如果您要跨账户传输日志,则必须使用 PutDeliveryDestinationPolicy API 操作,将 Amazon Identity and Access Management(IAM)策略分配到目标账户。IAM 策略支持将日志从一个账户传输到另一个账户。

  4. 使用 CreateDelivery API 操作,将传输源关联到您在前面的步骤中创建的目标。此 API 操作会将传输源与最终目标关联起来。

    1. 对于 deliverySourceName,指定源名称。

    2. 对于 deliveryDestinationArn,指定传输目标的 ARN。

    3. 对于 fieldDelimiter,指定用于分隔各日志字段的字符串。

    4. 对于 recordFields,指定所需的日志字段。

    5. 如果您使用 S3,请指定是否使用 enableHiveCompatiblePathsuffixPath

    例 Amazon CLI create-delivery 命令示例

    以下示例创建传输。

    aws logs create-delivery --delivery-source-name cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination

    输出

    { "id": "abcNegnBoTR123", "arn": "arn:aws:logs:us-east-1:123456789012:delivery:abcNegnBoTR123", "deliverySourceName": "cf-delivery", "deliveryDestinationArn": "arn:aws:logs:us-east-1:123456789012:delivery-destination:S3-destination", "deliveryDestinationType": "S3", "recordFields": [ "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", "c-country", "cache-behavior-path-pattern" ], "fieldDelimiter": "" }
  5. 在 CloudFront 控制台的日志页面中,验证分配旁边的标准日志状态是否为已启用

    有关标准日志传输和日志字段的更多信息,请参阅标准日志记录引用

注意

要使用 Amazon CloudFormation 为 CloudFront 启用标准日志记录(v2),您可以使用以下 CloudWatch Logs 属性:

ResourceArn 是 CloudFront 分配,LogType 必须是支持的日志类型的 ACCESS_LOGS

为跨账户传输启用标准日志记录

如果您为 Amazon Web Services 账户 启用了标准日志记录功能,并且希望将访问日志传输到其他账户,请确保正确配置源账户和目标账户。CloudFront 分配的源账户将其访问日志发送到目标账户

在此示例过程中,源账户(111111111111)将其访问日志发送到目标账户(222222222222)中的 Amazon S3 存储桶。要将访问日志发送到目标账户中的 Amazon S3 存储桶,请使用 Amazon CLI。

配置目标账户

对于目标账户,请完成以下过程。

配置目标账户
  1. 要创建日志传输目标,您可以输入以下 Amazon CLI 命令。此示例使用 MyLogPrefix 字符串为您的访问日志创建前缀。

    aws logs put-delivery-destination --name cloudfront-delivery-destination --delivery-destination-configuration "destinationResourceArn=arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"

    输出

    { "deliveryDestination": { "name": "cloudfront-delivery-destination", "arn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination", "deliveryDestinationType": "S3", "deliveryDestinationConfiguration": {"destinationResourceArn": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/MyLogPrefix"} } }
    注意

    如果您指定 S3 存储桶而不带前缀,CloudFront 会自动附加 AWSLogs/<account-ID>/CloudFront 作为前缀,该前缀显示在 S3 传输目标的 suffixPath 中。有关更多信息,请参阅 S3DeliveryConfiguration

  2. 为日志传输目标添加资源策略,以允许源账户创建日志传输。

    在以下策略中,将 111111111111 替换为源账户 ID,并指定步骤 1 输出中的传输目标 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowCreateDelivery", "Effect": "Allow", "Principal": {"AWS": "111111111111"}, "Action": ["logs:CreateDelivery"], "Resource": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination" } ] }
  3. 保存文件,例如 deliverypolicy.json

  4. 要将之前的策略附加到传输目标,请输入以下 Amazon CLI 命令。

    aws logs put-delivery-destination-policy --delivery-destination-name cloudfront-delivery-destination --delivery-destination-policy file://deliverypolicy.json
  5. 将以下语句添加到目标 Amazon S3 存储桶策略中,替换资源 ARN 和源账户 ID。此策略允许 delivery.logs.amazonaws.com 服务主体执行 s3:PutObject 操作。

    { "Sid": "AWSLogsDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket-cloudfront-logs/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111111111111" }, "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"} } }
  6. 如果您为存储桶使用 Amazon KMS,请在 KMS 密钥策略中添加以下语句,用于向 delivery.logs.amazonaws.com 服务主体授予权限。

    { "Sid": "Allow Logs Delivery to use the key", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": {"aws:SourceAccount": "111111111111"}, "ArnLike": {"aws:SourceArn": "arn:aws:logs:us-east-1:111111111111:delivery-source:*"} } }

配置源账户

配置目标账户之后,请按照以下过程创建传输源,并在源账户中为分配启用日志记录。

配置源账户
  1. 为 CloudFront 标准日志记录创建传输源,以便您可以将日志文件发送到 CloudWatch Logs。

    您可以输入以下 Amazon CLI 命令,替换名称和您的分配 ARN。

    aws logs put-delivery-source --name s3-cf-delivery --resource-arn arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC --log-type ACCESS_LOGS

    输出

    { "deliverySource": { "name": "s3-cf-delivery", "arn": "arn:aws:logs:us-east-1:111111111111:delivery-source:s3-cf-delivery", "resourceArns": ["arn:aws:cloudfront::111111111111:distribution/E1TR1RHV123ABC"], "service": "cloudfront", "logType": "ACCESS_LOGS" } }
  2. 创建传输,将源账户的日志传输源对应到目标账户的日志传输目标。

    在以下 Amazon CLI 命令中,指定步骤 1:配置目标账户的输出中的传输目标 ARN。

    aws logs create-delivery --delivery-source-name s3-cf-delivery --delivery-destination-arn arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination

    输出

    { "delivery": { "id": "OPmOpLahVzhx1234", "arn": "arn:aws:logs:us-east-1:111111111111:delivery:OPmOpLahVzhx1234", "deliverySourceName": "s3-cf-delivery", "deliveryDestinationArn": "arn:aws:logs:us-east-1:222222222222:delivery-destination:cloudfront-delivery-destination", "deliveryDestinationType": "S3", "recordFields": [ "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", "c-country", "cache-behavior-path-pattern" ], "fieldDelimiter": "\t" } }
  3. 验证跨账户传输是否成功。

    1. 账户,登录 CloudFront 控制台并选择您的分配。在日志记录选项卡的类型下,您将看到一个为 S3 跨账户日志传输创建的条目。

    2. 目标账户,登录 Amazon S3 控制台,然后选择您的 Amazon S3 存储桶。在存储桶名称以及传输到该文件夹的所有访问日志中,您会看到前缀 MyLogPrefix

输出文件格式

根据选择的传输目标,您可以为日志文件指定下列格式之一:

  • JSON

  • 纯文本

  • w3c

  • Raw

  • Parquet(仅限 Amazon S3)

注意

您只能在首次创建传输目标时设置输出格式。以后,无法对其进行更新。要更改输出格式,请删除传输并重新创建。

有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 PutDeliveryDestination

编辑标准日志记录设置

您可以使用 CloudFront 控制台或 CloudWatch API,来启用或禁用日志记录和更新其他日志设置。您对日志记录设置的更改将在 12 小时内生效。

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

访问日志字段

您可以选择标准日志记录(旧版)支持的相同日志字段。有关更多信息,请参阅日志文件字段

此外,您还可以选择以下实时日志字段

  1. timestamp(ms) – 时间戳,以毫秒为单位。

  2. origin-fbl – CloudFront 与您的源之间第一字节延迟的秒数。

  3. origin-lbl – CloudFront 与您的源之间最后一个字节延迟的秒数。

  4. asn – 查看器的自治系统编号(ASN)。

  5. c-country – 表示查看器的地理位置的国家/地区代码,由查看器的 IP 地址决定。有关国家/地区代码的列表,请参阅 ISO 3166-1 alpha-2

  6. cache-behavior-path-pattern – 标识与查看器请求匹配的缓存行为的路径模式。

将日志发送到 CloudWatch Logs

要向 CloudWatch Logs 发送日志,请创建或使用现有的 CloudWatch Logs 日志组。有关配置 CloudWatch Logs 日志组的更多信息,请参阅使用日志组和日志流

创建日志组后,您必须具有所需的权限来启用标准日志记录。有关所需权限的更多信息,请参阅《Amazon CloudWatch Logs User Guide》中的 Logs sent to CloudWatch Logs

备注
  • 在您指定 CloudWatch Logs 日志组的名称时,请仅使用正则表达式模式 [\w-]。有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 PutDeliveryDestination API 操作。

  • 确认您的日志组资源策略未超过大小限制。请参阅 CloudWatch Logs 主题中的 Log group resource policy size limit considerations 部分。

将访问日志发送到 CloudWatch Logs 示例

{ "date": "2024-11-14", "time": "21:34:06", "x-edge-location": "SOF50-P2", "asn": "16509", "timestamp(ms)": "1731620046814", "origin-fbl": "0.251", "origin-lbl": "0.251", "x-host-header": "d111111abcdef8.cloudfront.net", "cs(Cookie)": "examplecookie=value" }

发送日志至 Firehose

要将日志发送到 Firehose,请创建或使用现有的 Firehose 传输流。

有关创建传输流的信息,请参阅创建 Amazon Data Firehose 传输流

创建传输流之后,您必须具有所需的权限来启用标准日志记录。有关的更多信息,请参阅《Amazon CloudWatch Logs User Guide》中的 Logs sent to Firehose

注意

在您指定 Firehose 流的名称时,请仅使用正则表达式模式 [\w-]。有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 PutDeliveryDestination API 操作。

将日志发送到 Firehose 示例

{"date":"2024-11-15","time":"19:45:51","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699951183","origin-fbl":"0.254","origin-lbl":"0.254","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"} {"date":"2024-11-15","time":"19:45:52","x-edge-location":"SOF50-P2","asn":"16509","timestamp(ms)":"1731699952950","origin-fbl":"0.125","origin-lbl":"0.125","x-host-header":"d111111abcdef8.cloudfront.net","cs(Cookie)":"examplecookie=value"}

将日志发送到 Amazon S3

要将访问日志发送到 Amazon S3,请创建或使用现有 S3 存储桶。当您在 CloudFront 中启用日志记录时,请指定存储桶名称。有关创建存储桶的信息,请参阅《Amazon Simple Storage Service 用户指南》中的创建存储桶

创建存储桶之后,您必须具有所需的权限来启用标准日志记录。有关的更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的 发送到 Amazon S3 的日志

注意

如果您已经启用了标准日志记录(旧版),并且想要启用在 Amazon S3 中进行标准日志记录(v2),我们建议您指定不同的 Amazon S3 存储桶,或在同一存储桶中使用单独的路径(例如,使用日志前缀或分区)。这可以帮助您跟踪哪些日志文件与哪个分配相关联,并防止日志文件相互覆盖。

指定 S3 存储桶

在指定 S3 存储桶作为传输目标时,请注意以下几点。

S3 存储桶名称只能使用正则表达式模式 [\w-]。有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 PutDeliveryDestination API 操作。

如果您为 S3 存储桶指定了前缀,则您的日志将出现在该路径下。如果您未指定前缀,CloudFront 会自动为您附加 AWSLogs/{account-id}/CloudFront 前缀。

有关更多信息,请参阅 访问日志的路径示例

分区

当 CloudFront 将访问日志发送到您的 S3 存储桶时,您可以使用分区来整理这些日志。这让您可以按照所需的路径组织和查找访问日志。

您可以使用以下变量来创建文件夹路径。

  • {DistributionId}

  • {yyyy}

  • {MM}

  • {dd}

  • {HH}

  • {accountid}

您可以使用任意数量的变量,还可以在路径中指定文件夹名称。然后,CloudFront 使用此路径在 S3 存储桶中为您创建文件夹结构。

示例
  • my_distribution_log_data/{DistributionId}/logs

  • /cloudfront/{DistributionId}/my_distribution_log_data/{yyyy}/{MM}/{dd}/{HH}/logs

与 Hive 兼容的文件名格式

您可以使用此选项,这样包含所传输访问日志的 S3 对象会使用允许与 Apache Hive 集成的前缀结构。有关更多信息,请参阅 CreateDelivery API 操作。

例 示例
/cloudfront/DistributionId={DistributionId}/my_distribution_log_data/year={yyyy}/month={MM}/day={dd}/hour={HH}/logs

有关分区和与 Hive 兼容的选项,请参阅《Amazon CloudWatch Logs API Reference》中的 S3DeliveryConfiguration 元素。

访问日志的路径示例

在指定 S3 存储桶作为目标时,您可以使用以下选项来创建访问日志的路径:

  • Amazon S3 存储桶,带或不带前缀

  • 分区,使用 CloudFront 提供的变量或输入您自己的分区

  • 启用与 Hive 兼容选项

下表根据您选择的选项,显示访问日志出现在存储桶中的方式。

带前缀的 Amazon S3 存储桶

Amazon S3 存储桶名称 您在后缀路径中指定的分区 更新的后缀路径 是否启用了与 Hive 兼容? 访问日志发送至
amzn-s3-demo-bucket/MyLogPrefix amzn-s3-demo-bucket/MyLogPrefix/
amzn-s3-demo-bucket/MyLogPrefix myFolderA/ myFolderA/ amzn-s3-demo-bucket/MyLogPrefix/myFolderA/
amzn-s3-demo-bucket/MyLogPrefix myFolderA/{yyyy} myFolderA/{yyyy} amzn-s3-demo-bucket/MyLogPrefix/myFolderA/year=2025

不带前缀的 Amazon S3 存储桶

Amazon S3 存储桶名称 您在后缀路径中指定的分区 更新的后缀路径 是否启用了与 Hive 兼容? 访问日志发送至
amzn-s3-demo-bucket AWSLogs/{account-id}/CloudFront/ amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/
amzn-s3-demo-bucket myFolderA/ AWSLogs/{account-id}/CloudFront/myFolderA/ amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/myFolderA/
amzn-s3-demo-bucket myFolderA/ AWSLogs/{account-id}/CloudFront/myFolderA/ amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/
amzn-s3-demo-bucket myFolderA/{yyyy} AWSLogs/{account-id}/CloudFront/myFolderA/{yyyy} amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/year=2025

Amazon Web Services 账户 ID 作为分区

Amazon S3 存储桶名称 您在后缀路径中指定的分区 更新的后缀路径 是否启用了与 Hive 兼容? 访问日志发送至
amzn-s3-demo-bucket AWSLogs/{account-id}/CloudFront/ 支持 amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/
amzn-s3-demo-bucket myFolderA/{accountid} AWSLogs/{account-id}/CloudFront/myFolderA/{accountid} amzn-s3-demo-bucket/AWSLogs/aws-account-id=<your-account-ID>/CloudFront/myFolderA/accountid=<your-account-ID>
备注
  • {account-id} 变量是 CloudFront 的保留变量。如果您指定不带前缀的 Amazon S3 存储桶,CloudFront 会自动将此变量添加到您的后缀路径中。如果您的日志与 Hive 兼容,则此变量显示为 aws-account-id

  • 您可以使用 {accountid} 变量,让 CloudFront 将您的账户 ID 添加到后缀路径中。如果您的日志与 Hive 兼容,则此变量显示为 accountid

  • 有关后缀路径的更多信息,请参阅 S3DeliveryConfiguration

发送到 Amazon S3 的访问日志示例

#Fields: date time x-edge-location asn timestamp(ms) x-host-header cs(Cookie) 2024-11-14 22:30:25 SOF50-P2 16509 1731623425421 d111111abcdef8.cloudfront.net examplecookie=value2

禁用标准日志记录

如果您不再需要标准日志记录,可以在分配上禁用日志记录。

禁用标准日志记录
  1. 登录 CloudFront 控制台。

  2. 选择分配,然后选择您的分配 ID。

  3. 选择日志记录,然后在标准日志目标下选择目标。

  4. 选择管理,然后选择删除

  5. 如果您有多个标准日志记录,请重复上一步操作。

注意

当您从 CloudFront 控制台中删除标准日志记录时,此操作仅删除传输和传输目标。它不会从您的 Amazon Web Services 账户中删除传输源。要删除传输源,请在 aws logs delete-delivery-source --name DeliverySourceName 命令中指定传输源名称。有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 DeleteDeliverySource

故障排除

当您使用 CloudFront 标准日志记录(v2)时,可以使用以下信息来修复常见问题。

传输源已存在

在为分配启标准日志记录时,您会创建传输源。然后,您可以使用该传输源,来创建对所需的目标类型的传输:CloudWatch Logs、Firehose、Amazon S3。目前,每个分配只能有一个传输源。如果您尝试为同一个分配创建其他传输源,则会显示以下错误消息。

This ResourceId has already been used in another Delivery Source in this account

要创建其他传输源,请先删除现有的传输源。有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 DeleteDeliverySource

我更改了后缀路径,但 Amazon S3 存储桶无法接收我的日志

如果您启用了标准日志记录(v2)并指定了不带前缀的存储桶 ARN,CloudFront 将在后缀路径后附加以下默认值:AWSLogs/{account-id}/CloudFront。如果您使用 CloudFront 控制台或 UpdateDeliveryConfiguration API 操作来指定不同的后缀路径,则必须更新 Amazon S3 存储桶策略来使用相同的路径。

例 示例:更新后缀路径
  1. 默认后缀路径是 AWSLogs/{account-id}/CloudFront,但您可以将其替换为 myFolderA

  2. 由于新的后缀路径与在 Amazon S3 存储桶策略中指定的路径不同,因此不会传输您的访问日志。

  3. 您可以执行以下步骤之一:

    • 将 Amazon S3 存储桶权限从 amzn-s3-demo-bucket/AWSLogs/<your-account-ID>/CloudFront/* 更新为 amzn-s3-demo-bucket/myFolderA/*

    • 更新日志记录配置,以便再次使用默认后缀:AWSLogs/{account-id}/CloudFront

有关更多信息,请参阅 权限

删除日志文件

CloudFront 不会自动删除目标中的日志文件。有关删除日志文件的信息,请参阅以下主题:

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

CloudWatch Logs
Firehose

定价

对于启用标准日志,CloudFront 不收取任何费用。但是,根据您选择的日志传输目标,可能会产生传输、摄取、存储或访问费用。有关更多信息,请参阅 Amazon CloudWatch Logs 定价。在付费套餐下,选择日志选项卡,然后在公开发布的日志下,查看每个传输目标的信息。

有关每项 Amazon Web Services 服务 服务定价的更多信息,请参阅以下主题: