aws x ray 不监控 nodejs 中的 dynamodb dax 客户端
aws xray not monitoring dynamo dax client in nodejs
我最近开始在我的节点 lambda 函数中使用 dynamodb dax,但是使用 'amazon-dax-client' 框架,我无法再像这样透明地捕获框架发出的 http 请求;
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
const dynamoDB = AWSXRay.captureAWSClient(new AWS.DynamoDB(defaults.db.config));
我知道我可以创建异步捕获。但我想知道是否有更好的方法来做到这一点,就像以前的方式一样,如果我有人设法捕获请求,使用 dax-client 以与来自 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 中测试。
我最近开始在我的节点 lambda 函数中使用 dynamodb dax,但是使用 'amazon-dax-client' 框架,我无法再像这样透明地捕获框架发出的 http 请求;
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
const dynamoDB = AWSXRay.captureAWSClient(new AWS.DynamoDB(defaults.db.config));
我知道我可以创建异步捕获。但我想知道是否有更好的方法来做到这一点,就像以前的方式一样,如果我有人设法捕获请求,使用 dax-client 以与来自 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 中测试。