有什么方法可以使用 AWS NodeJS SDK v3 的 XRay 检测吗?在 SDK v2 中,AWSXray 能够捕获任何客户端并对其进行检测以跟踪到 XRay。 我一直在使用 v3 尝试同样的事情,并使用以下代码片段
const {DynamoDBClient, ScanCommand} = require("@aws-sdk/client-dynamodb");
const AWSXRay = require("aws-xray-sdk");
// if uncommented, this throws an exception
// AWSXRay.captureAWSClient(DynamoDBClient);
const client = new DynamoDBClient({region: process.env.AWS_REGION});
// if uncommented, this throws an exception
// AWSXRay.captureAWSClient(client);
const scan = new ScanCommand({
TableName: 'xxx',
});
await client.send(scan) //?
但是两条注释行都会抛出
service.customizeRequests is not a function
。这似乎 AWS SDK s3 与原始 AWSXRay 库不向后兼容。
我发现 SDK v3 包含 XRay 客户端,但这只是一个可以将跨度和跟踪发送到 AWS 的客户端,而不是仪器代理。
将 XRay 仪器与适用于 NodeJS 的 AWS SDK v3 结合使用的推荐模式是什么?
您需要使用
v3
兼容x-ray-sdk
捕捉功能captureAWSv3Client
这是工作片段:
const {DynamoDBClient, ScanCommand} = require("@aws-sdk/client-dynamodb");
const AWSXRay = require("aws-xray-sdk-core");
const dynamoClient = AWSXRay.captureAWSv3Client(
new DynamoDBClient({})
)
const scan = new ScanCommand({
TableName: 'xxx',
});
const response = await dynamoClient.send(scan)
拥有写入 X-Ray 的权限也很重要,例如:
Policies:
- AWSXrayWriteOnlyAccess
如果您像我一样,使用 AWS SDK V3 并希望在使用流行的 Dynamoose 库的同时集成 DynamoDB,请按以下步骤操作:
import * as dynamoose from "dynamoose"
import * as AWSXRay from 'aws-xray-sdk'
dynamoose.aws.ddb.set(AWSXRay.captureAWSv3Client(new dynamoose.aws.ddb.DynamoDB({
region: 'us-east-1'
})))
确保您已安装相关软件包:
npm install dynamoose aws-sdk @types/aws-sdk --save