Node.js 用の APM の設定

管理者は、以下の手順を使用して、これらのオプションの設定タスクを実行します。
apmdevops106
管理者は、以下の手順を使用して、これらのオプションの設定タスクを実行します。
すべての手順およびプロパティはオンプレミスの CA APM に適用されます。 一部の手順およびプロパティのみが CA Digital Experience Insights Application Performance Management に適用されます。
Node.js プローブ エージェント名の設定
Node.js プローブ エージェントは、Node.js アプリケーションの設定を使用して自動的にその名前を検索します。 これらの設定では、Node.js プローブ エージェントの設定は必要ありません。
チーム センター、WebView、および Workstation に特定の Node.js プローブ エージェント名を表示することが必要になる場合があります。 いくつかの方法で、Node.js プローブ エージェントの名前を見つけるか、または指定するように、このエージェントを設定することができます。
Node.js プローブ エージェントが自動的に名前を決定する方法
CA APM の Node.js プローブ エージェントは、以下の順序で自動的に名前を検索します。 エージェントの名前が 1 ステップで見つからない場合は、自動的に次のステップに進みます。
  1. name
    プロパティ(Node.js アプリケーション
    package.json
    ファイル内にあります)。
    package.json
    ファイルは、Node.js アプリケーションのルート ディレクトリにあります。
  2. Node.js アプリケーション起動スクリプト名。ただし、スクリプト名が次の名前である場合を除きます:
    index.js
  3. Node.js アプリケーションのルート ディレクトリ名。
  4. デフォルトの Node.js プローブ エージェント名:
    NodeApplication
Node.js プローブ エージェントのカスタム名を設定する方法
Node.js プローブ エージェントのカスタム名を指定することができます。 これにより、たとえば、同じ名前を持つ 2 つのアプリケーション インスタンスを実行しているときにメトリックを区別します。 異なるエージェント名にすることで、パフォーマンス上の問題が発生しているアプリケーション インスタンスを特定できます。
プローブ エージェントの名前を指定する方法は、以下の点に基づいて決まります。
  • ユーザの要件
  • Node.js アプリケーションを起動する方法
Node.js プローブ エージェントは、以下の優先順位で名前を検索します。これは、設定可能なエージェントの命名方法に対応しています。 エージェントの名前が 1 ステップで見つからない場合は、自動的に次のステップに進みます。
ベスト プラクティス:
1 つの方法のみ
を使用して Node.js プローブ エージェント名を設定します。 複数の方法で名前が設定されていると、混乱の元になります。 たとえば、2 人の APM 管理者がいる場合、一方の管理者は名前を
config.json
ファイルに設定するかもしれません。もう一方の管理者は、環境変数に名前を設定しました。 この場合、最初の管理者は、Investigator ツリーに表示されるエージェント名を見て混乱する可能性があります。
  1. CA_APM_PROBENAME
    環境変数
    実行コンテキストに基づくデフォルト以外の値に Node.js プローブ エージェントのプローブ名を設定します。
    以下の手順に従います。
    • オペレーティング システムのコマンドを使用して、CA_APM_PROBENAME 環境変数を設定します。
      export CA_APM_PROBENAME=<probe-name>
      例:
      export CA_APM_PROBENAME=hello-world-app
  2. config.json
    ファイル プロパティで指定されている
    probeNameEnvKey
    環境キー。
    Node.js アプリケーションで使用可能な環境キー変数は、別の場所で変数として使用することもできます。 たとえば、この変数をスクリプト内で使用することができます。 Node.js プローブ エージェントは、環境キー変数を使用して、プローブ エージェントの名前を指定できます。
    以下の手順に従います。
    1. <
      Node.js_Home
      >/ca-apm-probe ディレクトリに移動します。
    2. config.json
      ファイルをテキスト エディタで開きます。
    3. 以下の環境のキーを特定します。 チーム センター、WebView、および Workstation に表示するエージェント名を指定します。
      "probeNameEnvKey": "<env-key>",
      例: アプリケーションに環境変数 NODE_APP_ID=hello-world-app を設定したとします。 プローブ エージェント名として
      hello-world-app
      を表示させます。
      config.json
      ファイルを以下のように更新します。
      "probeNameEnvKey": "NODE_APP_ID",
    4. ファイルを保存して閉じます。
  3. Node.js プローブエージェント名は、
    require
    ステートメントを使用して設定されます。この方法では、Node.js プローブ エージェント名に文字列または変数名を手動で追加します。
    以下の手順に従います。
    1. 以下の最初の行を Node.js アプリケーション起動スクリプトに追加して、Node.js プローブ エージェントを設定します。
      この方法を使用する場合、ホスト アドレス、ポート、およびプローブ名はすべて必須です。
      var probe = require('ca-apm-probe').start(<infrastructure-agent-host>, <infrastructure-agent-port>, <probe-name>);
      各項目の説明:
        • <
          infrastructure-agent-host
          > は、インフラストラクチャ エージェントのホスト アドレスです(通常、このアドレスは localhost です)。
        • <
          Infrastructure-agent-port
          > は、インフラストラクチャ エージェントのポートです。
        • <
          probe-name
          > は、メトリックがレポートされるプローブの名前です。
      例:
      ca-apm-probe
      require
      ステートメントを、コード内の最初の
      require
      ステートメントとして配置します。以下に例を示します。
      var probe = require('ca-apm-probe').start('system1.example.com', 5005, 'hello-world-app');
      ……
      var express = require('express');
      var mongoose = require('mongoose');
    2. スクリプト ファイルを保存して閉じます。
  4. Configure the
    probeName
    プロパティを
    config.json
    ファイルに設定します。この方法では、静的な値の名前を指定します。
    以下の手順に従います。
    1. <
      Node.js_Home
      >/ca-apm-probe ディレクトリに移動します。
    2. config.json
      ファイルをテキスト エディタで開きます。
    3. 以下のプロパティを見つけます。 ユーザ インターフェースに表示する Node.js プローブ エージェント名を指定します。
      "probeName": "MyApplication",
    4. ファイルを保存して閉じます。
  5. 管理対象アプリケーションを再起動します。
Node.js プローブ エージェント名の設定
デフォルトでは、インフラストラクチャ エージェントは、Node.js プローブ エージェントのホスト名を自動的に決定します。 ホスト名が解決されない場合、インフラストラクチャ エージェントは、Node.js プローブ エージェントの IP アドレスを使用します。 ただし、このような状況でのホスト名の設定を考慮する場合があります。
  • Docker 環境では、標準のホストの名前付けメソッドでは、ホスト名を解決できません。
    複数のエージェントで Node.js アプリケーションを監視する場合は、すべての Node.js プローブ エージェントからのメトリックが集約されます。 集約は、Docker コンテナの IP アドレスに基づきます。 同じローカル ネットワークの IP 範囲が別の Docker ホスト環境に存在する場合、Docker コンテナの IP アドレスの競合が発生します。 競合により、1 つの Node.js プローブ エージェント ホスト ノードの下に表示される特定の Node.js アプリケーション インスタンスのメトリックとトランザクションの追跡が生じます。 メトリックの集約によって、アプリケーション パフォーマンスの問題の原因を判断することが、問題切り分け担当者には困難になります。
  • Node.js エージェント プローブのセットをグループ化する論理ホスト名を使用します。
Node.js プローブ エージェント 1.10.31 のバージョン以降を使用します。
2 つの方法のいずれかを使用して、Node.js プローブ エージェントのホスト名を設定できます。
  • CA_APM_HOSTNAME
    環境変数を設定します。
  • ca-apm-probe/config.json ファイルのホスト名を設定します。
ホスト名が両方のオプションを使用して設定されている場合、Node.js プローブ エージェントは環境変数を使用します。
Set the
CA_APM_HOSTNAME
環境変数
環境変数を使用して Node.js プローブ エージェントのホスト名を設定します(ca-apm-probe/config.json ファイルを設定しない場合)。
CA_APM_HOSTNAME
環境変数を設定するには、オペレーティング システム コマンドを使用します。 例:
export CA_APM_HOSTNAME=Host1
ca-apm-probe/config.json ファイルにホスト名を設定します。
以下の手順に従います。
  1. <
    Node.js_Home
    >/ca-apm-probe ディレクトリに移動します。
  2. config.json
    ファイルをテキスト エディタで開きます。
  3. hostName
    プロパティを見つけます。
  4. Team Center、WebView、および Workstation に表示する Node.js プローブ エージェント名の有効な値を指定します。以下の形式を使用します。
    <optional_text
    >${
    environment_variable
    }<
    optional_text
    >
    値に必要な数の環境変数を含めることができます。
    この例では、
    Host
    はオプションのテキストで、
    INSTANCE_ID
    は Node.js アプリケーションを実行するコンピュータ上の環境変数です。
    "hostName": "Host${INSTANCE_ID}"
  5. ファイルを保存して閉じます。
  6. 管理対象アプリケーションを再起動します。Node.js プローブ エージェントは、Team Center、WebView、および Workstation に表示されているホスト名を解決します。
例: Docker コンテナ ID を含める、Node.js プローブ エージェントのホスト名を設定します。
Node.js プローブ エージェントを設定して、ホスト名に Docker コンテナ ID を使用することができます。
以下の手順に従います。
  1. <
    Node.js_Home
    >/ca-apm-probe ディレクトリに移動します。
  2. config.json
    ファイルをテキスト エディタで開きます。
  3. hostName
    プロパティを見つけて、「
    docker-container-${HOSTNAME}
    」と指定します。
    "hostName": "docker-container-${HOSTNAME}"
  4. docker run image
    コマンドを実行して、Docker コンテナを開始します。
    デフォルトでは、Docker コンテナ ID は、Docker コンテナのホスト名です。 たとえば、Docker コンテナ ID が aed84ee21bd の場合は、Node.js プローブ エージェントは自動的にホスト名を
    docker-container-aed84ee21bde
    として解決します。
config.json ファイルを使用した Node.js プローブ エージェント プロパティの設定
config.json
ファイルを編集して、Node.js プローブ エージェントのプロパティを設定できます。
以下の手順に従います。
  1. <
    Node.js_Home
    >/ca-apm-probe ディレクトリに移動します。
  2. config.json
    ファイルをテキスト エディタで開きます。
  3. 設定するプロパティの値を指定します。
    • probeName
      このプロパティで、Node.js プローブ エージェントの名前が指定され、ユーザ インターフェースに表示されます。
    • probeNameEnvKey
      このプロパティで、環境変数にプローブ名の値を指定します。
    • port
      このプロパティで、インフラストラクチャ エージェント用のポート番号を指定します。
      デフォルト値
      : 5005
    • logFilez
      このプロパティは、ログ ファイルの場所を指定します。 パスが相対パスである場合は、<
      Node.js_Home
      >/ca_apm-nodejs-probe ディレクトリにログが作成されます。
      ${probeName}
      は、自動命名を有効にします。 複数のプローブが実行されている場合は、異なるプローブ名を持つ各プローブには、独自のログ ファイルがあります。
      ${probeName}
      は、ログ ファイルの名前にのみ適用され、パスまたはフォルダ名には適用されません。
      デフォルト値
      ../logs/Probe-${probeName}.log
    • logLevel
      このプロパティで、ログ レベルを指定します(debug、error、info、warn、disabled)。 無効な値が使用された場合、ログ記録が完全に無効になります。 ログ ファイルに書き込み権限がない場合、ログ ファイルは、コンソールに書き込まれます。 ログ ファイルのパスは、参照用に常にコンソールに書き込まれます。 作成可能なログ ファイルの最大数は 5 です。 各ファイルの最大サイズは 5 MB です。 ログ ファイルに記録される時間は、UTC 時間が補正された現地時間です。
      デフォルト値
      : info
      以下のプロパティ値は、Node.js プローブ エージェントが正常に動作するために必要です。 これらのデフォルト値は変更
      しないでください
    • infrastructureAgent host
      このプロパティでは、インフラストラクチャ エージェントのホスト名を指定します。
      デフォルト値:
      localhost
    • interval
      このプロパティは、メトリックを収集するための間隔をミリ秒単位で指定します。
      デフォルト値:
      15000
    • configReloadInterval
      このプロパティは、設定の変更をポーリングする間隔をミリ秒単位で指定します。
      デフォルト値:
      60000
    • virtualStackPollPeriod
      このプロパティは、ポーリングの期間または間隔を指定します。
      デフォルト値:
      10000
    • maxTrxMapSize
      このプロパティは、トランザクションを格納するために使用されるマップの最大サイズを指定します。
      デフォルト値:
      5000
    • httpReqDecEnabled
      このプロパティは、送信 HTTP 要求に対する特別な HTTP ヘッダの挿入を有効および無効にします。 相関機能が動作するには、この値が
      true
      である必要があります。
      デフォルト値:
      True
    • maxPingDelay
      Node.js プローブ エージェントとインフラストラクチャ エージェントの間でメッセージが交換されます。
      通信(キープアライブ)間の遅延期間を指定します。
      デフォルト値:
      15000
  4. ファイルを保存して閉じます。
  5. 管理対象アプリケーションを再起動します。
例: Node.js プローブ エージェントのログ記録の設定
ログ プロパティを編集して、Node.js プローブ エージェントのログ記録を設定できます。
以下の手順に従います。
  1. <
    Node.js_Home
    >/ca-apm-probe ディレクトリに移動します。
  2. config.json
    ファイルをテキスト エディタで開きます。
  3. 以下のプロパティを見つけて、プローブ ログの場所の相対パスまたはフル パスを指定します。
    "logFile": "../logs/Probe-<ProbeName>.log",
    例:
    "logFile": "../MyDirectory/Probe-<ProbeName>.log",
  4. 以下のプロパティを見つけて、次のいずれかの値を指定します: debug|error|info|warn|disabled
    "logLevel": "info"
    例:
    "logLevel": "warn"
  5. ファイルを保存して閉じます。
  6. 管理対象アプリケーションを再起動します。
インフラストラクチャ エージェントのログ記録の設定
インフラストラクチャ エージェントのログ記録を設定するには、
apmia/
core/config/IntroscopeAgent.profile
ファイルの
log4j.logger.IntroscopeAgent
プロパティを使用します。
プロパティ名:
log4j.logger.IntroscopeAgent
このプロパティは、ログ情報のログ レベルと出力場所の両方を指定します。
値:
これらの値は、詳細レベルを設定します。
  • INFO
  • DEBUG
これらの値は、ログ情報の送信先を設定します。
  • コンソール
  • Logfile
  • console と logfile の両方
デフォルト: <パスワード>
INFO、logfile
log4j.logger.IntroscopeAgent=INFO, logfile
例:
  • ログ記録レベルを引き上げるには、プロパティを以下のように設定します。
    log4j.logger.IntroscopeAgent=DEBUG#com.wily.util.feedback.Log4JSeverityLevel, console, logfile
  • 出力をコンソールのみに送信するには、プロパティを以下のように設定します。
    log4j.logger.IntroscopeAgent=INFO, console
  • 出力をログ ファイルのみに送信するには、プロパティを以下のように設定します。
    log4j.logger.IntroscopeAgent=INFO, logfile
  • エージェントのログを無効にするには、このプロパティから以下のようにオプションを削除します。
    log4j.logger.IntroscopeAgent=
注:
プロパティの更新はただちに有効になり、管理アプリケーションまたはインフラストラクチャ エージェントの再起動は必要ありません。
ProbeBuilder ディレクティブを使用した Node.js 監視の設定
WebView およびチーム センターに表示されるメトリックは、ProbeBuilder ディレクティブ(PBD)の機能です。 PBD では、アプリケーションと、アプリケーションの実行時アクティビティをインスツルメントします。 Node.js を監視する PBD を設定することができます。
nodejs-typical.pbl
ファイルには、次のファイル名が含まれます。
ファイル名
説明
nodejs-toggles-
typical
.pbd
このファイルは、後続の
*.pbd
ファイル内の他のディレクティブに従うことを決めるために TurnOn スイッチを提供します。 このファイルには、以下のトレーサ フラグが含まれます。
注:
デフォルトでは、これらのトレーサ フラグはオンになっています。
  • HttpFrontendTracing
  • FileBackendTracing
  • NodeClassDeepTracing
  • HttpURLConnectionBackend
  • FragmentTracing
  • SqlTracing
  • ExpressTracing
  • MongoDBTracing
nodejs-common.pbd
このファイルは、一般的な Node.js の各種構成要素のサポートを実装するディレクティブを提供します。 このファイルは Introscope デフォルト ファイルと共に使用します。
以下の手順に従います。
  1. <
    Node.js_Home
    >/core/config に移動します。
  2. nodejs-toggles-typical.pbd
    ファイルをテキスト エディタで開きます。
  3. ファイルの指示に従って PBD を設定します。
    • TurnOn
      ディレクティブをコメント化またはコメント化解除して、追跡対象の Node.js コンポーネントのセットを変更できます。
      例: は、識別コンポーネントの追跡やアプリケーションのパフォーマンスの診断を行う必要がない場合、エージェントのオーバーヘッドを最小限に抑えるための高深度追跡を無効にします。 このプロパティをコメント化します。
    #TurnOn: NodeClassDeepTracing
  4. ファイルを保存して閉じます。
Node.js フロントエンド URL グループの設定
フロントエンド URL グループ
は、URL パスのプレフィックスに関して定義するトランザクションの名前付きグループです。 Introscope では、URL グループごとにメトリックを集計します。 Node.js メトリックは、メトリック ブラウザ ツリーで Frontends|Apps|<
ApplicationName
>|URLs ノードの下に表示されます。 パスのプレフィックスは、URL のホスト名に続く部分です。 たとえば、この URL では、パス プレフィックスは /testWar です。
1 つの URL のパス プレフィックスから派生する可能性がある要求のカテゴリに対してフロントエンド URL グループを定義できます。 たとえば、Node.js の URL の形式に応じて、URL をいくつかの方法で定義できます。 たとえば、アプリケーションでサポートする顧客ごと、または主要なアプリケーションごと、またはサブ アプリケーションごとのグループなどです。 この柔軟性によって、コミットされたサービスレベルのコンテキストでのパフォーマンス、またはアプリケーションの重要な部分のパフォーマンスを監視できます。
展開に最も関連するメトリックを提供するように Node.js フロントエンド URL グループ プロパティを設定できます。 Node.js フロントエンド URL グループの設定は、Java フロントエンド URL グループの設定と同じです。
以下の手順に従います。
  1. apmia/core/config/IntroscopeAgent.profile に移動します。
  2. ファイルをテキスト エディタで開き、
    # URL Grouping Configuration
    セクションを検索します。
  3. Node.js URL グループ プロパティを設定します。
    Java エージェントの記事「フロントエンド URL グループの設定」の情報を使用して、以下の設定を実施します。
    1. Node.js フロントエンド URL グループを設定します。 これらのプロパティは連携します。
      introscope.agent.urlgroup.keys=default
      introscope.agent.urlgroup.group.default.pathprefix=*
      introscope.agent.urlgroup.group.default.format={path_delimited:/:0:5}
      introscope.agent.urlgroup.frontend.url.clamp=5
    2. 一意のフロントエンド URL グループ メトリックの数を制限します。
    3. フロントエンド リソース URL グループの理解
      設定後、アプリケーション サーバを再起動する必要はありません。
バックエンド パス グループの名前付け
すべてがデフォルトの introscopeAgent.profile 設定に設定されている場合、これらのバックエンド パス グループ プロパティは連携します。
introscope.agent.backendpathgroup.keys=default
introscope.agent.backendpathgroup.group.default.pathprefix=*
introscope.agent.backendpathgroup.group.default.format={path_delimited:/:0:5}
introscope.agent.urlgroup.backend.url.clamp=5
この設定では、デフォルトのバックエンド パスは、バックエンド パス グループに表示されます。 グループは、バックエンド パスの後に 2 つのセグメントが配置されて命名されます。
たとえば、通常のバックエンド パスが
Backends|WebService at {protocol}_//{host}_{port}|Paths
ノードの下に記載されているとします。 すべての Java アプリケーション間で作成されたバックエンド パス グループの数は、
introscope.agent.urlgroup.backend.url.clamp
設定に達する可能性があります。 クランプがトリガされたら、新しいバックエンド パスが
Backends|WebService at {protocol}_//{host}_{port}|Paths|
Default
ノードの下に表示されます。
詳細:
インフラストラクチャ エージェントには、Node.js 用に APM を最適化するための Java プロパティのサブセットがあります。 プロパティとトレーサ タイプの詳細については、以下を参照してください。
Node.js バックエンド パス グループの設定
Node.js バックエンド パス グループ プロパティを設定します。
以下の手順に従います。
Java エージェントの記事「バックエンド パス グループの設定」の情報を使用して、以下の設定を実施します。
  1. apmia/core/config/IntroscopeAgent.profile をテキスト エディタで開きます。
  2. Node.js バックエンド グループを設定します。 これらのプロパティは連携して動作します。
    introscope.agent.backendpathgroup.keys=default
    introscope.agent.backendpathgroup.group.default.pathprefix=*
    introscope.agent.backendpathgroup.group.default.format={path_delimited:/:0:5}
    introscope.agent.urlgroup.backend.url.clamp=5
  3. ファイルを保存して閉じます。
    インフラストラクチャ エージェントを再起動します。
一意のバックエンド パス URL グループ メトリックの数の制限
introscope.agent.urlgroup.backend.url.clamp
プロパティを使用して、Node.js エージェントによって作成される一意のバックエンド パス グループ URL メトリックの数を制限することができます。 新しいバックエンド パス グループの数は、設定された値に達する可能性があります。 クランプがトリガされたら、新しいバックエンド パス グループ URL のメトリックが、メトリック ブラウザの
Backends|WebService at {protocol}_//{host}_{port}|Paths|
Default
ノードの下に表示されます。 このプロパティは、メトリックの急増を防ぐのに役立ちます。
Backends|WebService at {protocol}_//{host}_{port}|Paths
ノードから意味のあるメトリックを収集するには、展開に関連するバックエンド パス グループを設定します。
以下の手順に従います。
  1. apmia/core/config/IntroscopeAgent.profile に移動します。
  2. ファイルをテキスト エディタで開き、
    # URL Grouping Configuration
    セクションを検索します。
  3. introscope.agent.urlgroup.backend.url.clamp
    プロパティを設定します。
    バックエンド パス グループ URL 数のデフォルトは、
    5
    つです。
  4. ファイルを保存して閉じます。
    管理対象アプリケーションの再起動は必要ありません。