X-Ray AWS SDK for Node.js を使用した SDK 呼び出しのトレース - AWS X-Ray

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

X-Ray AWS SDK for Node.js を使用した SDK 呼び出しのトレース

アプリケーションが を呼び出し AWS のサービス てデータの保存、キューへの書き込み、または通知の送信を行う場合、X-Ray SDK for Node.js はサブセグメント の呼び出しダウンストリームを追跡します。トレースされた AWS のサービス、およびそれらのサービス (Amazon S3 バケットや Amazon SQS キューなど) 内でアクセスするリソースは、X-Ray コンソールのトレースマップにダウンストリームノードとして表示されます。

AWS SDK for JavaScript V2 または VAWS SDK for JavaScript V3 を介して作成する AWS SDK クライアントを測定します。 AWS SDK バージョンごとに、 AWS SDK クライアントを計測するためのさまざまな方法が用意されています。

注記

現在、 AWS X-Ray SDK for Node.js は、V2 クライアントの計測と比較して、 AWS SDK for JavaScript V3 V2クライアントの計測時に少ないセグメント情報を返します。例えば、DynamoDB への呼び出しを表すサブセグメントはテーブル名を返しません。トレースでこのセグメント情報が必要な場合は、 AWS SDK for JavaScript V2 の使用を検討してください。

AWS SDK for JavaScript V2

への呼び出しで aws-sdk require ステートメントをラップすることで、すべての AWS SDK V2 クライアントを計測できますAWSXRay.captureAWS

例 app.js - AWS SDK 計測
const AWS = AWSXRay.captureAWS(require('aws-sdk'));

個々のクライアントを計測するには、 AWS SDK クライアントを への呼び出しでラップしますAWSXRay.captureAWSClient。たとえば、AmazonDynamoDB クライアントを計測するには:

例 app.js - DynamoDB クライアント計測
const AWSXRay = require('aws-xray-sdk'); ... const ddb = AWSXRay.captureAWSClient(new AWS.DynamoDB());
警告

captureAWScaptureAWSClient との両方を使用しないでください。これにより、サブセグメントが重複します。

ECMAScript モジュール (ESM) TypeScriptで を使用してJavaScriptコードをロードする場合は、次の例を使用してライブラリをインポートします。

例 app.js - AWS SDK インストルメンテーション
import * as AWS from 'aws-sdk'; import * as AWSXRay from 'aws-xray-sdk';

ESM ですべての AWS クライアントを計測するには、次のコードを使用します。

例 app.js - AWS SDK インストルメンテーション
import * as AWS from 'aws-sdk'; import * as AWSXRay from 'aws-xray-sdk'; const XRAY_AWS = AWSXRay.captureAWS(AWS); const ddb = new XRAY_AWS.DynamoDB();

すべてのサービスにおいて、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 – キュー名

AWS SDK for JavaScript V3

AWS SDK for JavaScript V3 はモジュール式であるため、コードは必要なモジュールのみをロードします。このため、V3 は captureAWSメソッドをサポートしていないため、すべての AWS SDK クライアントを計測することはできません。

ECMAScript Modules (ESM) TypeScript で を使用してコードをロード JavaScriptする場合は、次の例を使用してライブラリをインポートできます。

import * as AWS from 'aws-sdk'; import * as AWSXRay from 'aws-xray-sdk';

AWSXRay.captureAWSv3Client メソッドを使用して各 AWS SDK クライアントを計測します。たとえば、AmazonDynamoDB クライアントを計測するには:

例 app.js - JavaScript V3 用 SDK を使用した DynamoDB クライアント計測
const AWSXRay = require('aws-xray-sdk'); const { DynamoDBClient } = require("@aws-sdk/client-dynamodb"); ... const ddb = AWSXRay.captureAWSv3Client(new DynamoDBClient({ region: "region" }));

AWS SDK for JavaScript V3 を使用する場合、テーブル名、バケット名、キー名、キュー名などのメタデータは現在返されないため、トレースマップには、 AWS SDK for JavaScript V2 を使用して AWS SDK クライアントを計測する場合と同様に、名前付きリソースごとに個別のノードは含まれません。

例 AWS SDK for JavaScript V3 を使用する場合の、項目を保存するための DynamoDB への呼び出しのサブセグメント
{ "id": "24756640c0d0978a", "start_time": 1.480305974194E9, "end_time": 1.4803059742E9, "name": "DynamoDB", "namespace": "aws", "http": { "response": { "content_length": 60, "status": 200 } }, "aws": { "operation": "UpdateItem", "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG", } }