跟踪Amazon使用适用于 Java 的 X-Ray 开发工具包调用 - Amazon X-Ray
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

跟踪Amazon使用适用于 Java 的 X-Ray 开发工具包调用

当您的应用程序调用Amazon服务来存储数据、写入队列或发送通知时,适用于 Java 的 X-Ray 开发工具包在子分段。跟踪Amazon服务和您在这些服务中访问的资源(例如,Amazon S3 存储桶或 Amazon SQS 队列),在 X-Ray 控制台的服务地图中显示为下游节点。

适用 SDK for Java X-Ray AWS 发工具包在您包aws-sdkaws-sdk-instrumentor 子模块在您的构建中。如果您未包括 Instrumentor 子模块,则可以选择分析一些客户端,同时排除另一些。

要检测单个客户端,请删除aws-sdk-instrumentor子模块并添加XRayClient作为TracingHandler在您的Amazon使用服务的客户端生成器的开发工具包客户端。

例如,要分析 AmazonDynamoDB 客户端,请将跟踪处理程序传递到 AmazonDynamoDBClientBuilder

例 MyModel.java-DynamoDB 客户端

import com.amazonaws.xray.AWSXRay; import com.amazonaws.xray.handlers.TracingHandler; ... public class MyModel { private AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() .withRegion(Regions.fromName(System.getenv("AWS_REGION"))) .withRequestHandlers(new TracingHandler(AWSXRay.getGlobalRecorder())) .build(); ...

对于所有服务,您可以在 X-Ray 控制台中查看调用的 API 的名称。对于服务的子集,X-Ray SDK 会将信息添加到区段中,以便在服务图中提供更多的粒度。

例如,当您使用指令化的 DynamoDB 客户端进行调用时,SDK 会将表名添加到针对某个表的调用的段中。在控制台中,每个表都作为服务映射中的单独节点显示,其中一个通用的 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— 队列名称

要使用 Amazon SDK for Java 2.2 及更高版本对 Amazon 服务的下游调用进行分析,可以从构建配置中省略 aws-xray-recorder-sdk-aws-sdk-v2-instrumentor 模块。改为包含 aws-xray-recorder-sdk-aws-sdk-v2 module,然后通过为它们配置 TracingInterceptor 来分析各个客户端。

例 Amazon SDK for Java 2.2 及更高版本 – 跟踪拦截程序

import com.amazonaws.xray.interceptors.TracingInterceptor; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration import software.amazon.awssdk.services.dynamodb.DynamoDbClient; //... public class MyModel { private DynamoDbClient client = DynamoDbClient.builder() .region(Region.US_WEST_2) .overrideConfiguration(ClientOverrideConfiguration.builder() .addExecutionInterceptor(new TracingInterceptor()) .build() ) .build(); //...