配置标准日志记录(v2)
注意
标准日志记录(v2)功能在中国区域不可用。
您可以在创建或更新分配时启用标准日志记录。标准日志记录(v2)包括以下功能:
如果您使用 Amazon S3,则有以下可选功能:
-
发送日志到选择的 Amazon Web Services 区域。
-
通过分区整理日志。
-
启用与 Hive 兼容的文件名。
有关更多信息,请参阅 将日志发送到 Amazon S3。
要开始使用标准日志记录,请完成以下步骤:
-
为将接收您的日志的指定 Amazon Web Services 服务 设置所需权限。
-
使用 CloudFront 控制台或 CloudWatch API 配置标准日志记录。
-
查看您的访问日志。
注意
-
如果您启用标准日志记录(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 分配启用标准日志记录(控制台)
-
在标准日志记录部分下,对于日志传输,选择开启。
-
(可选)对于 Cookie 日志记录,指定日志中是否包含 Cookie。
提示
Cookie 日志记录是一项全局设置,应用到您的分配的所有标准日志记录。您不能为单独的传输目标覆盖此设置。
-
对于交付至部分,指定用于接收日志的服务:
-
CloudWatch Logs
-
Firehose
-
Amazon S3
-
-
对于目标,选择您的服务的资源。如果您尚未创建资源,则可以选择创建或查看以下文档。
-
对于 CloudWatch Logs,输入日志组名称。
-
对于 Firehose,输入 Firehose 传输流。
-
对于 Amazon S3,输入存储桶名称。
提示
要指定前缀,请在存储桶名称之后输入前缀,例如
amzn-s3-demo-bucket.s3.amazonaws.com/
。如果您未指定前缀,CloudFront 会自动为您添加前缀。有关更多信息,请参阅 将日志发送到 Amazon S3。MyLogPrefix
-
-
对于其他设置 – 可选,您可以指定以下选项:
-
(仅限 Amazon S3)对于分区,请指定日志文件数据分区的路径。
-
(仅限 Amazon S3)对于与 Hive 兼容的文件格式,您可以选中复选框,使用与 Hive 兼容的 S3 路径。这有助于简化将新数据加载到与 Hive 兼容的工具中的过程。
-
对于输出格式,指定您偏好的格式。
注意
如果您选择 Parquet,则需要将您的访问日志转换为 Apache Parquet,因而此选项会产生 CloudWatch 费用。有关更多信息,请参阅 CloudWatch 定价中的“公开日志”部分
。 -
在字段分隔符中,指定如何分隔日志字段。
-
完成更新或创建分配的步骤。
-
要添加其他目标,请选择添加另一个目标,然后重复步骤 4-7。
-
在日志页面中,验证分配旁边的标准日志状态是否为已启用。
有关标准日志传输和日志字段的更多信息,请参阅标准日志记录引用。
启用标准日志记录(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)
-
在您创建分配之后,需要获取 Amazon 资源名称(ARN)。
您可以在 CloudFront 控制台的分配页面中找到 ARN,也可以使用 GetDistribution API 操作。分配 ARN 遵循以下格式:
arn:aws:cloudfront::123456789012:distribution/d111111abcdef8
-
接下来,使用 CloudWatch PutDeliverySource API 操作为分配创建传输源。
-
输入传输源的名称。
-
传递分配的
resourceArn
。 -
对于
logType
,指定ACCESS_LOGS
作为要收集的日志的类型。 -
例 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" } }
-
-
使用 PutDeliveryDestination API 操作配置日志的存储位置。
-
对于
destinationResourceArn
,指定目标的 ARN。这可以是 CloudWatch 日志组、Firehose 传输流或 Amazon S3 存储桶。 -
对于
outputFormat
,请指定日志的输出格式。 -
例 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 策略支持将日志从一个账户传输到另一个账户。
-
-
使用 CreateDelivery API 操作,将传输源关联到您在前面的步骤中创建的目标。此 API 操作会将传输源与最终目标关联起来。
-
对于
deliverySourceName
,指定源名称。 -
对于
deliveryDestinationArn
,指定传输目标的 ARN。 -
对于
fieldDelimiter
,指定用于分隔各日志字段的字符串。 -
对于
recordFields
,指定所需的日志字段。 -
如果您使用 S3,请指定是否使用
enableHiveCompatiblePath
和suffixPath
。
例 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": "" }
-
-
在 CloudFront 控制台的日志页面中,验证分配旁边的标准日志状态是否为已启用。
有关标准日志传输和日志字段的更多信息,请参阅标准日志记录引用。
注意
要使用 Amazon CloudFormation 为 CloudFront 启用标准日志记录(v2),您可以使用以下 CloudWatch Logs 属性:
ResourceArn
是 CloudFront 分配,LogType
必须是支持的日志类型的 ACCESS_LOGS
。
为跨账户传输启用标准日志记录
如果您为 Amazon Web Services 账户 启用了标准日志记录功能,并且希望将访问日志传输到其他账户,请确保正确配置源账户和目标账户。CloudFront 分配的源账户将其访问日志发送到目标账户。
在此示例过程中,源账户(111111111111
)将其访问日志发送到目标账户(222222222222
)中的 Amazon S3 存储桶。要将访问日志发送到目标账户中的 Amazon S3 存储桶,请使用 Amazon CLI。
配置目标账户
对于目标账户,请完成以下过程。
配置目标账户
-
要创建日志传输目标,您可以输入以下 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/
作为前缀,该前缀显示在 S3 传输目标的<account-ID>
/CloudFrontsuffixPath
中。有关更多信息,请参阅 S3DeliveryConfiguration。 -
为日志传输目标添加资源策略,以允许源账户创建日志传输。
在以下策略中,将
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
" } ] } -
保存文件,例如
deliverypolicy.json
。 -
要将之前的策略附加到传输目标,请输入以下 Amazon CLI 命令。
aws logs put-delivery-destination-policy --delivery-destination-name
cloudfront-delivery-destination
--delivery-destination-policy file://deliverypolicy.json -
将以下语句添加到目标 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:*"} } } -
如果您为存储桶使用 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:*"} } }
配置源账户
配置目标账户之后,请按照以下过程创建传输源,并在源账户中为分配启用日志记录。
配置源账户
-
为 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" } } -
创建传输,将源账户的日志传输源对应到目标账户的日志传输目标。
在以下 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" } }
-
验证跨账户传输是否成功。
-
从
源
账户,登录 CloudFront 控制台并选择您的分配。在日志记录选项卡的类型下,您将看到一个为 S3 跨账户日志传输创建的条目。 -
从
目标
账户,登录 Amazon S3 控制台,然后选择您的 Amazon S3 存储桶。在存储桶名称以及传输到该文件夹的所有访问日志中,您会看到前缀
。MyLogPrefix
-
输出文件格式
根据选择的传输目标,您可以为日志文件指定下列格式之一:
-
JSON
-
纯文本
-
w3c
-
Raw
-
Parquet(仅限 Amazon S3)
注意
您只能在首次创建传输目标时设置输出格式。以后,无法对其进行更新。要更改输出格式,请删除传输并重新创建。
有关更多信息,请参阅《Amazon CloudWatch Logs API Reference》中的 PutDeliveryDestination。
编辑标准日志记录设置
您可以使用 CloudFront 控制台
有关更多信息,请参阅以下主题:
-
要使用 CloudFront 控制台更新分配,请参阅更新分配。
-
要使用 CloudFront API 更新分配,请参阅《Amazon CloudFront API Reference》中的 UpdateDistribution。
-
有关 CloudWatch Logs API 操作的更多信息,请参阅《Amazon CloudWatch Logs API Reference》。
访问日志字段
您可以选择标准日志记录(旧版)支持的相同日志字段。有关更多信息,请参阅日志文件字段。
此外,您还可以选择以下实时日志字段。
-
timestamp(ms)
– 时间戳,以毫秒为单位。 -
origin-fbl
– CloudFront 与您的源之间第一字节延迟的秒数。 -
origin-lbl
– CloudFront 与您的源之间最后一个字节延迟的秒数。 -
asn
– 查看器的自治系统编号(ASN)。 c-country
– 表示查看器的地理位置的国家/地区代码,由查看器的 IP 地址决定。有关国家/地区代码的列表,请参阅 ISO 3166-1 alpha-2。 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 会自动为您添加所需的存储桶策略。
-
您还可以使用所选 Amazon Web Services 区域 中的 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/ |
amzn-s3-demo-bucket |
myFolderA/ |
AWSLogs/{account-id}/CloudFront/myFolderA/ |
否 | amzn-s3-demo-bucket/AWSLogs/ |
amzn-s3-demo-bucket |
myFolderA/ |
AWSLogs/{account-id}/CloudFront/myFolderA/ |
是 | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
amzn-s3-demo-bucket |
myFolderA/{yyyy} |
AWSLogs/{account-id}/CloudFront/myFolderA/{yyyy} |
是 | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
Amazon Web Services 账户 ID 作为分区
Amazon S3 存储桶名称 | 您在后缀路径中指定的分区 | 更新的后缀路径 | 是否启用了与 Hive 兼容? | 访问日志发送至 |
---|---|---|---|---|
amzn-s3-demo-bucket |
无 | AWSLogs/{account-id}/CloudFront/ |
支持 | amzn-s3-demo-bucket/AWSLogs/aws-account-id= |
amzn-s3-demo-bucket |
myFolderA/{accountid} |
AWSLogs/{account-id}/CloudFront/myFolderA/{accountid} |
是 | amzn-s3-demo-bucket/AWSLogs/aws-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
禁用标准日志记录
如果您不再需要标准日志记录,可以在分配上禁用日志记录。
禁用标准日志记录
-
登录 CloudFront 控制台。
-
选择分配,然后选择您的分配 ID。
-
选择日志记录,然后在标准日志目标下选择目标。
-
选择管理,然后选择删除。
-
如果您有多个标准日志记录,请重复上一步操作。
注意
当您从 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 存储桶策略来使用相同的路径。
例 示例:更新后缀路径
-
默认后缀路径是
AWSLogs/{account-id}/CloudFront
,但您可以将其替换为myFolderA
。 -
由于新的后缀路径与在 Amazon S3 存储桶策略中指定的路径不同,因此不会传输您的访问日志。
-
您可以执行以下步骤之一:
-
将 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
-
《Amazon CloudWatch Logs User Guide》中的 Working with log groups and log streams
-
《Amazon CloudWatch Logs API Reference》中的 DeleteLogGroup
Firehose
-
《Amazon Data Firehose API Reference》中的 DeleteDeliveryStream
定价
对于启用标准日志,CloudFront 不收取任何费用。但是,根据您选择的日志传输目标,可能会产生传输、摄取、存储或访问费用。有关更多信息,请参阅 Amazon CloudWatch Logs 定价
有关每项 Amazon Web Services 服务 服务定价的更多信息,请参阅以下主题:
-
注意
日志传输到 Amazon S3 不会产生额外费用,但存储和访问日志文件将产生 Amazon S3 费用。如果您启用 Parquet 选项将您的访问日志转换为 Apache Parquet,则此选项会产生 CloudWatch 费用。有关更多信息,请参阅 CloudWatch 定价中的“公开日志”部分
。