在 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
评论