Node.js コードのプロファイリング

このページでは、Node.js コードのプロファイリング用に Stackdriver Profiler の設定方法について説明します。Node.js の場合、Profiler は経過時間とヒープに関するプロファイリングを行います。詳しくは、プロファイリングのコンセプトをご覧ください。

以下のバージョンの Node.js がサポートされています。

  • 8.9.4 以降(8.x バージョン ブランチ)
  • 10.4.1 以降(10.x バージョン ブランチ)

次の環境の Linux 上でプロファイリング エージェントを使用できます。

  • Compute Engine
  • Google Kubernetes Engine
  • App Engine

Google Cloud Platform 以外のシステムで Node.js コードをプロファイリングすることもできます。詳細については、Google Cloud Platform の外部で実行されるコードのプロファイリングをご覧ください。

Profiler API を有効にする

プロファイリング エージェントを使用する前に、基盤となる Profiler API が有効になっている必要があります。Cloud SDK gcloud コマンドライン ツールまたは Cloud Console で API のステータスを確認し、無効になっている場合は有効にしてください。

Cloud SDK

  1. ワークステーションに Cloud SDK がまだインストールされていない場合は、Google Cloud SDK をご覧ください。

  2. 次のコマンドを実行します。

    gcloud services enable cloudprofiler.googleapis.com
    

詳細については、gcloud services をご覧ください。

Cloud Console

  1. [API とサービス] ダッシュボードに移動します。

    [API とサービス] に移動

  2. API へのアクセスで使用するプロジェクトを選択します。

  3. [API とサービスを追加] ボタンをクリックします。

    API とサービスの追加

  4. Profiler API を検索します。

  5. 検索結果で、Stackdriver Profiler API を選択します。

  6. [API が有効です] が表示されている場合、API はすでに有効になっています。そうでない場合は、[有効にする] ボタンをクリックします。

Stackdriver Profiler を使用する

サポートされている環境で Profiler を使用するには、パッケージをインストールし、アプリケーションでパッケージを必須に設定してから、アプリケーションを通常の方法でデプロイします。

Stackdriver Profiler の最新バージョンをインストールするには、次のコマンドを実行します。

    npm install --save @google-cloud/profiler

Trace エージェントも使用している場合は、コードを変更するときに、Trace エージェント(@google-cloud/trace-agent)の後に Profiler をインポートします。詳細については、Node.js 用の Stackdriver Trace の設定をご覧ください。

Compute Engine

Compute Engine の場合は、次の操作を行います。

  1. Stackdriver Profiler の最新バージョンをインストールします。

    npm install --save @google-cloud/profiler
    
  2. アプリケーションの require コードを変更して、serviceContext オブジェクトを作成します。このオブジェクトにより、プロファイリングされるサービスの名前を service に割り当てます。プロファイリングされるサービスのバージョンを version に割り当てることもできます。これらの構成オプションの詳細については、サービス名とバージョンの引数をご覧ください。

    require('@google-cloud/profiler').start({
      serviceContext: {
          service: 'your-service',
          version: '1.0.0'
      }
    });

Google Kubernetes Engine

Google Kubernetes Engine(GKE)の場合は、次の操作を行います。

  1. Dockerfile を変更して Profiler パッケージをインストールします。

    FROM node:10
    ...
    RUN npm install @google-cloud/profiler
    
  2. アプリケーションの require コードを変更して、serviceContext オブジェクトを作成します。このオブジェクトにより、プロファイリングされるサービスの名前を service に割り当てます。プロファイリングされるサービスのバージョンを version に割り当てることもできます。これらの構成オプションの詳細については、サービス名とバージョンの引数をご覧ください。

    require('@google-cloud/profiler').start({
      serviceContext: {
          service: 'your-service',
          version: '1.0.0'
      }
    });

App Engine

App Engine の場合、require コードは次のようになります。

require('@google-cloud/profiler').start();

App Engine では、service パラメータと version パラメータは環境から取得されるため、これらを指定する必要はありません。serviceContext オブジェクトを作成する必要はありません。

データを分析する

Profiler が収集したデータを Profiler のインターフェースに表示し、分析できます。このインターフェースの開始方法については、Profiler インターフェースを開くをご覧ください。

サービス名とバージョンの引数

Profiler エージェントを読み込むときに、service-name 引数とオプションの service-version 引数を指定して構成します。

Profiler は、サービス名で指定されたサービスのすべてのレプリカからプロファイリング データを収集します。Profiler サービスは、サービス バージョンとゾーンの組み合わせに対して、1 つのサービス名について平均で 1 分あたり 1 個のプロファイルを作成します。

たとえば、1 つのサービスの 2 つのバージョンが 3 つのゾーンのレプリカで実行されている場合、Profiler はそのサービスについて 1 分あたり平均で 6 個のプロファイルを作成します。

レプリカで異なるサービス名を使用している場合、サービスが必要以上にプロファイリングされるため、オーバーヘッドが大きくなります。

サービス名を選択する場合は、次の点に注意してください。

  • アプリケーション アーキテクチャでサービスを明確に識別できる名前を選択してください。1 つのサービスまたはアプリケーションしか実行していない場合は、どのようなサービス名を選択するかはさほど問題になりません。しかし、アプリケーションが一連のマイクロサービスとして実行されている場合は、名前の選択は重要になります。

  • service-name 文字列で、プロセス ID などのプロセス固有の値を使用しないでください。

  • service-name 文字列は次の正規表現と一致する必要があります。

    ^[a-z]([-a-z0-9_.]{0,253}[a-z0-9])?$

サービス名として imageproc-service のような静的文字列を使用することをおすすめします。

サービス バージョンは省略可能です。サービス バージョンを指定すると、複数のインスタンスからプロファイリング情報が集約され、バージョンごとに表示されます。これは、複数のバージョンがデプロイされているときの識別に役立ちます。Profiler UI では、データをサービス バージョンでフィルタできます。これにより、コードの新旧バージョンのパフォーマンスを比較できます。

service-version 引数には、自由形式の文字列を指定できますが、通常は、バージョン番号のような値を使用します(例: 1.0.02.1.2)。

エージェント ロギング

プロファイリング エージェントには、ロギング情報を出力する機能があります。ロギングを有効にするには、エージェントの起動時に logLevel オプションを設定します。サポートされている logLevel 値は次のとおりです。

  • 0: すべてのエージェント ロギングを無効にします。
  • 1: エラーロギングを有効にします。
  • 2: 警告ロギングを有効にします(デフォルト)。
  • 3: 情報ロギングを有効にします。
  • 4: デバッグ ロギングを有効にします。

サービス コンテキストを提供する同じオブジェクトに logLevel 値を設定します。

require('@google-cloud/profiler').start({
    serviceContext: { ... }
    logLevel:       3
});

既知の問題

Node.js 用 Stackdriver Profiler のベータ版リリースで次の問題が確認されています。

  • Node.js のプロファイリング エージェントが原因でプログラムが通常どおり終了しません。プログラムのすべてのタスクが完了してからプログラムが終了するまでに、最大で 1 時間ほどかかります。Ctrl-C などを使用してプログラムを強制終了すると、プログラムがすぐに終了します。

次のステップ

Stackdriver Profiler インターフェースの使用で Profiler のグラフとコントロールについて学習します。詳細については、以下をご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。