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 中测试。