エージェントベースの Node.js モニタリングの設定

Instana エージェントを使用して環境内の Node.js アプリケーションを監視するには、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 コレクターを以下のように自動または手動でインストールできます:

  • コレクタの自動インストール ( 推奨 ):コレクタを自動的にインストールするには、以下の手順を実行します:

    1. Instana AutoTrace ウェブフックをインストールします。

      注: Instana Node.js SDK を使用する場合は、「 API の使用」と「 AutoTrace Webhook 」のセクションを確認してください。
    2. Node.js アプリケーションと Instana エージェントが Kubernetes クラスターで実行される場合は、監視対象アプリケーションのネットワーク アクセスを設定します。 詳しくは、 Kubernetes ネットワークアクセスをご覧ください。

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

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

Cloud Foundry

注: Cloud Foundry Node.js アプリケーションを監視するには、 Instana エージェントが Cloud Foundry 基盤のディエゴセルでアクティブに実行されていることを確認してください。

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

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

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

Node.js コレクターを手動でインストールする

コレクタを取付ける前に、必ず「 作業を開始する前に 」のセクショ ンをお読みください。

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

注: 重要: Instana Node.js コレクター 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. パッケージがインストールされている場所を決定する。 場所はOSによって異なる。 npmがインストールされたパッケージをどこに置くかについての詳細は、 Node.js のフォルダーについてのドキュメントを参照してください。

  3. /path/to/instana/node_modules/@instana/collector のような、よく知られた場所にあるパッケージ @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 実行ファイルを起動するときに、 以下の手順のいずれかを実行します。

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

  • を設定する。 NODE_OPTIONS Node.js 変数を設定する

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

    Docker を使ってアプリケーションをビルドする場合は、次の行を に追加して設定する必要があります。 NODE_OPTIONS Dockerfile を設定する必要があります(最後の FROM ステートメントの後で、 node プロセスを開始する最後の CMD または ENTRYPOINT の前):

    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の最後の CMD または ENTRYPOINT を修正する必要があります。

    --require パラメーターの詳細については、 Node.js ドキュメントの -r、 --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');
 

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

ECMAScript

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

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

  • を設定する。 NODE_OPTIONS Node.js 変数を設定する

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

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

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

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

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

    ローダは、Instana Node.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 コレクターをインストールする手順と、ビルドシナリオに関するその他の考慮事項を説明します。

バンドル

Webpack や Rollup などの bundler を使って Node.js サーバアプリケーションをプリプロセスするときは、 node_modules フォルダにある依存関係のコードではなく、自分のコードだけをバンドルするようにしてください。

以下の理由により、依存関係を除外しなければならない:

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

そのため、 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を使用している場合、 "externalDependencies": ["@instana/collector"] (そしておそらく @instana/collector instrumentsの他のライブラリも)を バンドルから除外するために、 angular.json ファイルに追加する必要があります。

トランスパイラー

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

のロード・フラグを使ってトレーサーを初期化する。 CommonJSECMAScript のロード・フラグによってトレーサーを初期化する。

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

ネイティブアドオン

トレーサーは以下のネイティブアドオンをインストールする:

  • gcstats.js :ガベージコレクションに関する情報を取得する。
  • event-loop-stats :イベントループのアクティビティに関する情報を取得する。
  • オートプロファイル :パフォーマンスの問題やボトルネックを調査します。 デフォルトでは AutoProfile™ はデフォルトでは無効になっている。 AutoProfile™ を有効にするには、 Node.js コレクタの構成を参照。

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

オプションの依存関係を使用せずに依存関係をインストールする

npm install --no-optional または yarn --ignore-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