RückverfolgungAWSSDK-Aufrufe mit dem X-Ray SDK für Java - AWS X-Ray

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

RückverfolgungAWSSDK-Aufrufe mit dem X-Ray SDK für Java

Wenn Ihre Anwendung Anrufe tätigt beiAWS-Servicesum Daten zu speichern, in eine Warteschleife zu schreiben oder Benachrichtigungen zu senden, verfolgt das X-Ray SDK für Java die Aufrufe im Downstream inUntersegmente. VerfolgtAWS-Servicesund Ressourcen, auf die Sie innerhalb dieser Services zugreifen (z. B. ein Amazon S3-Bucket oder eine Amazon SQS-Warteschlange), werden in der Service-Map in der X-Ray-Konsole als Downstream-Knoten angezeigt.

Das X-Ray-SDK für Java instrumentiert automatisch alle AWS-SDK-Clients, wenn Sie dieaws-sdkund einaws-sdk-instrumentor Submodulein deinem Build. Wenn Sie das Instrumentor-Untermodul nicht einbeziehen, können Sie auswählen, welche Clients Sie instrumentieren möchten, und andere ausschließen.

Um einzelne Clients zu instrumentieren, entfernen Sie dasaws-sdk-instrumentorSubmodul aus Ihrem Build und fügen Sie ein hinzuXRayClientalsTracingHandlerauf deinemAWSSDK-Client, der den Client Builder des Dienstes verwendet.

Wenn Sie beispielsweise einen AmazonDynamoDB-Client instrumentieren möchten, übergeben Sie einen Ablaufverfolgungshandler an AmazonDynamoDBClientBuilder.

Beispiel MyModel.java — DynamoDB-Client
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(); ...

Für alle Dienste können Sie den Namen der API sehen, die in der X-Ray-Konsole aufgerufen wurde. Für eine Untergruppe von Diensten fügt das X-Ray-SDK dem Segment Informationen hinzu, um die Service-Map detaillierter zu gestalten.

Wenn Sie beispielsweise einen Aufruf mit einem instrumentierten DynamoDB-Client tätigen, fügt das SDK den Tabellennamen dem Segment für Aufrufe hinzu, die auf eine Tabelle abzielen. In der Konsole erscheint jede Tabelle als separater Knoten in der Service Map mit einem generischen DynamoDB-Knoten für Aufrufe, die nicht auf eine Tabelle abzielen.

Beispiel Untersegment für einen Aufruf von DynamoDB zum Speichern eines Elements
{ "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", } }

Wenn Sie auf benannte Ressourcen zugreifen, werden durch Aufrufe der folgenden Services weitere Knoten in der Service-Übersicht erstellt. Durch Aufrufe, die keinen bestimmten Ressourcen gelten, wird ein generischer Knoten für den Service erstellt.

  • Amazon DynamoDB— Tabellenname

  • Einfacher Speicherservice von Amazon— Bucket und Schlüsselname

  • Amazon Simple Queue Service— Name der Warteschlange

Um Downstream-Aufrufe zu instrumentierenAWS-ServicesmitAWS SDK for Java2.2 und höher können Sie das weglassenaws-xray-recorder-sdk-aws-sdk-v2-instrumentorModul aus Ihrer Build-Konfiguration. Fügen Sie stattdessen das aws-xray-recorder-sdk-aws-sdk-v2 module ein und instrumentieren Sie dann einzelne Clients, indem Sie sie mit einem TracingInterceptor konfigurieren.

Beispiel AWS SDK for Java 2.2 und höher – Ablaufverfolgungs-Interceptor
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(); //...