aws-xray没有在nodejs中监控dynamo dax客户端



我最近开始在我的节点lambda函数中使用dynamodb dax,但使用"amazon dax客户端"框架,我无法再像这样透明地捕获框架发出的http请求;

const AWS = AWSXRay.captureAWS(require('aws-sdk'));
const dynamoDB = AWSXRay.captureAWSClient(new AWS.DynamoDB(defaults.db.config));

我知道我可以创建一个异步捕获。但我想知道是否有更好的方法可以做到这一点,就像以前的方法一样,如果我有人设法捕获了dax客户端的请求,就像aws框架中的dynamo客户端一样。

DAX目前不支持XRay,因为DAX不使用标准的AWS SDK HTTP客户端(根本不使用HTTP(。

该团队还收到了其他关于XRay支持的请求,所以这肯定是我们正在考虑的事情。

虽然DAX团队没有正式支持XRAY。我写了一个小片段作为变通方法。

const db = new Proxy(documentClient, {
get: (target: any, prop: any) => {
if (typeof target[prop] === "function") {
return (...args: any) => {
const segment = xray
.getSegment()
?.addNewSubsegment(`DynamoDB::${prop}`);
const request = target[prop](...args);
const promise = request
.promise()
.then((response: any) => {
segment?.close();
return response;
})
.catch((err: any) => {
segment?.close();
return Promise.reject(err);
});
return {
...request,
promise: () => promise,
};
};
}
return target[prop];
},
});
const response await = db.query(...).promise();

在VPC私有子网和AWS XRAY服务端点下的AWS Lambda中测试。

最新更新