使用X-Ray SDK for Node.js生成自定义子分段 - AWS X-Ray
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用X-Ray SDK for Node.js生成自定义子分段

子分段会扩展跟踪的分段并提供有关完成任务的详细信息,以便处理请求。每次您通过已分析的客户端进行调用时,X-Ray 开发工具包都将记录在子分段中生成的信息。您可以创建更多子分段以分组其他子分段、测量代码段的性能或记录注释和元数据。

自定义 Express 子分段

使用 captureAsyncFunc 函数为调用下游服务的函数创建自定义子分段。

例 app.js - 自定义子分段 Express

var AWSXRay = require('aws-xray-sdk'); app.use(AWSXRay.express.openSegment('MyApp')); app.get('/', function (req, res) { var host = 'api.example.com'; AWSXRay.captureAsyncFunc('send', function(subsegment) { sendRequest(host, function() { console.log('rendering!'); res.render('index'); subsegment.close(); }); }); }); app.use(AWSXRay.express.closeSegment()); function sendRequest(host, cb) { var options = { host: host, path: '/', }; var callback = function(response) { var str = ''; response.on('data', function (chunk) { str += chunk; }); response.on('end', function () { cb(); }); } http.request(options, callback).end(); };

在本示例中,应用程序将创建一个名为 send 的自定义子分段以调用 sendRequest 函数。captureAsyncFunc 传递您在回调函数发出的异步调用完成时必须在回调函数内关闭的子分段。

对于同步函数,您可以使用 captureFunc 函数,这会在函数块完成执行时立即自动结束子分段。

当您在分段或者其他子分段中创建子分段时,X-Ray SDK for Node.js将为其生成 ID 并记录开始时间和结束时间。

例 包含元数据的子分段

"subsegments": [{ "id": "6f1605cd8a07cb70", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "Custom subsegment for UserModel.saveUser function", "metadata": { "debug": { "test": "Metadata string from UserModel.saveUser" } },

自定义 Lambda 子分段

开发工具包配置为在检测到运行于 Lambda 中时,将自动创建占位符 Facade 分段。要创建基本子分段(这将在 X-Ray 服务地图上创建单个 AWS::Lambda::Function 节点),请调用并重新调整 Facade 分段。如果您手动创建具有新 ID 的新分段(同时共享跟踪 ID、父 ID 和采样决策),则可以发送新分段。

例 app.js - 手动自定义子分段

const segment = AWSXRay.getSegment(); //returns the facade segment const subsegment = segment.addNewSubsegment('subseg'); ... subsegment.close(); //the segment is closed by the SDK automatically