AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 Amazon CloudWatch

AWS Lambda 会自动替您监控 Lambda 函数,并通过 Amazon CloudWatch 报告各项指标。为帮助您监控代码的运行情况,Lambda 会自动跟踪请求数、每个请求的执行持续时间和产生错误的请求数并发布相关的 CloudWatch 指标。您可以借助这些指标设置 CloudWatch 自定义警报。有关 CloudWatch 的更多信息,请参阅 Amazon CloudWatch 用户指南

您可以借助 AWS Lambda 控制台、CloudWatch 控制台及其他 Amazon Web Services (AWS) 资源查看每个 Lambda 函数的请求速率和错误率。以下主题介绍 Lambda CloudWatch 指标及如何访问它们。

您可以在代码中插入日志记录语句来帮助验证代码是否按预期运行。Lambda 自动与 Amazon CloudWatch Logs 集成,并将您的代码的所有日志推送到与 Lambda 函数关联的 CloudWatch Logs 组(/aws/lambda/<函数名>)。有关日志组和通过 CloudWatch 控制台访问它们的更多信息,请参阅 Amazon CloudWatch 用户指南 中的监控系统、应用程序和自定义日志文件。有关如何访问 CloudWatch 日志条目的信息,请参阅访问 AWS Lambda 的 Amazon CloudWatch 日志

注意

如果 Lambda 函数代码正在执行,但几分钟后您仍未看到有任何日志数据生成,则可能是该 Lambda 函数的执行角色未授予将日志数据写入到 CloudWatch Logs 的权限。有关如何确保正确设置执行角色以授予这些权限的更多信息,请参阅AWS Lambda 执行角色

AWS Lambda 诊断场景

此部分举例讲解如何使用 CloudWatch 的日志记录和监控功能监控和诊断 Lambda 函数。

诊断场景 1:Lambda 函数不按预期运行

在该场景中,您刚刚完成了 教程:将 AWS Lambda 与 Amazon S3 结合使用。但您创建的“在创建 S3 对象时向 Amazon S3 上传缩略图的 Lambda 函数”不按预期运行。在向 Amazon S3 上传对象时,您发现该函数并未上传缩略图像。您可以通过以下方式诊断该问题。

确定您的 Lambda 函数为何不按预期运行

  1. 检查代码并验证其是否正常运行。如果错误率增加,则表明该函数可能未正常工作。

    您可以像对待任何其他 Node.js 函数一样在本地测试代码,也可以使用控制台的测试调用功能或使用 AWS CLI Invoke 命令在 Lambda 控制台中测试代码。每次为响应事件而执行该代码时,它都会向与 Lambda 函数关联的日志组(即 /aws/lambda/<函数名>)中写入一个日志条目。

    以下是日志中可能会显示的错误的一些示例:

    • 如果在日志中看到堆栈跟踪信息,则可能是代码存在错误。请审查代码并调试堆栈跟踪所指的错误。

    • 如果在日志中看到 permissions denied 错误,则可能是所提供的用作执行角色的 IAM 角色没有必要权限。请检查 IAM 角色是并验证其否拥有访问您的代码引用的任何 AWS 资源的所有必要权限。为确保正确设置执行角色,请参阅AWS Lambda 执行角色

    • 如果您在日志中看到 timeout exceeded 错误,则表示您的函数已终止,因为它在配置的超时之前未返回。这可能是因为超时设置过低,或代码执行时间过长。

    • 如果在日志中看到 memory exceeded 错误,则表明内存设置过低。请将其设置为更高的值。有关内存大小限制的信息,请参阅 CreateFunction

  2. 检查 Lambda 函数并验证其是否收到请求。

    即使函数代码按预期运行,也能正确响应测试调用,但函数仍可能无法收到来自 Amazon S3 的请求。如果 Amazon S3 能够调用该函数,您应看到 CloudWatch 请求指标数值增加。如果 CloudWatch 请求数没有增加,请检查与该函数关联的访问权限策略。

诊断场景 2:Lambda 函数执行持续时间增加

在该场景中,您刚刚完成了 教程:将 AWS Lambda 与 Amazon S3 结合使用。但您创建的“在创建 S3 对象时向 Amazon S3 上传缩略图的 Lambda 函数”不按预期运行。向 Amazon S3 上传对象时,您看到正在上传缩略图像,但代码执行时间长于预期。您可以通过几种不同的方法来诊断该问题。例如,您可以监控 Lambda 函数的持续时间指标以确认执行时间是否增加。或者,您也可以检查 Lambda 函数的 CloudWatch 错误数指标是否增加(如果增加,则可能是超时错误导致的)。

确定 Lambda 函数执行的持续时间增加的原因

  1. 使用不同的内存设置测试代码。

    如果代码执行时间过长,可能是代码没有足够的计算资源来执行其逻辑。请尝试增加分配给函数的内存,并使用 Lambda 控制台的测试调用功能再次测试代码。在函数的日志条目中,您会看到占用内存、代码执行时间和所分配的内存。更改内存设置可能会改变对执行时间的收费方式。有关定价的信息,请参阅 AWS Lambda

  2. 使用日志来调查执行瓶颈的来源

    您可以像对待任何其他 Node.js 函数一样在本地测试代码,也可以使用 Lambda 控制台的测试调用功能或 AWS CLI 的 asyncInvoke 命令在 Lambda 中测试代码。每次为响应事件而执行该代码时,它都会向与 Lambda 函数关联的日志组(即名为 aws/lambda/<函数名> 的日志组)中写入一个日志条目。在代码的各个部分(如对其他服务的调用)添加日志记录语句,了解执行代码的不同部分需要花费多长时间。

本页内容: