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

APM for Node.js を使用して、パフォーマンス データを監視できます。
apmdevops102jp
APM for Node.js を使用して、パフォーマンス データを監視できます。
アプリケーション所有者は、以下の概略的な手順に従います。
  1. APM for Node.js に固有の追加情報を確認および使用します。
Node.js アプリケーション メトリックの表示
Node.js アプリケーションのメトリックを表示できます。[メトリック ブラウザ]タブでは、Node.js プローブ エージェントがレポートする Blame メトリックを参照できます。たとえば、Express や LoopBack などのフロントエンド フレームワークのメトリック、MongoDB、MySQL、Redis などのバックエンド フレームワークのメトリックを表示できます。
以下の手順に従います。
  1. Team Center で、詳細パネルから個々のメトリックなどの目的の項目をクリックします。
    WebView が開き、監視対象の Node.js プロセスのメトリックが表示されます。
    例:
    nodejs-probes | <
    Agent
    > | Frontends | Apps | <
    Probe_Name
    > |
    エージェントは、以下のそれぞれについて複数のレベルでフロントエンド メトリックを示します。
    1 - アプリケーション
    2 - アプリケーションの URL
    3 - URL で要求されたバックエンド システム
  2. Blame メトリックを調査します。
  3. nodejs-probes | <Agent> ノードに移動します。
    フロントエンドまたはバックエンドのフレームワーク(たとえば、Express)の名前が付けられたノードが、次のレベルに表示されます。
    Frontend and Backends Frameworks
    ノード アプリケーションのルートは、URI、HTTP 要求メソッド(GET、POST など)の組み合わせです。
  4. Blame メトリックを調査するノードに移動します。
  5. メトリックをクリックし、パフォーマンス情報を表示します。右側のペインのタブをクリックして、イベントおよびその他のデータを分析します。たとえば、[エラー]タブをクリックしてアプリケーション エラーを検出します。
Node.js ランタイムの稼働状況の表示
Node.js プローブ エージェントは、プログラムが実行中または実行されている場合に動的にアプリケーションを監視します。Node.js ランタイムのメトリックは、Node.js プロセスの稼働状況の監視に役立ちます。
以下の手順に従います。
  1. Team Center で、[WebView]をクリックします。
    APM WebView が表示されます。
  2. [INVESTIGATOR] - [メトリック ブラウザ]をクリックします。
  3. メトリック ブラウザ ツリーで[Node.js Runtime]ノードに移動します。
    nodejs-probes | <Agent> | Node.js Runtime | Metrics
    ランタイムの稼働状況メトリックが一覧表示されます。
    CPU System Percent
    -- 実時間の割合として表される、プロセスのためにカーネル内で費やされた CPU 時間。この値はマルチコア システム上で 100% を超える場合があります。CPU 時間は、CPU がプロセスのために指示を実行している場合に経過した実時間です(たとえば、プロセスまたはその対応するカーネル スレッドが実際に実行されている場合)。
    CPU User Percent
    -- ユーザ CPU 時間。CPU 時間は、ユーザ領域のプロセスの実行に直接起因します。この時間は、実時間の割合として表されます。マルチコア システム上で 100% を超える場合があります。
    Event Loop
    – イベント ループのティックの数、および最小、最大、平均ティック時間(ミリ秒)。
    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% を超える場合があります。
  4. メトリックをクリックし、パフォーマンス情報を表示します。右側のペインのタブをクリックして、イベントおよびその他のデータを分析します。たとえば、[エラー]タブをクリックしてアプリケーション エラーを検出します。
Node.js トランザクション追跡について
Node.js トランザクションは非同期です。以下の 2 つの方法で非同期オペレーションを実行します。
順次
– 連続して発生する非同期イベントは、同じレベルでのシーケンシャル コンポーネントとして表示され、同じレーンとして識別されます。親/子関係がある非同期イベントは、次のレベルに呼び出されたコンポーネントとして表示されます。任意の時点で 1 つの子イベントは、同じレーンで続行されます。
並列
– Node.js プローブ エージェントが 2 つ以上の並列非同期オペレーションを検出すると、エージェントは、並列オペレーション シーケンスごとに個別のレーンを作成します(トランザクション フラグメント)。
異なるイベントは、非同期オペレーションの追跡において重要です。
  • オペレーションの開始
    – このイベントは、非同期の API 呼び出しの起動の開始から測定され、トランザクション コンポーネントの開始時刻をマークします。
  • オペレーションの終了
    -- このイベントは、オペレーション結果のコールバックの先頭から測定され、トランザクション コンポーネントの終了時刻をマークします。このイベントは、次の非同期オペレーションの開始が、前回のオペレーションに続く、または並行する場合にも追跡します。
以下の例は、シーケンシャルな追跡を示しています。
連続して発生する非同期イベント(最初のオペレーションの結果のコールバック、次の非同期オペレーションの開始)は、同じレベルでのシーケンシャル コンポーネントとして表示され、同じレーンとして識別されます。以下の例は、シーケンシャルな追跡を示しています。
a sequential trace
親/子関係がある非同期イベント(完了するための別のオペレーションを呼び出す非同期オペレーション)は、次のレベルに呼び出されたコンポーネントとして表示されます。任意の時点で、このような 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 プローブでのみサポートされます。
以下の例に示すように、このエラーはスタック ビューに表示されます。
エラー メッセージ: Frontends|Aps\nodetixchange-3000|URLs|Default: Node.Error: Http 403: Forbidden
Node-ErrorSnapshot.png