エージェントベースの Node.js 監視の設定

環境内の Node.js アプリケーションを Instana エージェントで監視するには、 Instana コレクター( Node.js )をインストールしてください。 Instana Node.js コレクターは、 Node.js アプリケーションの依存関係に追加する npm パッケージです。 メトリクスの収集と自動トレースを可能にし、メトリクスとトレースを Instana に報告します。

その他の Node.js 監視オプションの詳細については、 Node.js 監視オプションを参照してください。

監視の設定

Instana エージェントを使用して Node.js の監視を設定するには、次の手順を完了してください:

  1. Node.js コレクターをインストールします:環境に応じてインストール方法を選択してください:

  2. Node.js コレクターを有効化します

  3. ビルドツールを使用する場合は、 ビルドツールを設定してください

  4. Node.js コレクターを設定します

監視を設定すると、 Instana のUIで Node.js アプリケーションに関連するメトリクスとトレースを確認できます。 詳細については、 「トレースとメトリクスの表示」 を参照してください。

Node.js コレクターの異なるプラットフォームへのインストール

環境に応じて、以下のセクションに説明されている手順を完了し、 Node.js コレクターをインストールしてください。 以下の表は、異なるプラットフォームで利用可能なコレクターのインストールオプションを一覧表示しています:

プラットフォーム 自動インストール 手動インストール
Kubernetes および Red Hat OpenShift [×] [×]
Cloud Foundry [×] [×]
Apigee Microgateway [×]
Next.js [×]

Kubernetes および Red Hat OpenShift

Node.js アプリケーションが Kubernetes および Red Hat OpenShift 環境で実行されている場合、 Instana Node.js コレクターを以下の方法で自動または手動でインストールできます:

読み取り専用システムでは、事前定義された Node.js バージョンに対してコンパイルされたネイティブアドオンが、他の Node.js バージョンとの互換性の問題を引き起こす可能性があります。 コレクターは事前コンパイル済みバイナリファイルを展開できないため、特定のネイティブモジュールのロードが妨げられます。 その結果、ガベージコレクションデータや特定のイベントループ統計など、特定のメトリクスは収集されません。 ただし、一般的なトレース機能は影響を受けません。 詳細については、 トラブルシューティングのセクションを参照してください。

Cloud Foundry

注記: Cloud Foundry Node.js アプリケーションを監視するには、 Cloud Foundry 基盤の Diego セル上で Instana エージェントが確実に稼働していることを確認してください。

Cloud Foundry に Instana Node.js コレクターをインストールするには、次のいずれかのオプションを選択します。

  • 自動コレクターインストール(推奨):Tile 1.177.0 およびそれ以降のバージョンでは、 Instana ビルドパックを使用して Node.js コレクターをインストールし、 Cloud Foundry 上の Node.js アプリケーションのセットアップを自動化します。

  • 手動コレクターのインストール: コレクターを手動でインストールするには、 「 Node.js コレクターの手動インストール」 を参照してください。 自動インストールが不可能な場合にのみ、手動でのアプローチを使用してください。

Node.js コレクターの手動インストール

コレクターをインストールする前に、 「始める前に」 のセクションを必ずお読みください。

Node.js コレクターは、ローカルまたはグローバルにインストールできます。

注記: 重要: Instana Node.js collector 2.14.0 以降のバージョンは ECMAScript をサポートしています。 一部のECMAScriptモジュール機能は実験段階にあります。 詳細については、 Node.js のドキュメントを参照してください。

コレクターをローカルにインストールする

Instana Node.js コレクターをインストールするには、 npm パッケージをインストールします。 @instana/collector 次のコマンドを実行して、アプリケーションで実行します。

npm install --save @instana/collector
 

コレクターをインストールした後、コレクターをアクティブ化して監視を設定してください。 手順については、 「 Node.js コレクターの有効化」 を参照してください。

コレクターのグローバルインストール

別の方法として、以下の手順を完了することで、 Node.js コレクターをグローバルにインストールできます:

  1. 対象システムに @instana/collector パッケージをインストールします:

    • npm を使用している場合は、次のコマンドを実行してください:

      npm install -g @instana/collector
       
    • yarn を使用している場合は、次のコマンドを実行してください:

      yarn global add @instana/collector
       

    コレクターをコンテナ化されたアプリケーションにインストールする場合、上記のステートメントを. に追加できます Dockerfile

  2. パッケージがインストールされている場所を特定する。 場所はオペレーティングシステムによって異なります。 npm がインストール済みパッケージを配置する場所の詳細については、 Node.js のフォルダに関するドキュメントを参照してください。

  3. 対象システム上で、パッケージ @instana/collector とそのすべての依存関係が既知の場所(例: /path/to/instana/node_modules/@instana/collector)に確実に利用可能であることを確認してください。

コレクターをインストールした後、コレクターをアクティブ化して監視を設定してください。 手順については、 「 Node.js コレクターの有効化」 を参照してください。

Node.js コレクターの有効化

Node.js アプリケーションで使用するモジュールに応じて、コレクターを以下の方法で有効化してください:

  • アプリケーションが CommonJS モジュールを使用している場合は、セクション CommonJS の手順に従ってください。
  • アプリケーションがECMAScriptモジュールを使用している場合は、 ECMAScript セクションの手順に従ってください。

CommonJS

CommonJS モジュールを使用するアプリケーションでは、次のいずれかの方法で Node.js コレクターを有効にしてください:

  • アクティベーションにはロード --require フラグを使用してください。
  • アプリケーションの最初の文として、 Node.js コレクターを要求し初期化してください

これらのメソッドは、アプリケーションコードの前に Node.js コレクタをロードおよび初期化します。

ロードフラグ --require

この方法が好ましい。

CommonJS モジュールを使用するアプリケーションでコレクターを有効にするには、 Node.js 実行ファイルを起動する際に次のいずれかの手順を完了してください。

パラメータ --require を設定 NODE_OPTIONS または追加する際、誤って部分を src/immediate 省略しないようにしてください。 パスは で始まる ./ 必要があるため、 Node.js がそれをモジュール識別子ではなく相対パスとして認識します。 パスは現在の作業ディレクトリに基づいて評価されます。

  • Node.jsアクティベーションプロセスを開始する前に、変 NODE_OPTIONS 数を設定してください:

    NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"
     

    Docker でアプリケーションをビルドする場合、以下の行を に追加して NODE_OPTIONS 設定する必要があります(最後の FROM ステートメントの後、ビルドプロセ node スを Dockerfile 開始する最終的な CMDENTRYPOINT または の前に追加してください)

    ENV NODE_OPTIONS="--require ./node_modules/@instana/collector/src/immediate"
     
  • 代わりに、 Node.js を起動するコマンドに --require パラメータを追加します。通常 コマンド node app/index.js でアプリケーションを起動している場合は、追加の --require ロードフラグを追加してください。 以下の例を参照してください。

    node --require ./node_modules/@instana/collector/src/immediate app/index.js
     

    このアプリケーションを Docker を使用してビルドおよび実行する場合、Dockerfile内の最終的な ENTRYPOINT ` CMD `または``を変更する必要があります。

    -r --require パラメータの詳細については、 Node.js ドキュメントの ` --require ` モジュールを参照してください。

CommonJS マニュアル必須

注記: コレクタの初期化行は、アプリケーション内の最初の文でなければなりません。 そうでなければ、収集者は特定の情報にアクセスできません。 この行を正しく追加する方法の詳細については、 「コレクターの統合の確認」 を参照してください。
require('@instana/collector')();

// All other require statements must be done after the collector is initialized.
// Note the () after the require statement of the collector which initializes it.


// const express = require('express');
 

上記のコードは、デフォルトの設定オプションでコレクターを初期化します。 カスタム構成オブジェクトを使用して、 InstanaNode.js コレクターを初期化することもできます。 有効な設定オプションの一覧については、 Node.js Collector Configuration を参照してください。 監視対象アプリケーションと Instana エージェント間の接続設定に関する詳細については、 「エージェント通信」 を参照してください。

ECMAScript

アプリケーションがECMAScriptを使用しており、 @instana/collector 依存関係としてインストールされているコレクターの場合は、 Node.js ロード フラグを使用して Instana Node.js コレクターをロードすることで、コレクターをアクティブ化できます。

アプリケーションがECMAScriptモジュールを使用する場合、node実行ファイルを起動する際に以下のいずれかの手順を完了してください。 Node.jsNODE_OPTIONS--import コレクターの引数を設定または使用すると、アプリケーションコードの前にコレクターが初期化されます。 ECMAScriptモジュールに関する詳細については、公式ドキュメント Node.js を参照してください。

  • Node.jsアクティベーションプロセスを開始する前に、変 NODE_OPTIONS 数を設定してください:

    Docker でアプリケーションをビルドする場合、以下の行を (最後の FROM ステートメントの後、ビルドプロセ node スを Dockerfile 開始する ENTRYPOINT 最終的な CMD または の前に) に追加して NODE_OPTIONS 設定してください:

    • 以下のコマンドを使用して、 Instana コレクター( Node.js18.19 以降)をインポートします:

      ENV NODE_OPTIONS="--import /path/to/instana/node_modules/@instana/collector/esm-register.mjs"
       
  • 代わりに、 Node.js を起動する際に --import パラメータを含めてください。アプリケーションを で起動する場合は node app/index.js、 コマンド --import を追加してください。

    • 以下のコマンドを使用して、 Instana コレクター( Node.js18.19 以降)をインポートします:

      node --import /path/to/instana/node_modules/@instana/collector/esm-register.mjs app/index.js
       

    ローダーは自動的に InstanaNode.js コレクターを初期化します。

注:
  • Node.js のバージョンが v18.19.0 より古い場合、の --experimental-loader /path/to/instana/node_modules/@instana/collector/esm-loader.mjs 代わりにを使用する必要があります --import /path/to/instana/node_modules/@instana/collector/esm-register.mjs
  • 現在のバージョンでは、の --experimental-loader との併用 esm-loader.mjs はサポートされなくなり、次回のアップグレードで削除されます。 詳細については、 変更点セクションを参照してください。

Windows でコレクターを有効にする

アプリケーションがECMAScriptモジュールを使用しており、お使いのオペレーティングシステムが Windows の場合、ECMAScriptローダーのパスに`/`を file:/// 先頭に追加してください:

--import file:///path/to/instana/node_modules/@instana/collector/esm-register.mjs
 

Node.js コレクターのビルドツールの設定

バンドラー(Webpack や Rollup など)またはトランスパイラ(Babel、Traceur、 TypeScript コンパイラなど tsc)を使用している場合は、以下のセクションを参照して、 Node.js コレクタのインストール手順およびビルドシナリオにおけるその他の考慮事項を確認してください。

バンドラー

Node.js サーバーアプリケーションをWebpackやRollupなどのバンドラーで前処理する際は、`dependencies`フォルダ node_modules 内の依存関係コードを含めず、自身のコードのみをバンドルするようにしてください。

以下の理由により、依存関係を除外する必要があります:

  • モジュール @instana/collector では Webpack を使った前処理がサポートされません。 他の問題の中でも、コード内で使用されている動的 require ステートメントが正しく解決されていません。
  • サードパーティ製ライブラリを計測対象とする場合、 npm パッケージは @instana/collectorNode.jsrequire プロセスの実行をインターセプトします。ただし、これらのライブラリが実行時に読み込まれず、代わりにビルド時に自身のコードとバンドルされる場合、この require プロセスは実行されず、計測処理は適用されません。 したがって、 Instana のトレースは機能しないか、部分的にしか機能しません。つまり、 Node.js のコアモジュール(例:)に対してのみトレースが機能します。これらのモジュール http はデフォルトでバンドル対象から除外されているためです。

したがって、すべてのコード変換から node_modules を除外するために、 webpack-node-externals モジュールを使用してバンドラーを設定する必要があります:

// your webpack.config.js:

const nodeExternals = require('webpack-node-externals');

module.exports = {
  ...
  // externals: nodeModules,
  externals: [nodeExternals()],
  ...
};
 

Angular CLI(特に Angular Universal やSSRを使用する場合)では、 バンドルから除外するために、 angular.json"externalDependencies": ["@instana/collector"] `.js/bundle.js`ファイルに``(および @instana/collector 計測対象となるその他のライブラリ)を追加する必要があります。

トランスパイラ

TypeScript やBabelなどのトランスパイラを使用している場合、トランスパイラが CommonJS またはECMAScriptのディストリビューションコードを生成することを確認してください。

ECMAScriptCommonJS ロードフラグを介してトレーサーを初期化する。

コード内でSDKにアクセスする方法の詳細については、 ECMAScriptモジュールを参照してください。

ネイティブアドオン

トレーサーは次のネイティブアドオンをインストールします:

  • gcstats.js : ガベージコレクションに関する情報を取得します。
  • event-loop-stats : イベントループの活動に関する情報を取得します。
  • autoprofile : パフォーマンスの問題やボトルネックを調査します。 デフォルトでは無効になっています AutoProfile™。 AutoProfile™ を有効にするには、 Node.js collector configuration を参照してください。

これらのアドオンは、 npm のオプション依存関係です。 システムにインストールできない場合でも、コレクターは期待通りに動作します。 アドオンに問題が発生している場合は、 トラブルシューティングのセクションを参照してください。 C++ アドオンの要件に関する詳細は、 公式の Node.js ドキュメントまたはnode-gyp を参照してください。

オプションの依存関係を除いた依存関係のインストール

依存関係を または yarn --ignore-optional npm install --no-optional コマンドでインストールする場合、 npm または yarn はネイティブアドオンのインストールを試みません。

npm またはyarnによるネイティブアドオンのインストールが失敗する問題を修正するには、インストール手順からフラグを削除するか、以下のインストール手順を追加してください:

  • npm install @instana/autoprofileまたはyarn add @instana/autoprofile
  • npm install event-loop-statsまたはyarn add event-loop-stats
  • npm install gcstats.jsまたはyarn add gcstats.js

Node.js コレクターの無効化

環境変数を使用して、(ローカル)開発環境向けに Node.js コレクターを無効化できます。 Expressフレームワーク NODE_ENV はこの目的のために環境変数を普及させた。

Node.js コレクターを無効にするには、次の手順を完了してください:

  1. Node.js コレクターを以下のようにロードします:

    if (process.env.NODE_ENV !== 'development') {
      require('@instana/collector')();
    }
     
  2. NODE_ENV 数を に設定して development、アプリケーションをローカルで起動してください。 以下の例を参照してください。

    export NODE_ENV=development
     
    NODE_ENV=development node myApp.js