使用 X-Ray SDK for Go 跟踪 Amazon SDK 调用
注意
终止支持通知:2027 年 2 月 25 日,Amazon X-Ray 将停止对 Amazon X-Ray SDK 和进程守护程序的支持。2027 年 2 月 25 日之后,您将不会再收到更新或发行版本。有关支持时间表的更多信息,请参阅 X-Ray SDK 和进程守护程序终止支持时间表。我们建议迁移到 OpenTelemetry。有关迁移到 OpenTelemetry 的更多信息,请参阅从 X-Ray 检测迁移到 OpenTelemetry 检测。
应用程序调用 Amazon Web Services 服务来存储数据、写入队列或发送通知时,X-Ray SDK for Go 跟踪在子分段中跟踪下游的调用。所跟踪的 Amazon Web Services 服务以及您在这些服务中访问的资源(例如,Amazon S3 存储桶或 Amazon SQS 队列),在 X-Ray 控制台的跟踪地图上显示为下游节点。
要跟踪 AWS SDK 客户端,请将客户端对象与 xray.AWS() 调用一起包装,如以下示例所示。
例 main.go
var dynamo *dynamodb.DynamoDB
func main() {
dynamo = dynamodb.New(session.Must(session.NewSession()))
xray.AWS(dynamo.Client)
}然后,当您使用 AWS SDK 客户端时,使用调用方法的 withContext 版本,在 context 中将其从 http.Request 对象传递到处理程序。
例 main.go - Amazon SDK 调用
func listTablesWithContext(ctx context.Context) {
output := dynamo.ListTablesWithContext(ctx, &dynamodb.ListTablesInput{})
doSomething(output)
}对于所有服务,都可以在 X-Ray 控制台中看到调用的 API 的名称。X-Ray 开发工具包会为一部分服务将信息添加到分段,从而在服务地图中提供更高的粒度。
例如,当使用经过检测的 DynamoDB 客户端发出调用时,对于针对表的调用,开发工具包会将表名称添加到分段中。在控制台中,每个表在服务地图中显示为一个独立的节点,以及没有表作为目标的调用的一般 DynamoDB 节点。
例 对 DynamoDB 进行调用以保存项目的子分段
{
"id": "24756640c0d0978a",
"start_time": 1.480305974194E9,
"end_time": 1.4803059742E9,
"name": "DynamoDB",
"namespace": "aws",
"http": {
"response": {
"content_length": 60,
"status": 200
}
},
"aws": {
"table_name": "scorekeep-user",
"operation": "UpdateItem",
"request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG",
}
}在您访问指定的资源时,对以下服务的调用会在服务地图中创建额外的节点。没有定向到特定资源的调用,为服务创建了通用节点。
-
Amazon DynamoDB - 表名称
-
Amazon Simple Storage Service - 存储桶和键名称
-
Amazon Simple Queue Service - 队列名称