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

使用 AWS X-Ray

基于 Lambda 的典型应用程序包含一个或多个通过事件(如将对象上传到 Amazon S3、Amazon SNS 通知和 API 操作)触发的函数。这些函数在触发后通常会调用下游资源,如 DynamoDB 表或 Amazon S3 存储桶,或执行其他 API 调用。AWS Lambda 针对函数的所有调用,利用 Amazon CloudWatch 自动发送指标和日志。但是,此机制可能无法方便地跟踪调用您的 Lambda 函数的事件源,或跟踪函数进行的下游调用。有关跟踪的工作方式的完整概述,请参阅 AWS X-Ray

使用环境变量与 AWS X-Ray 通信

AWS Lambda 使用环境变量以便于与 X-Ray 守护程序进行通信和配置 X-Ray 开发工具包。

  • _X_AMZN_TRACE_ID:包含跟踪标头,其中包括采样决策、跟踪 ID 和父分段 ID。(要了解有关这些属性的更多信息,请参阅跟踪标头。) 如果调用您的函数时 Lambda 收到跟踪标头,该标头将用于填充 _X_AMZN_TRACE_ID 环境变量。如果 Lambda 未收到跟踪标头,将为您生成一个跟踪标头。

  • AWS_XRAY_CONTEXT_MISSING:您的函数尝试记录 X-Ray 数据,但跟踪标头不可用时,X-Ray 开发工具包使用此变量确定其行为。默认情况下,Lambda 将此值设为 LOG_ERROR

  • AWS_XRAY_DAEMON_ADDRESS:此环境变量公开了 X-Ray 守护程序的地址,格式为:IP_ADDRESS:PORT。您可以使用 X-Ray 守护程序的地址,直接将跟踪数据发送到 X-Ray 守护程序,而无需使用 X-Ray 开发工具包。

在 AWS X-Ray 控制台中跟踪 Lambda:示例

以下示例对两个不同的 Lambda 函数进行了 Lambda 跟踪。每个跟踪展示不同调用类型的跟踪结构:异步和同步。

  • 异步 – 以下示例展示具有一个成功调用和一个对 DynamoDB 进行下游调用的异步 Lambda 请求。

    Lambda 服务分段封装响应时间,即将响应 (例如 202) 返回至客户端所用的时间。其中包括在 Lambda 服务队列中花费的时间 (停留时间) 的子分段和每次调用尝试的子分段。(以上示例中只出现了一次调用尝试。) 服务分段中的每次尝试子分段具有相应的用户函数分段。在此示例中,用户函数分段包含两个子分段:初始化子分段,表示函数在处理程序之前运行的初始化代码,以及下游调用子分段,表示对 DynamoDB 的 ListTables 调用。

    每个调用子分段和每个下游调用都会显示状态代码和错误消息。

  • 同步 – 以下示例展示对 Amazon S3 进行下游调用的同步请求。

    Lambda 服务分段捕获请求在 Lambda 服务中花费的全部时间。该服务分段将有一个相应的用户函数分段。在此示例中,用户函数分段包含一个表示函数初始化代码(在处理程序之前运行的代码)的子分段;以及表示对 Amazon S3 的 PutObject 调用的子分段。