Cloud Profiler を使用した Dataflow パイプラインのプロファイリング

Cloud Profiler は、本番環境のアプリケーションから CPU 使用率やメモリ割り当てなどの情報を継続的に収集する、オーバーヘッドの少ないプロファイラです。Dataflow と Cloud Profiler を連携すると、パイプライン コードの中で最もリソースを消費している部分を特定できます。

始める前に

Cloud Profiler のコンセプトを理解し、Profiler インターフェースの操作を習得します。

Profiler ページに初めてアクセスするときに、プロジェクトの Cloud Profiler API が自動的に有効になります。プロジェクトに十分な割り当てがあることを確認します。

Dataflow パイプラインに対して Cloud Profiler を有効にする

Cloud Profiler は、Apache Beam SDK for Java および Python バージョン 2.33.0 以降で作成された Dataflow パイプラインで使用できます。これは、パイプラインの起動時に有効にできます。平均化された CPU とメモリのオーバーヘッドは、パイプラインで 1% 未満と予想されます。

Java

CPU プロファイリングを有効にするには、オプション --dataflowServiceOptions=enable_google_cloud_profiler を使用してパイプラインを開始します。

ヒープ プロファイリングを有効にするには、--dataflowServiceOptions=enable_google_cloud_profiler--dataflowServiceOptions=enable_google_cloud_heap_sampling のオプションを指定してパイプラインを開始します。ヒープ プロファイリングでは Java 11 以降が必要です。

Python

Cloud Profiler を使用するには、Dataflow Runner v2 で Python パイプラインを実行する必要があります。

CPU プロファイリングを有効にするには、オプション --dataflow_service_options=enable_google_cloud_profiler を使用してパイプラインを開始します。Python では、ヒープ プロファイリングがまだサポートされていません。

パイプラインを Dataflow テンプレートからデプロイする場合は、追加のテストとして enable_google_cloud_profiler フラグと enable_google_cloud_heap_sampling フラグを指定して Cloud Profiler を有効にできます。

Console

Google 提供のテンプレートを使用する場合は、Dataflow の [テンプレートからジョブを作成] の [追加テスト] フィールドでフラグを指定できます。

gcloud

gcloud コマンドライン ツールを使用してテンプレートの種類に応じて gcloud dataflow jobs run テンプレートまたは gcloud dataflow flex-template run テンプレートを実行する場合は、--additional-experiments オプションを使用してフラグを指定できます。

API

REST API を使用してテンプレートを実行する場合は、テンプレートの種類に応じて、ランタイム環境(RuntimeEnvironment または FlexTemplateRuntimeEnvironment)の additionalExperiments フィールドを使用してフラグを指定できます。

プロファイリング データを表示する

Cloud Profiler が有効になっている場合は、ジョブページに Profiler ページへのリンクが表示されます。

Profiler ページのリンク

また、Profiler ページに移動して、Dataflow パイプラインのプロファイリング データを確認することもできます。ここで、Service はジョブ名、version はジョブ ID です。

Profiler ページ

トラブルシューティング

Cloud Profiler を有効にしていても、パイプラインでプロファイリング データが生成されない原因はいくつかあります。

  • パイプラインで古いバージョンの Apache Beam SDK が使用されている。パイプラインの Apache Beam SDK バージョンはジョブページで確認できます。Cloud Profiler を使用するには、バージョン 2.33.0 以降が必要です。ジョブが Dataflow テンプレートから作成されている場合は、テンプレートがサポートされている SDK バージョンを使用していることを確認してください。

  • プロジェクトで Cloud Profiler の割り当てが不足している。割り当ての使用状況は、プロジェクトの割り当てページで確認できます。割り当てに達すると、Cloud Profiler サービスがプロファイリング データを拒否します。

Cloud Profiler エージェントは、Dataflow ワーカーの起動時にインストールされます。Cloud Profiler によって生成されたログメッセージは、ログタイプ dataflow.googleapis.com/worker-startup で取得できます。

Profiler ログ