翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
OpenTelemetry Node.js への移行
このセクションでは、Node.js アプリケーションを X-Ray SDK から OpenTelemetry に移行する方法について説明します。自動計測と手動計測の両方のアプローチについて説明し、一般的なユースケースの具体的な例を示します。
X-Ray Node.js SDK を使用すると、Node.js アプリケーションを手動で計測してトレースできます。このセクションでは、X-Ray から OpenTelemetry 計測に移行するためのコード例を示します。
セクション
ゼロコード自動計測ソリューション
X-Ray SDK for Node.js を使用してリクエストをトレースするには、アプリケーションコードを変更する必要があります。OpenTelemetry を使用すると、ゼロコードの自動計測ソリューションを使用してリクエストをトレースできます。
OpenTelemetry ベースの自動計測を使用したゼロコード自動計測。
-
Node.js の AWS Distro for OpenTelemetry (ADOT) 自動計測の使用 – Node.js アプリケーションの自動計測については、AWS 「 Distro for OpenTelemetry JavaScript 自動計測によるトレースとメトリクス
」を参照してください。 (オプション) ADOT JavaScript 自動計測 AWS を使用して でアプリケーションを自動的に計測するときに CloudWatch Application Signals を有効にして、現在のアプリケーションの状態をモニタリングし、ビジネス目標に照らして長期的なアプリケーションパフォーマンスを追跡することもできます。Application Signals は、アプリケーション、サービス、依存関係をアプリケーション中心の統合ビューで表示し、アプリケーションの状態をモニタリングしてトリアージできるようにします。詳細については、「Application Signals」を参照してください。
-
OpenTelemetry JavaScript ゼロコード自動計測の使用 – OpenTelemetry JavaScript による自動計測については、JavaScript ゼロコード計測
」を参照してください。
手動計測ソリューション
- Tracing setup with X-Ray SDK
-
X-Ray SDK for Node.js を使用した場合、SDK を使用してコードを計測する前に、
aws-xray-sdk
X-Ray SDK をサービスプラグインまたはローカルサンプリングルールで設定するためにパッケージが必要でした。var AWSXRay = require('aws-xray-sdk'); AWSXRay.config([AWSXRay.plugins.EC2Plugin,AWSXRay.plugins.ElasticBeanstalkPlugin]); AWSXRay.middleware.setSamplingRules(<path to file>);
- Tracing setup with OpenTelemetry SDK
注記
AWS X-Ray リモートサンプリングは現在、OpenTelemetry JS 用に設定することはできません。ただし、X-Ray リモートサンプリングのサポートは現在、Node.js の ADOT Auto-Instrumentation を通じて利用できます。
以下のコード例では、次の依存関係が必要です。
npm install --save \ @opentelemetry/api \ @opentelemetry/sdk-node \ @opentelemetry/exporter-trace-otlp-proto \ @opentelemetry/propagator-aws-xray \ @opentelemetry/resource-detector-aws
アプリケーションコードを実行する前に、OpenTelemetry SDK をセットアップして設定する必要があります。これは、–-require
フラグを使用して実行できます。instrumentation.js という名前のファイルを作成します。これには、OpenTelemetry 計測の設定とセットアップが含まれます。 次のコンポーネントを設定することをお勧めします。
-
OTLPTraceExporter – CloudWatch エージェント/OpenTelemetry Collector へのトレースのエクスポートに必要です
-
AWSXRayPropagator – X-Ray と統合された AWS サービスにトレースコンテキストを伝達するために必要です
-
Resource Detectors (Amazon EC2 Resource Detector など) - アプリケーションを実行しているホストのメタデータを検出するには
/*instrumentation.js*/ // Require dependencies const { NodeSDK } = require('@opentelemetry/sdk-node'); const { OTLPTraceExporter } = require('@opentelemetry/exporter-trace-otlp-proto'); const { AWSXRayPropagator } = require("@opentelemetry/propagator-aws-xray"); const { detectResources } = require('@opentelemetry/resources'); const { awsEc2Detector } = require('@opentelemetry/resource-detector-aws'); const resource = detectResources({ detectors: [awsEc2Detector], }); const _traceExporter = new OTLPTraceExporter({ url: 'http://localhost:4318/v1/traces' }); const sdk = new NodeSDK({ resource: resource, textMapPropagator: new AWSXRayPropagator(), traceExporter: _traceExporter }); sdk.start();
その後、次のような OpenTelemetry 設定でアプリケーションを実行できます。
node --require ./instrumentation.js app.js
OpenTelemetry SDK ライブラリ計測を使用して、 AWS SDK などのライブラリのスパンを自動的に作成できます。これらを有効にすると、 AWS SDK for JavaScript v3 などのモジュールのスパンが自動的に作成されます。OpenTelemetry には、すべてのライブラリ計測を有効にするか、有効にするライブラリ計測を指定するオプションがあります。
すべての計測を有効にするには、
@opentelemetry/auto-instrumentations-node
パッケージをインストールします。npm install @opentelemetry/auto-instrumentations-node
次に、次のように設定を更新して、すべてのライブラリ計測を有効にします。
const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node'); ... const sdk = new NodeSDK({ resource: resource, instrumentations: [getNodeAutoInstrumentations()], textMapPropagator: new AWSXRayPropagator(), traceExporter: _traceExporter });
-
- Tracing setup with ADOT auto-instrumentation for Node.js
-
Node.js の ADOT 自動計測を使用して、Node.js アプリケーションの OpenTelemetry を自動的に設定できます。ADOT Auto-Instrumentation を使用すると、手動でコードを変更して受信リクエストをトレースしたり、 AWS SDK や HTTP クライアントなどのライブラリをトレースしたりする必要はありません。詳細については、AWS 「 Distro for OpenTelemetry JavaScript Auto-Instrumentation」の「トレースとメトリクス
」を参照してください。 Node.js の ADOT 自動計測は以下をサポートします。
-
環境変数による X-Ray リモートサンプリング –
export OTEL_TRACES_SAMPLER=xray
-
X-Ray トレースコンテキストの伝播 (デフォルトで有効)
-
リソース検出 (Amazon EC2、Amazon ECS、Amazon EKS 環境のリソース検出はデフォルトで有効になっています)
-
サポートされているすべての OpenTelemetry 計測の自動ライブラリ計測。
OTEL_NODE_ENABLED_INSTRUMENTATIONS
およびOTEL_NODE_DISABLED_INSTRUMENTATIONS
環境変数を介して選択的に無効化/有効化できます。 -
スパンの手動作成
-
受信リクエストのトレース
- With X-Ray SDK
-
Express.js
Express.js アプリケーションによって受信された HTTP リクエストを追跡する X-Ray SDK では、2 つのミドルウェア
AWSXRay.express.openSegment(<name>)
と は、定義されたルートをすべてラップしてトレースする必要がありAWSXRay.express.closeSegment()
ました。app.use(xrayExpress.openSegment('defaultName')); ... app.use(xrayExpress.closeSegment());
復元
Restify
アプリケーションによって受信された HTTP リクエストをトレースするために、X-Ray SDK のミドルウェアは、Restify Server のaws-xray-sdk-restify
モジュールから enable を実行して使用されました。var AWSXRay = require('aws-xray-sdk'); var AWSXRayRestify = require('aws-xray-sdk-restify'); var restify = require('restify'); var server = restify.createServer(); AWSXRayRestify.enable(server, 'MyApp'));
- With OpenTelemetry SDK
-
Express.js
の受信リクエストのトレースサポート
Express.js
は、OpenTelemetry HTTP 計測と OpenTelemetry Express 計測 によって提供されます。で次の依存関係をインストールします npm
。npm install --save @opentelemetry/instrumentation-http @opentelemetry/instrumentation-express
OpenTelemetry SDK 設定を更新して、Express モジュールの計測を有効にします。
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http'); const { ExpressInstrumentation } = require('@opentelemetry/instrumentation-express'); ... const sdk = new NodeSDK({ ... instrumentations: [ ... // Express instrumentation requires HTTP instrumentation new HttpInstrumentation(), new ExpressInstrumentation(), ], });
復元
Restify アプリケーションの場合は、OpenTelemetry Restify 計測
が必要です。次の依存関係をインストールします。 npm install --save @opentelemetry/instrumentation-restify
OpenTelemetry SDK 設定を更新して、restify モジュールの計測を有効にします。
const { RestifyInstrumentation } = require('@opentelemetry/instrumentation-restify'); ... const sdk = new NodeSDK({ ... instrumentations: [ ... new RestifyInstrumentation(), ], });
AWS SDK JavaScript V3 計測
- With X-Ray SDK
-
AWS SDK からの送信 AWS リクエストを計測するには、次の例のようにクライアントを計測しました。
import { S3, PutObjectCommand } from '@aws-sdk/client-s3'; const s3 = AWSXRay.captureAWSv3Client(new S3({})); await s3.send(new PutObjectCommand({ Bucket: bucketName, Key: keyName, Body: 'Hello!', }));
- With OpenTelemetry SDK
DynamoDB、Amazon S3 などへのダウンストリーム AWS SDK 呼び出しのトレースサポートは、OpenTelemetry AWS SDK 計測によって提供されます。 Amazon S3 で次の依存関係をインストールします
npm
。npm install --save @opentelemetry/instrumentation-aws-sdk
SDK 計測を使用して OpenTelemetry AWS SDK 設定を更新します。
import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk'; ... const sdk = new NodeSDK({ ... instrumentations: [ ... new AwsInstrumentation() ], });
送信 HTTP 呼び出しの計測
- With X-Ray SDK
-
X-Ray を使用して送信 HTTP リクエストを計測するには、クライアントを計測する必要がありました。たとえば、以下の「」を参照してください。
個々の HTTP クライアント
var AWSXRay = require('aws-xray-sdk'); var http = AWSXRay.captureHTTPs(require('http'));
すべての HTTP クライアント (グローバル)
var AWSXRay = require('aws-xray-sdk'); AWSXRay.captureHTTPsGlobal(require('http')); var http = require('http');
- With OpenTelemetry SDK
-
Node.js HTTP クライアントのトレースサポートは、OpenTelemetry HTTP Instrumentation によって提供されます。で次の依存関係をインストールします
npm
。npm install --save @opentelemetry/instrumentation-http
OpenTelemetry SDK 設定を次のように更新します。
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http'); ... const sdk = new NodeSDK({ ... instrumentations: [ ... new HttpInstrumentation(), ], });
他のライブラリの計測サポート
OpenTelemetry JavaScript でサポートされているライブラリインストルメンテーションの完全なリストは、サポートされているインストルメンテーション
または、OpenTelemetry レジストリを検索して、OpenTelemetry が Registry
トレースデータを手動で作成する
- With X-Ray SDK
-
X-Ray を使用して、アプリケーションを追跡するセグメントとその子サブセグメントを手動で作成するには、
aws-xray-sdk
パッケージコードが必要でした。var AWSXRay = require('aws-xray-sdk'); AWSXRay.enableManualMode(); var segment = new AWSXRay.Segment('myApplication'); captureFunc('1', function(subsegment1) { captureFunc('2', function(subsegment2) { }, subsegment1); }, segment); segment.close(); segment.flush();
- With OpenTelemetry SDK
-
カスタムスパンを作成して使用することで、計測ライブラリでキャプチャされない内部アクティビティのパフォーマンスをモニタリングできます。この種のスパンのみ サーバーは X-Ray セグメントに変換され、他のすべてのスパンは X-Ray サブセグメントに変換されることに注意してください。詳細については、「セグメント」を参照してください。
トレースセットアップで OpenTelemetry SDK を設定してスパンを作成すると、Tracer インスタンスが必要になります。必要に応じていくつでも Tracer インスタンスを作成できますが、アプリケーション全体に 1 つの Tracer を持つことが一般的です。
const { trace, SpanKind } = require('@opentelemetry/api'); // Get a tracer instance const tracer = trace.getTracer('your-tracer-name'); ... // This span will appear as a segment in X-Ray tracer.startActiveSpan('server', { kind: SpanKind.SERVER }, span => { // Do work here // This span will appear as a subsegment in X-Ray tracer.startActiveSpan('operation2', { kind: SpanKind.INTERNAL }, innerSpan => { // Do more work here innerSpan.end(); }); span.end(); });
OpenTelemetry SDK を使用してトレースに注釈とメタデータを追加する
カスタムキーと値のペアをスパンの属性として追加することもできます。デフォルトでは、これらのスパン属性はすべて X-Ray raw データ内のメタデータに変換されることに注意してください。属性がメタデータではなく注釈に変換されるようにするには、属性のリストに
aws.xray.annotations
属性のキーを追加します。詳細については、「カスタマイズされた X-Ray 注釈を有効にする」を参照してください。 tracer.startActiveSpan('server', { kind: SpanKind.SERVER }, span => { span.setAttribute('metadataKey', 'metadataValue'); span.setAttribute('annotationKey', 'annotationValue'); // The following ensures that "annotationKey: annotationValue" is an annotation in X-Ray raw data. span.setAttribute('aws.xray.annotations', ['annotationKey']); // Do work here span.end(); });
Lambda 計測
- With X-Ray SDK
-
Lambda 関数のアクティブトレースを有効にした後、追加の設定なしで X-Ray SDK が必要でした。Lambda は Lambda ハンドラー呼び出しを表すセグメントを作成し、追加の設定なしで X-Ray SDK を使用してサブセグメントまたは計測ライブラリを作成しました。
- With OpenTelemetry SDK
-
AWS 販売された Lambda レイヤーを使用して Lambda を自動的に計測できます。解決策は 2 つあります。
-
(推奨) CloudWatch Application Signals Lambda レイヤー
注記
この Lambda レイヤーでは、デフォルトで CloudWatch Application Signals が有効になっているため、メトリクスとトレースの両方を収集することで、Lambda アプリケーションのパフォーマンスとヘルスのモニタリングが可能になります。トレースのみが必要な場合は、Lambda 環境変数 を設定する必要があります
OTEL_AWS_APPLICATION_SIGNALS_ENABLED=false
。詳細については、「Lambda でアプリケーションを有効にする」を参照してください。 -
AWS ADOT JS 用の マネージド Lambda レイヤー。詳細については、AWS 「 Distro for OpenTelemetry Lambda Support for JavaScript
」を参照してください。
Lambda 計測を使用したスパンの手動作成
ADOT JavaScript Lambda Layer は Lambda 関数の自動計測を提供しますが、カスタムデータの提供や、ライブラリ計測の対象ではない Lambda 関数自体内のコードの計測など、Lambda で手動計測を実行する必要がある場合があります。
自動計測とともに手動計測を実行するには、 を依存関係
@opentelemetry/api
として追加する必要があります。この依存関係のバージョンは、ADOT JavaScript SDK で使用されるのと同じ依存関係のバージョンにすることをお勧めします。OpenTelemetry API を使用して、Lambda 関数にスパンを手動で作成できます。NPM を使用して
@opentelemetry/api
依存関係を追加するには:npm install @opentelemetry/api
-