Suivi des appels du AWS SDK avec le SDK X-Ray pour Java - AWS X-Ray

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Suivi des appels du AWS SDK avec le SDK X-Ray pour Java

Lorsque votre application fait des appels AWS services pour stocker des données, écrire dans une file d'attente ou envoyer des notifications, le SDK X-Ray pour Java suit les appels en aval dans des sous-segments. Les ressources tracées AWS services et auxquelles vous accédez au sein de ces services (par exemple, un compartiment Amazon S3 ou une file d'attente Amazon SQS) apparaissent sous forme de nœuds en aval sur la carte de suivi de la console X-Ray.

Le SDK X-Ray pour Java instrumente automatiquement tous les clients du SDK AWS lorsque vous incluez aws-sdk les sous-modules et aws-sdk-instrumentor an dans votre build. Si vous n'incluez pas les sous-modules Instrumentor, vous pouvez choisir d'instrumenter certains clients tout en excluant d'autres.

Pour instrumenter des clients individuels, supprimez le aws-sdk-instrumentor sous-module de votre build et ajoutez-en un XRayClient en tant que TracingHandler sur votre client AWS SDK à l'aide du générateur de clients du service.

Par exemple, pour instrumenter un client AmazonDynamoDB, transmettez un gestionnaire de suivi à AmazonDynamoDBClientBuilder.

Exemple MyModel.java - Client 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(); ...

Pour tous les services, vous pouvez voir le nom de l'API appelée dans la console X-Ray. Pour un sous-ensemble de services, le SDK X-Ray ajoute des informations au segment afin d'améliorer la granularité de la carte des services.

Par exemple, lorsque vous passez un appel avec un client DynamoDB instrumenté, le SDK ajoute le nom de la table au segment pour les appels qui ciblent une table. Dans la console, chaque table apparaît sous la forme d'un nœud distinct dans la carte des services, avec un nœud DynamoDB générique pour les appels qui ne ciblent pas une table.

Exemple Sous-segment pour un appel à DynamoDB pour enregistrer un élément
{ "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", } }

Lorsque vous accédez aux ressources nommées, les appels vers les services suivants créent des nœuds supplémentaires dans la cartographie des services. Les appels qui ne ciblent pas de ressources spécifiques créent un nœud générique pour le service.

  • Amazon DynamoDB — Nom de la table

  • Amazon Simple Storage Service : nom du compartiment et de la clé

  • Amazon Simple Queue Service — Nom de la file d'attente

Pour instrumenter les appels en aval vers AWS services AWS SDK for Java 2.2 et versions ultérieures, vous pouvez omettre le aws-xray-recorder-sdk-aws-sdk-v2-instrumentor module de votre configuration de compilation. Incluez plutôt le module aws-xray-recorder-sdk-aws-sdk-v2 module, puis instrumentez les clients individuels en les configurant avec un TracingInterceptor.

Exemple AWS SDK for Java 2.2 et versions ultérieures - intercepteur de traçage
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(); //...