Download PDF
Download page Node.js サーバレストレーサとエンドユーザモニタリングの統合.
Node.js サーバレストレーサとエンドユーザモニタリングの統合
このマニュアルには、AWS のマニュアルへのリンクが記載されています。Amazon は自身のマニュアルを管理しているため、AppDynamics は Amazon のマニュアルの精度については一切保証しません。
AWS Lambda 向けサーバレス APM は、既存のエンドユーザモニタリング(EUM)設定と統合できるように設計されています。EUM 統合は、web およびモバイルアプリケーションのパフォーマンスに対する完全なエンドツーエンドの可視性を確保し、エンドユーザデバイスからサーバレス機能を介してエンドユーザデバイスのコールを関連付け、ビジネストランザクションを続行します。
AWS Lambda 関数は、EUM と AWS Lambda によって発信されたビジネストランザクションを、次の EUM エージェントとともに関連付けることができます。
- ブラウザリアルユーザーモニタリング(ブラウザ RUM)
- Mobile Real User Monitoring(モバイル RUM)
- IoTモニタリング
このドキュメントでは、AppDynamics エンドユーザのモニタリングに精通していることを前提としています。詳細については、EUM のドキュメントを参照してください。
はじめに
展開に次のものを使用していることを確認します。
- Node.js サーバレストレーサとともにインストゥルメント化された AWS Lambda 関数
- アクティブな EUM ライセンスと JavaScript エージェント
EUM 環境変数の追加
デフォルトでは、Node.js サーバレストレーサの EUM 統合がオフになっています。
EUM 統合を有効にするには、APPDYNAMICS_ENABLE_EUM
環境変数を true
に設定します。詳細については、サーバレス APM 環境のセットアップを参照してください。
応答ヘッダーマッピングの設定
応答ヘッダーマッピングを設定して、ADRUM_n ヘッダーをブラウザに戻します。応答ヘッダーマッピングを次のように設定できます。
- AWS API ゲートウェイの使用
- AWS Lambda プロキシ統合を介して直接渡す
- 関数コードで EUM メタデータを返す
Amazon API ゲートウェイでの応答ヘッダーマッピング
Amazon API ゲートウェイの各 ADRUM_n ヘッダーのヘッダーマッピングを追加します。Amazon API ゲートウェイで応答ヘッダーマッピングを設定するには、Amazon ドキュメントを参照してください。
次の表に、必要な応答ヘッダーとそのマッピング値を示します。
応答ヘッダー | マッピング値 |
---|---|
ADRUM_3 | integration.response.body.headers.ADRUM_3 |
ADRUM_2 | integration.response.body.headers.ADRUM_2 |
ADRUM_1 | integration.response.body.headers.ADRUM_1 |
ADRUM_0 | integration.response.body.headers.ADRUM_0 |
AWS Lambda プロキシ統合での応答ヘッダーマッピング
カスタム統合の代わりに、AWS Lambda プロキシ統合により、クライアントはバックエンドの各機能を呼び出し、JSON 形式の出力を返すことができます。このような応答をマッピングするには、出力オブジェクトクラスのヘッダーフィールドに各シングル値 ADRUM_n ヘッダーを直接追加します。詳細については、Amazon ドキュメントを参照してください。
すべての他の呼び出しの応答ヘッダーマッピング
EUM メタデータを収集するには、応答ヘッダーマッピングを設定する必要があります。次のコード例では、トレーサで appDEumHeaders
メソッドを呼び出します。このメソッドは、ADRUM_n ヘッダーを含むオブジェクトを返します。ダウンストリームの JavaScript エージェントによって、消費用のダウンストリームサービスにこのオブジェクトを渡します。
次のコードスニペットは、EUM メタデータを返す方法を示しています。
module.exports.myLambdaHandler = function (event, context, callback) {
setTimeout(function () {
////Call a transaction object
let appDBusinessTxn = tracer.getCurrentTransaction();
//Stop the transaction
tracer.stopTransaction();
//Return EUM Metadata
let appDEumHeaders = tracer.getEumMetadata(appDBusinessTxn);
callback(null, {
eumMetadata: appDEumHeaders,
data: 'Call to Lambda is a success'
});
}, 300);
}
フロントエンド アプリケーションの更新
EUM と AWS Lambda で発信されたビジネストランザクション間の相関関係を表示するには、「Inject the JavaScript Agent」で説明されているように、JavaScript エージェントをブラウザの HTML に挿入する必要があります。
CORS 設定の有効化
ブラウザには、ブラウザ要求からドメイン(基本ページのドメイン以外)の応答にアクセスする関数の Cross-Origin Resource Sharing(CORS)が必要です。クロスドメインのアクセス権を該当するすべての ADRUM_n ヘッダーに明示的に付与する必要があります。
CORS 設定を有効にするには、Amazon API ゲートウェイで必要な AWS 応答ヘッダーを定義します。
- Access-Control-Expose-Headers :カスタム ADRUM ヘッダーをマッピングします。これらのヘッダーには、JavaScript エージェントと互換性を確保できるように ADRUM_0 ~ ADRUM_3 という名前を使用する必要があります。
- Access-Control-Allow-Methods :適切なメソッドを使用してヘッダーを確認します。
- Access-Control-Allow-Origin :スキーマ、ホスト名、ポートなど、要求を発信した web ページの完全な URL に設定します。
詳細なヘッダーおよび追加情報については、AWS のドキュメントを参照してください。
次のスクリーンショットは、Amazon API ゲートウェイで CORS を有効にする方法を示しています。
これらのマニュアルで使用されている Amazon Web サービス、AWS ロゴ、AWS、およびその他の AWS マークは、米国およびその他の国における Amazon.com, Inc. またはその関連会社の商標です。
CORS を有効にした後、応答ヘッダーマッピングを定義する必要があります。Amazon API ゲートウェイで応答ヘッダーマッピングを設定するには、Amazon ドキュメントを参照してください。
次の表に、応答ヘッダーマッピングと CORS 設定のマッピング値の例を示します。
応答ヘッダー | マッピング値の例 |
---|---|
Access-Control-Expose-Headers | `ADRUM_0,ADRUM_1,ADRUM_2,ADRUM_3` |
Access-Control-Allow-Credentials | `true` |
Access-Control-Allow-Methods | `POST,OPTIONS` |
Access-Control-Allow-Origin | `http://my-saas-service.com:8000` |
//Return EUM Metadata
let appDEumHeaders = tracer.getEumMetadata(appDBusinessTxn);
let returnHeaders = {
'Access-Control-Allow-Origin': 'http://my-saas-service.com:8000',
'Access-Control-Allow-Credentials': true,
'Access-Control-Expose-Headers': 'ADRUM_0,ADRUM_1,ADRUM_2,ADRUM_3'
};
EUM 統合のトラブルシューティング
EUM データとビジネストランザクションの間に相関関係が表示されない場合は、ブラウザでアクティビティをキャプチャする HTTP アーカイブ(HAR)ファイルを収集します。HAR ファイルを使用して、必要なすべての CORS ヘッダーが設定され、予想されるデータが ARUM_n ヘッダーに設定されていることを確認します。
EUM のドキュメントには、トラブルシューティングの追加アドバイスが記載されています。