Node.js アプリケーションの監視

APM for Node.js では、Node.js アプリケーションのパフォーマンスを監視できます。
apmdevops106
APM for Node.js では、Node.js アプリケーションのパフォーマンスを監視できます。
アプリケーション所有者は、以下の概略的な手順に従います。
  1. パフォーマンスを監視するには、通常の APM の手順を使用します。
  2. APM for Node.js に固有の追加情報を確認および使用します。
Node.js エージェント属性は、すべてのエージェントおよびインフラストラクチャ エージェント拡張機能が使用する共通属性です。
Node.js アプリケーション メトリックの表示
Node.js アプリケーションのメトリックを表示できます。 [メトリック ブラウザ]タブでは、Node.js プローブ エージェントがレポートする BlamePoint メトリックを参照できます。 たとえば、Express や LoopBack などのフロントエンド フレームワークのメトリック、MongoDB、MySQL、Redis などのバックエンド フレームワークのメトリックを表示できます。
以下の手順に従います。
  1. Team Center で、詳細パネルから個々のメトリックなどの目的の項目をクリックします。
    WebView が開き、監視対象の Node.js プロセスのメトリックが表示されます。
    例:
    nodejs-probes | <
    Agent
    > | Frontends | Apps | <
    Probe_Name
    > |
    エージェントは、以下のそれぞれについて複数のレベルでフロントエンド メトリックを示します。
    1 - アプリケーション
    2 - アプリケーションの URL
    3 - URL で要求されたバックエンド システム
  2. BlamePoint メトリックを調査します。
  3. nodejs-probes | <Agent>
    ノードに移動します。
    フロントエンドまたはバックエンドのフレームワーク(たとえば、Express)の名前が付けられたノードが、次のレベルに表示されます。
    フロントエンドおよびバックエンドのフレームワーク
    ノード アプリケーションのルートは、URI、HTTP 要求メソッド(GET、POST など)の組み合わせです。
  4. BlamePoint メトリックを調査するノードに移動します。
  5. メトリックをクリックし、パフォーマンス情報を表示します。 右側のペインのタブをクリックして、イベントおよびその他のデータを分析します。 たとえば、[エラー]タブをクリックしてアプリケーション エラーを検出します。
Node.js ランタイムの稼働状況の表示
Node.js プローブ エージェントは、プログラムが実行中または実行されている場合に動的にアプリケーションを監視します。 Node.js ランタイムのメトリックは、Node.js プロセスの稼働状況の監視に役立ちます。
以下の手順に従います。
  1. Team Center のメトリック ブラウザで、[Node.js Runtime]ノードに移動します。
  2. nodejs-probes | <Agent> | Node.js Runtime | Metrics
    ランタイムの稼働状況メトリックを以下に示します。
    CPU System Percent
    プロセスのためにカーネル内で費やされた CPU 時間。 このメトリックは、実時間の割合として表されます。 この値はマルチコア システム上で 100 パーセントを超える場合があります。 CPU 時間は、CPU がプロセスのために指示を実行している場合に経過した実時間です。 たとえば、プロセスまたはその対応するカーネル スレッドが実際に実行されている場合です。
    CPU User Percent
    ユーザ CPU 時間。 CPU 時間は、ユーザ領域のプロセスの実行に直接起因します。 この時間は、実時間の割合として表されます。 マルチコア システム上で 100 パーセントを超える場合があります。
    イベント ループ平均ティック時間(ミリ秒)
    前回の間隔のイベント ループ ティックにかかった平均時間(ミリ秒)。 高パフォーマンス アプリケーションでは、[平均ティック時間]の値はトランザクション負荷に反比例します。
    間隔あたりのイベント ループのティック数
    前回の間隔におけるイベント ループのティックの合計数。 高パフォーマンス アプリケーションでは、[間隔あたりのティック数]の値はトランザクション負荷に直接比例します。
    GC Heap Used
    マイナーまたはメジャーのガベージ コレクタ サイクルの後に使用中のままになっている V8 ヒープの量(バイト単位)。 V8 ヒープは、JavaScript オブジェクトと値を格納します(2,147,483,648 ~ 2,147,483,647 の範囲の整数を除く)。 正確な範囲は、プロセッサのアーキテクチャに依存します。
    HTTP Connection Count
    前回の間隔における新しい HTTP 接続の数。
    HTTP Connections / sec
    1 秒あたりの新しい HTTP 接続の数。
    Heap Total
    V8 ヒープの合計サイズ(バイト単位)。
    Used
    使用中の V8 ヒープの量(バイト単位)。
    CPU Total Percent
    ユーザ時間とシステム時間の合計。実時間の割合として表されます。 この値はマルチコア システム上で 100 パーセントを超える場合があります。
  3. メトリックをクリックし、パフォーマンス情報を表示します。 右側のペインのタブをクリックして、イベントおよびその他のデータを分析します。 たとえば、[エラー]タブをクリックしてアプリケーション エラーを検出します。
Team Center での高速メトリックの表示
Node.js アプリケーションで Express フレームワークを使用する場合、Team Center には、マップ ビューで Express.js ノードが表示されます。 ノード名は、< RouteName > (< HTTPMethodName >)です。
[Express.js]タブの下にある Express BlamePoint メトリックを表示することができます。
Node.js トランザクション追跡について
Node.js トランザクションは非同期です。 以下の 2 つの方法で非同期オペレーションを実行します。
順次
– 連続して発生する非同期イベントは、同じレベルでのシーケンシャル コンポーネントとして表示され、同じレーンとして識別されます。 親子関係がある非同期イベントは、次のレベルに呼び出されたコンポーネントとして表示されます。 任意の時点で 1 つの子イベントは、同じレーンで続行されます。
並列
– Node.js プローブ エージェントが 2 つ以上の並列非同期オペレーションを検出すると、エージェントは、並列オペレーション シーケンスごとに個別のレーンを作成します(トランザクション フラグメント)。
異なるイベントは、非同期オペレーションの追跡において重要です。
  • オペレーションの開始
    – このイベントは、非同期の API 呼び出しの起動の開始から測定され、トランザクション コンポーネントの開始時刻をマークします。
  • オペレーションの終了
    -- このイベントは、オペレーション結果のコールバックの先頭から測定され、トランザクション コンポーネントの終了時刻をマークします。 このイベントは、次の非同期オペレーションの開始が、前回のオペレーションに続く、または並行する場合にも追跡します。
以下の例は、シーケンシャルな追跡を示しています。
連続して発生する非同期イベントは、最初のオペレーションの結果のコールバックで、次の非同期オペレーションを開始します。 これらのイベントは、同じレベルでのシーケンシャル コンポーネントとして表示され、同じレーンとして識別します。 以下の図は、シーケンシャルな追跡を示しています。
シーケンシャルな追跡
非同期イベントには、非同期操作が完了する別の操作を呼び出すときに親子関係があります。 非同期イベントは、次のレベルに呼び出されたコンポーネントとして表示されます。 任意の時点で、このような 1 つの子イベントが発生する場合、追跡は同じレーンで行われます。
Node.js プローブが、実行中の並列非同期オペレーションを 2 つ以上検出すると、並列オペレーション シーケンスごとに個別のレーンを作成します。
  • メイン トランザクションには、1 つのみレーンがあります。
  • トランザクションに追加される各追加レーンは、新しいトランザクション フラグメントとなります。 トランザクション フラグメントには、「フラグメント」という名前の特殊な最初の blame コンポーネントがあり、それを作成したメイン トランザクション コンポーネントで識別されます。 トランザクション フラグメントには、メイン トランザクションと同じ相関 ID があります。
以下の例では、並列の追跡での非同期要求を示しています。 個別のレーンはトランザクション フラグメントを示しています。
parallel trace.png
以下の手順に従います。
  1. WebView でトランザクション追跡セッションを実行して、トランザクション追跡を表示します。
    トランザクション追跡セッションを開始すると、フィルタ条件に一致するトランザクションが追跡ビューに表示されます。 実行のレーンで構成されるスタック表示に、トランザクション コンポーネントが表示されます。 Node.js プローブ エージェントが、非同期オペレーション イベントを検出すると、スタックは、各トランザクションについて、個別のレーン内の状態を追跡します。
  2. データ ビューアで、スタック表示のコンポーネントを上から下に確認し、アプリケーション パフォーマンスを評価します。
  3. コンポーネントの詳細を確認します。 たとえば、Express フレームワークには、以下の詳細が含まれます。
    タイプ: Express
    名前: POST
    パス:
    Express/rest/account/_session/logout/POST
    クラス: ルート
    Express ルート: /rest/account/session/logout
    HTTP メソッド: POST
    メソッド: dispatch
APM for Node.js エラーについて
APM for Node.js では、Node.js プローブ内のコールバック引数の一部であるエラー オブジェクトをキャプチャします。 APM for Node.js では、例外をキャプチャしません。 スナップショット エラーの場合、APM for Node.js エラーは
Node.Error
記法を使用します。 エラー スナップショット内の以下のパラメータは、Node.js に関連します。
アプリケーション名
アプリケーション/プローブ エージェントの名前。
クラス
PBD で指定されている、エラー スナップショットの原因となった Node.js のモジュール/機能名。
エラー メッセージ
このパラメータは、何がエラーの原因となったかについての情報を提供します。
例外
このパラメータは、何がエラーの原因となったかについての情報を提供します(このパラメータは、[エラー メッセージ]と同じ)。
リソース名
PBD で、そのクラスのトレーサ ディレクティブで指定されているリソース名。
サーバ名
Node.js アプリケーションが実行されているホスト名。
サーバ ポート
Node.js アプリケーションが実行されているポート。
スレッド名
このパラメータは、Node.js アプリケーション プロセスの pid を提供します。
追跡タイプ
値は、エラーの ErrorSnapshot、またはストールの StallSnapshot です。
URL
エラーの原因となった URL。
注:
エラーは MySQL および HTTP プローブでのみサポートされます。
以下の例に示すように、このエラーはスタック ビューに表示されます。
Error Message: Frontends|Aps\nodetixchange-3000|URLs|Default: Node.Error: Http 403: Forbidden
Node-ErrorSnapshot.png