将 AWS Lambda 与 AWS X-Ray 结合使用 - AWS Lambda
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 AWS Lambda 与 AWS X-Ray 结合使用

您可以使用 AWS X-Ray 来可视化应用程序的组件、确定性能瓶颈以及对导致错误的请求进行故障排除。您的 Lambda 函数会将跟踪数据发送到 X-Ray,X-Ray 将处理这些数据以生成服务映射和可搜索的跟踪摘要。


      显示 Lambda 函数、X-Ray、Amazon S3 和 CloudWatch Logs 节点的服务地图

如果您在调用函数的服务中启用了 X-Ray 跟踪,则 X-Ray 会自动将跟踪发送到 Lambda。上游服务(例如 Amazon API Gateway)或通过 X-Ray 开发工具包检测的托管于 Amazon EC2 上的应用程序将对传入请求进行采样,并添加跟踪头来指示 Lambda 是否发送跟踪。

要跟踪没有跟踪标头的请求,请在函数的配置中启用活动跟踪。

启用活动跟踪

  1. 打开 Lambda 控制台 函数页面

  2. 选择函数。

  3. AWS X-Ray 下,选择 Active tracing (活动跟踪)

  4. 选择保存

定价

X-Ray 有一款永久免费套餐。超出免费套餐阈值后,X-Ray 会对跟踪存储和检索进行收费。有关详细信息,请参阅 AWS X-Ray 定价

您的函数需要权限才能将跟踪数据上传到 X-Ray。在 Lambda 控制台中启用活动跟踪后,Lambda 会将所需权限添加到函数的执行角色。如果没有,请将 AWSXRayDaemonWriteAccess 策略添加到执行角色。

X-Ray 应用采样算法确保跟踪有效,同时为应用程序所服务的请求提供代表性样本。默认采样规则是每秒 1 个请求和 5% 的其他请求。无法为 Lambda 函数配置此采样率。

在 X-Ray 中,跟踪记录有关由一个或多个服务处理的请求的信息。包含子分段层的服务记录分段。Lambda 记录处理调用请求的 Lambda 服务的分段,以及该函数完成的工作的分段。函数分段带有 InitializationInvocationOverhead 分段。

以下示例显示了一个具有 2 个分段的跟踪。两个分段都被命名为 my-function,但是其中一个为 AWS::Lambda 类型,另一个为 AWS::Lambda::Function 类型。将函数分段展开可显示其子分段。

重要

在中 Lambda,您可以使用 X-Ray 开发工具包来扩展 Invocation 子分段,使其具有用于进行下游调用、注释和元数据的更多子分段。您无法直接访问函数分段,也无法记录在处理程序调用范围之外完成的工作。

有关 Lambda 中特定于语言的跟踪简介,请参阅以下主题:

有关支持活动检测的服务的完整列表,请参阅 AWS X-Ray 开发人员指南 中的受支持的 AWS 服务

执行角色权限

Lambda 需要以下权限才能将跟踪数据发送到 X-Ray。将这些权限添加到您的函数的执行角色中。

这些权限包含在 AWSXRayDaemonWriteAccess 托管策略中。

AWS X-Ray 守护程序

X-Ray 开发工具包使用守护进程,而不是直接向 X-Ray API 发送跟踪数据。AWS X-Ray 守护程序是在 Lambda 环境中运行,并侦听包含分段和子分段的 UDP 流量的应用程序。它缓冲传入的数据并将其分批写入 X-Ray,从而减少跟踪调用所需的处理和内存开销。

Lambda 运行时允许守护程序最多占用函数配置内存的 3% 或 16 MB(以较大者为准)。如果您的函数在调用期间内存不足,则运行时首先终止守护进程以释放内存。

守护程序进程完全由 Lambda 管理,用户无法配置。通过调用函数生成的所有分段都记录在与 Lambda 函数相同的账户中。无法将守护程序配置为将这些分段重定向到任何其他账户。

有关更多信息,请参阅《X-Ray 开发人员指南》中的 X-Ray 守护程序

使用 Lambda API 启用主动跟踪

要使用 AWS CLI 或 AWS 开发工具包管理跟踪配置,请使用以下 API 操作:

以下示例 AWS CLI 命令对名为 my-function 的函数启用主动跟踪。

$ aws lambda update-function-configuration --function-name my-function \ --tracing-config Mode=Active

跟踪模式是发布函数版本时锁定的版本特定配置的一部分。您无法更改已发布版本上的跟踪模式。

使用 AWS CloudFormation 启用主动跟踪

要对 AWS CloudFormation 模板中的 AWS::Lambda::Function 资源启用活动跟踪,请使用 TracingConfig 属性。

function-inline.yml – 跟踪配置

Resources: function: Type: AWS::Lambda::Function Properties: TracingConfig: Mode: Active ...

对于 AWS 无服务器应用程序模型 (AWS SAM) AWS::Serverless::Function 资源,请使用 Tracing 属性。

template.yml – 跟踪配置

Resources: function: Type: AWS::Serverless::Function Properties: Tracing: Active ...