来自Lambda的AWSXRay.captureAsyncFunc() - 我错过了什么?
问题描述:
我正在尝试获取自定义X-Ray细分报告,但我在跟踪中没有看到任何内容。我的代码看起来像这样:来自Lambda的AWSXRay.captureAsyncFunc() - 我错过了什么?
var AWSXRay = require('aws-xray-sdk-core'); AWSXRay.captureAsyncFunc('callSoapService', subsegment => { doSomethingAsync(params, err => { if (err) { subsegment.close(err); } else { doSomethingElse().then(result => { console.info('all done, now close the segment'); subsegment.close(); }, subsegment.close); } }); });
是否需要将它添加到父段或其他?
答
呃。似乎有与AWSXRay.captureHTTPs()
错误 - 如果我没有调用captureAsyncFunc()
开始工作
答
对于AWS X射线节点SDK,自动模式是建立在延续本地存储(CLS)包,它存在已知的兼容性问题与承诺库。这就是为什么你的'当时'似乎失去了上下文。然而,大多数这些库有各种CLS垫片可用于提供工作所需的兼容性。
您使用哪种承诺库? 对于蓝鸟,这里有'cls-bluebird'或Q,有'cls-q'可用,它可以使它工作。
它们通常会要求传入CLS命名空间,该命名空间可从xray.getNamespace()获得。
希望这会有所帮助。
我正在使用本地节点承诺 –
CLS可以安全地在可以同时处理多个请求的后端中使用吗? –
CLS将变量作用域保存到函数调用链中,类似于线程本地存储。它需要第三方库承诺支持的垫脚。你可以在这里阅读更多关于它的信息:https://github.com/othiym23/node-continuation-local-storage – AWSSandra