You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Node.js(Lambda)获取AWS QLDB X-Ray详细交互数据方案咨询

AWS QLDB X-Ray 详细数据采集解决方案

默认捕获方案只能拿到抽象的sendCommand调用或通用POST请求的原因是:QLDB SDK底层所有操作都封装为统一的sendCommand接口发起请求,标准X-Ray捕获逻辑不会解析接口内的实际操作类型、查询参数等业务细节,因此需要通过自定义子分段的方式补充埋点。

实现方案

基于官方X-Ray SDK的自定义子分段能力,配合QLDB操作封装补充元数据埋点,可实现全链路QLDB详细操作信息采集。

依赖准备

首先保留原有基础捕获逻辑,确保基础链路数据正常上报:

const AWSXRay = require("aws-xray-sdk");
AWSXRay.captureAWS(require("aws-sdk"));
AWSXRay.captureHTTPsGlobal(require("https"));

方案1:配合官方QLDB Node.js驱动封装(推荐)

如果使用amazon-qldb-driver-nodejs官方驱动,可通过通用操作封装完成埋点:

const { QldbDriver } = require("amazon-qldb-driver-nodejs");

/**
 * 带X-Ray增强埋点的QLDB操作执行器
 * @param operationName 实际操作类型:ExecuteStatement/CommitTransaction/StartTransaction等
 * @param ledgerName QLDB账本名称
 * @param operationLogic 实际业务执行逻辑
 */
async function executeQldbOperation(operationName, ledgerName, operationLogic) {
  const rootSegment = AWSXRay.getSegment();
  const qldbSubsegment = rootSegment.addNewSubsegment(`QLDB-${operationName}`);

  // 注入基础属性
  qldbSubsegment.addAttribute("ledger_name", ledgerName);
  qldbSubsegment.addAttribute("operation_type", operationName);

  try {
    const result = await operationLogic();
    // 可选:注入返回数据维度
    if (result?.getResultList) {
      const records = result.getResultList();
      qldbSubsegment.addAttribute("returned_record_count", records.length);
    }
    return result;
  } catch (error) {
    qldbSubsegment.addError(error);
    throw error;
  } finally {
    qldbSubsegment.close();
  }
}

// 初始化驱动
const qldbDriver = new QldbDriver("你的账本名称");

// 调用示例
async function queryVehicleByVin(vin) {
  return executeQldbOperation("ExecuteStatement", "你的账本名称", async () => {
    return qldbDriver.executeLambda(async (txn) => {
      const query = `SELECT * FROM Vehicle WHERE VIN = ?`;
      // 可选:注入查询语句和参数,注意过滤敏感信息
      const currentSubsegment = AWSXRay.getSegment().subsegments.slice(-1)[0];
      currentSubsegment.addAttribute("query_statement", query);
      currentSubsegment.addAttribute("query_params", [vin]);

      return txn.execute(query, vin);
    });
  });
}

方案2:原生QLDB Session SDK调用增强

如果直接使用原生AWS SDK的QLDBSession客户端发起请求,可直接封装sendCommand方法完成埋点:

const AWS = require("aws-sdk");
const qldbSessionClient = new AWS.QLDBSession({ region: "us-east-1" });

async function enhancedSendCommand(params) {
  const rootSegment = AWSXRay.getSegment();
  // 提取实际操作类型
  const operationType = Object.keys(params.Command)[0];
  const qldbSubsegment = rootSegment.addNewSubsegment(`QLDB-${operationType}`);

  // 注入命令详情
  qldbSubsegment.addAttribute("command_detail", params.Command[operationType]);

  try {
    return await qldbSessionClient.sendCommand(params).promise();
  } catch (error) {
    qldbSubsegment.addError(error);
    throw error;
  } finally {
    qldbSubsegment.close();
  }
}

效果说明

上述方案完成后,X-Ray控制台会为每个QLDB操作生成独立的子分段,可查看操作类型、账本名、查询语句、参数、返回记录数、错误栈等全量明细信息,不会再仅展示抽象的sendCommand或通用POST请求记录。

内容的提问来源于stack exchange,提问作者Hanoj B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 01:27:03