边缘函数日志
可以使用 Amazon CloudWatch Logs 获取边缘函数(包括 Lambda@Edge 和 CloudFront Functions)的日志。可以使用 CloudWatch 控制台或 CloudWatch Logs API 访问日志。
重要
建议您使用日志来了解内容的请求性质,而不是作为所有请求的完整描述。CloudFront 将尽力提供边缘函数日志。特定请求的日志条目可能会在实际处理该请求之后很久才进行传输,而且极少数情况下,可能根本不会传输日志条目。当边缘函数日志中省略了日志条目时,边缘函数日志中的条目数将与 Amazon 账单和使用率报告中出现的使用率不匹配。
Lambda@Edge 日志
Lambda@Edge 会自动将函数日志发送到 CloudWatch Logs,并在调用函数的 Amazon Web Services 区域中创建日志流。在 Amazon Lambda 中创建或修改函数时,您可以使用默认 CloudWatch 日志组名称或自定义该名称。
-
默认日志组名称为
/aws/lambda/
,其中<FunctionName>
是您在创建函数时指定的名称。向 CloudWatch 发送日志时,Lambda@Edge 会自动向函数名称中添加<FunctionName>
us-east-1
前缀,因此日志组名称为/aws/lambda/us-east-1.
。此前缀对应于在其中创建函数的 Amazon Web Services 区域。此前缀保持为日志组名称的一部分,即使在调用该函数的其它区域中也是如此。<FunctionName>
-
如果您指定自定义日志组名称(例如
/
),Lambda@Edge 将不会添加区域前缀。该日志组名称在调用该函数的所有其它区域中保持不变。MyLogGroup
注意
如果您创建自定义日志组并指定与默认 /aws/lambda/
相同的名称,则 Lambda@Edge 会向函数名称中添加 <FunctionName>
us-east-1
前缀。
除了自定义日志组名称外,Lambda@Edge 函数还支持 JSON 和纯文本日志格式以及日志级别筛选。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的为 Lambda 函数配置高级日志记录控件。
注意
Lambda@Edge 会基于请求量和日志大小来限制日志。
您必须查看正确的 区域中的 CloudWatch 日志文件,才能查看 Lambda@Edge 函数日志文件。要查看 Lambda@Edge 函数运行的区域,请在 CloudFront 控制台上查看此函数的指标图表。指标针对各个 区域显示。在同一页上,您可以选择一个区域,然后查看该区域的日志文件以调查问题。
要了解有关如何将 CloudWatch Logs 与 Lambda@Edge 函数结合使用的更多信息,请参阅以下主题:
-
有关在 CloudFront 控制台的监控部分中查看图表的更多信息,请参阅使用 Amazon CloudWatch 监控 CloudFront 指标。
-
有关向 CloudWatch Logs 发送数据所需的权限的信息,请参阅设置 Lambda@Edge 的 IAM 权限和角色。
-
有关向 Lambda@Edge 函数添加日志记录的信息,请参阅《Amazon Lambda 开发人员指南》 中的 Node.js 中的 Amazon Lambda 函数日志记录或 Python 中的 Amazon Lambda 函数日志记录。
-
有关 CloudWatch 日志配额(以前称为限制)的信息,请参阅《Amazon CloudWatch Logs 用户指南》中的 CloudWatch Logs 配额。
CloudFront Functions 日志
如果 CloudFront 函数的代码包含 console.log()
语句,CloudFront Functions 会将这些日志行自动发送到 CloudWatch Logs。如果没有 console.log()
语句,则不会发送任何内容到 CloudWatch Logs 中。
CloudFront Functions 始终在美国东部(弗吉尼亚州北部)区域 (us-east-1
) 中创建日志流,无论哪个边缘站点运行该函数。日志组名称的格式为 /aws/cloudfront/function/
,其中 <FunctionName>
是您在创建函数时为函数指定的名称。日志流名称的格式为 <FunctionName>
YYYY/M/D/
。UUID
下面显示了发送到 CloudWatch Logs 的示例日志消息。每行都以唯一标识 CloudFront 请求的 ID 开头。消息以包含 CloudFront 分配 ID 的 START
行开头,以 END
行结尾。START
与 END
行之间是 console.log()
语句在函数中生成的日志行。
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== START DistributionID: E3E5D42GADAXZZ
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== Example function log output
U7b4hR_RaxMADupvKAvr8_m9gsGXvioUggLV5Oyq-vmAtH8HADpjhw== END
注意
CloudFront Functions 仅为处理生产请求和响应而运行的 LIVE
阶段中的函数向 CloudWatch 发送日志。测试函数时,CloudFront 不会向 CloudWatch 发送任何日志。测试输出包含有关错误、计算利用率和函数日志(console.log()
语句)的信息,但这些信息不会发送到 CloudWatch。
CloudFront Functions 使用 Amazon Identity and Access Management (IAM) 服务相关角色将日志发送到您的账户中的 CloudWatch Logs。服务相关角色是一种与 Amazon Web Services 服务直接关联的 IAM 角色。服务相关角色由服务预定义,包括服务为您调用其它 Amazon Web Services 服务所需的所有权限。CloudFront Functions 使用 AWSServiceRoleForCloudFrontLogger 服务相关角色。有关此角色的更多信息,请参阅Lambda@Edge 的服务相关角色(Lambda@Edge 使用同一个服务相关角色)。
当函数失败并出现验证错误或执行错误时,信息将记录在标准日志和实时日志中。有关错误的具体信息,请参阅 x-edge-result-type
、x-edge-response-result-type
和 x-edge-detailed-result-type
字段。