对 AWS Lambda 的支持添加到了 AWS X-Ray 分布式跟踪服务中

  • Daniel Bryant
  • 张卫滨

2017 年 6 月 12 日

话题:DevOps架构

AWS X-Ray分布式跟踪服务 4 月份发布的通用版本(General Availability,GA)中,Amazon 已经为X-Ray 添加了对 AWS Lambda 的支持,它能够记录函数调用和相关的元数据,通过 AWS Console 进行图像化展示并进行分析以便于调试或故障的恢复。

通过 AWS Console,我们能够将 X-Ray 用于已有的 Lambda 函数,只需导航至函数的配置 Tab 标签,滑动至“Advanced settings”,并选中“Enable active tracing”选择框,或者也可以通过AWS Command Line Interface (CLI)来更新函数的追踪配置:

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

AWS 博客中包含了一篇Randall Hunt所撰写的文章,他是 AWS 的开发人员布道师,这篇文章指出,当启用跟踪模式时,Lambda 将会试图跟踪函数,除非它被上游的服务显式地禁用掉。当 Lambda 函数触发的时候,将会生成 trace 并开始进行数据捕获,通过 AWS Console 能够以可视化的方式展现应用资源和它们之间的连接(edges):

AWS Console 中,X-Ray 跟踪的可视化展现(图片来源于Randall Hunt

每个服务或函数收集到的数据被称之为segment(类似于OpenTracing API 规范中的Span),以 JSON 数据的方式来进行存储。这种 segment 的样本可以通过 X-Ray daemon 发送至 AWS X-Ray 服务,而 X-Ray daemon 必须要和 Lambda 函数在一起运行。Hunt 指出,X-Ray daemon确实会消耗 Lambda 函数关联的一点资源,但是如果函数接近特定的内存极限的话,Lambda 将会尝试杀掉 X-Ray daemon,避免出现内存溢出的错误。

segment 代表了一个工作单元,包含了请求和响应的时间,另外还有可选的子 segment(sub-segment),它们会包含更小的工作单元。子 segment可以启动和停止,并且添加了一些额外的元数据,这是通过针对 X-Ray 的特定语言 SDK 实现的。目前,针对 Java 8 运行时的 X-Ray SDK针对 Node.js 4.3 的 X-Ray SDK以及一些更新的运行时已经得到了官方的支持,针对其他语言的非官方支持托管在 GitHub 上,比如Fleece项目所提供的对 Python 的支持。

针对应用的请求会通过一个 trace 来进行跟踪。trace 会收集单个请求所生成的所有 segment。这意味着我们可以很容易地跟踪在请求生命周期中,已支持的服务所发出的所有的事件,比如 API 网关调用、应用 / 服务函数的处理以及对 X-Ray 所支持的数据存储(比如 AWS DynamoDB)的所有操作,从而能够理解哪里出现了错误以及延迟发生在什么地方。

关于 AWS X-Ray 所支持的 AWS 服务的更多细节可以参考“Integrating AWS X-Ray with Other AWS Services”文档。关于 AWS X-Ray 以及相关跟踪术语可以参考InfoQ 之前的新闻,这篇新闻是在 2016 AWS re:invent 会议之后发布的。

X-Ray服务可以通过美国东部(北弗吉尼亚)、美国西部(加州北部)、美国东部(俄亥俄)、美国西部(俄勒冈州)、欧盟(爱尔兰)、欧盟(法兰克福)、南美洲(圣保罗)、亚太(东京)、亚太(首尔)、亚太(悉尼)以及亚太(孟买)的这些 Region 来进行使用。其他的信息可以通过AWS Lambda页面和Troubleshooting Lambda-Based Applications文档来进行获取。

查看英文原文AWS Lambda Support Added to AWS X-Ray Distributed Tracing Service

DevOps架构