亚马逊AWS官方博客

AWS Lambda 对 AWS X-Ray 的支持

今天,我们宣布全面推出 AWS LambdaAWS X-Ray 的支持。您可能已经从 Jeff 的 GA 文章中了解到,X-Ray 是 AWS 推出的一项服务,用于分析分布式应用程序的执行和性能行为。传统调试方法对于基于微服务的应用程序效果不佳,在这些应用程序中,有多个独立的组件在不同的服务上运行。利用 X-Ray,您可以通过对应用程序中的延迟进行细分,来快速诊断错误、速度下降和超时问题。稍后我将详细介绍如何构建和分析一个基于 Lambda 的简单应用程序,以演示您如何能够在自己的应用程序中使用 X-Ray。如果您想立即开始使用,可以通过导航到现有 Lambda 函数的配置页面并启用跟踪,来轻松地为函数启用 X-Ray:

或者在 AWS 命令行界面 (CLI) 中更新函数的 tracing-config (请务必同时传入 --function-name ):

$ aws lambda update-function-configuration --tracing-config '{"Mode": "Active"}'

如果激活跟踪模式,Lambda 将尝试跟踪您的函数 (除非上游服务明确说明不跟踪)。如果不激活跟踪模式,仅当上游服务明确说明需要跟踪时,才跟踪您的函数。一旦启用跟踪,您将开始生成跟踪,并将获得应用程序中资源的可视化表示形式以及它们之间的联系 (边缘)。需要注意的一点是,X-Ray 守护进程会占用 Lambda 函数的一些资源。如果您已接近内存限制,Lambda 将尝试终止 X-Ray 守护程序,以免引发内存不足错误。

下面让我们通过快速构建一个使用几种不同服务的应用程序来测试这种新的集成。

作为一个二十多岁且拥有智能手机的年轻人,我有大量 图片 自拍照 (一万多张!),我想如果能够分析所有这些照片,那就太棒了。我们将使用 Java 8 运行时编写一个简单的 Lambda 函数,以响应上传到 Amazon Simple Storage Service (S3) 存储桶的新图片。我们将对照片使用 Amazon Rekognition,并将检测到的标签存储在 Amazon DynamoDB 中。

服务地图

首先,我们来快速定义几个 X-Ray 术语:子分段分段跟踪。明白了吗?如果您记住子分段和分段构成 X-Ray 要处理的跟踪以生成服务图,那么 X-Ray 就很容易理解了。如上所示,服务图是一种很不错的直观表示 (用不同的颜色表示各种请求响应)。运行您的应用程序的计算资源以分段形式发送有关它们所完成工作的数据。您可以通过创建子分段来添加有关该数据的其他注释和更细粒度的代码时间信息。通过跟踪来追踪请求在您的应用程序中传输的路径。跟踪会收集单个请求生成的所有分段。这意味着您可以轻松地跟踪从 S3 进入的 Lambda 事件,一路跟踪到 DynamoDB,并了解错误和延迟的出现位置。

因此,我们将创建一个名为 selfies-bucket的 S3 存储桶,一个名为 selfies-table的 DynamoDB 表和一个 Lambda 函数。我们将在 ObjectCreated:All 事件上为 S3 存储桶的 Lambda 函数添加一个触发器。我们的 Lambda 函数代码超级简单,您可以在这里查看完整代码。无需更改代码,我们可以通过在 JAR 中包含 aws-xray-sdk 和 aws-xray-sdk-recorder-aws-sdk-instrumentor 程序包,来在 Java 函数中启用 X-Ray。现在我们上传一些照片,并看看 X-Ray 中的跟踪。

我们获得了一些数据!我们可以单击其中一个跟踪,获取有关我们的调用的大量详细信息。

在第一个 AWS::Lambda 分段中,我们看到函数的停留时间 (即等待执行的时间),以及尝试执行的次数。

在第二个 AWS::Lambda::Function 分段中,有几个可能的子分段:

嗯,DynamoDB 方面似乎有点问题。我们甚至可以通过单击错误图标更深入地探究,并获取完整的异常堆栈跟踪。您可以看到,我们已经受到 DynamoDB 的限制,因为我们的写入容量单位不足。幸运的是,我们只需单击几下或快速调用一个 API,就可以添加更多单位。当我们这样做时,我们将会在服务地图上看到越来越多的绿色!

借助 X-Ray 软件开发工具包,向 X-Ray 发送数据变得非常容易,但您不必使用它们与 X-Ray 守护进程通信。对于 Python,您可以从名为 fleece 的 Rackspace 查看此库。X-Ray 服务充满了许多有趣的内容,了解更多信息的最好去处是跳转到文档。我一直将它用于我的 @awscloudninja 自动程序,它真的非常好用!请记住,这不是官方资料库,AWS 不为其提供支持。就我个人而言,我真的很高兴能够在所有即将开展的项目中使用 X-Ray,因为在进行调试和运行时,它真的能够为我节省一些时间和精力。我期待看到我们的客户也可以使用它进行构建。如果您想到了一些很酷的技巧或窍门,请告诉我们!

– Randall