本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用適用於 Java 的 X-Ray AWS SDK 追蹤 SDK 呼叫
當您的應用程式呼叫 AWS 服務 以儲存資料、寫入佇列或傳送通知時,Java 的 X-Ray SDK 會追蹤子區段中下游的呼叫。您在這些服務中存取的追蹤 AWS 服務 和資源 (例如,Amazon S3 儲存貯體或 Amazon SQS 佇列) 會在 X-Ray 主控台的追蹤對應上顯示為下游節點。
當您在組建中包含aws-sdk
和aws-sdk-instrumentor
子模組時,SDK for Java 的 X-Ray 開發套件會自動檢測所有 AWS 開發套件用戶端。如果您未包含 Instrumentor 子模組,您可以選擇檢測某些特定用戶端,而排除其他用戶端。
要檢測單個客戶端,請從構建中刪除aws-sdk-instrumentor
子模塊,並使用服務的客戶端構建器在 AWS SDK 客戶端TracingHandler
上添加XRayClient
為。
例如,若要檢測 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 簡單存儲服務 — 存儲桶和密鑰名稱
-
Amazon 簡單隊列服務-隊列名稱
要檢測 AWS SDK for Java 2.2 及更高版本的下游調 AWS 服務 用,您可以從構建配置中省略該aws-xray-recorder-sdk-aws-sdk-v2-instrumentor
模塊。這時改成包含 aws-xray-recorder-sdk-aws-sdk-v2 module
,然後使用 TracingInterceptor
為其進行設定,檢測個別的用戶端。
範例 AWS 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(); //...