Dataflow モニタリング ダッシュボードをカスタマイズする

このページでは、Cloud Monitoring 指標をクエリするグラフを追加して、Dataflow のプロジェクト モニタリング ダッシュボードをカスタマイズする方法について説明します。

プロジェクト モニタリング ダッシュボードを使用すると、ジョブのコレクションをモニタリングし、全体的な健全性とパフォーマンスを確認できます。ダッシュボードには、ほとんどのワークロードに役立つデフォルトのグラフセットが含まれています。ダッシュボードをカスタマイズすることで、ビジネス要件に固有のグラフを追加できます。

シナリオの例

ダッシュボードをカスタマイズする方法を確認するために、組織がプロジェクトの上位 25 個のジョブの推定費用を追跡すると仮定します。

このシナリオでは、ジョブに次の特性があることを前提とします。

  • ジョブはすべてストリーミング ジョブです。
  • ジョブはデータ処理課金モデルを使用します。
  • ジョブは、標準(HDD)と SSD の両方の Persistent Disk にファイルを保存します。
  • ジョブで GPU は使用されていません。

指標を選択する

前のセクションで説明した前提条件に基づいてジョブの費用を見積もるには、次の指標が必要です。

リソース関連する指標
CPU(1 時間あたりの vCPU) job/total_vcpu_time
メモリ(1 時間あたりの GB) job/total_memory_usage_time
シャッフル中に処理されたデータ(GB) job/total_streaming_data_processed
Persistent Disk の使用量(1 時間あたりの GB、Standard と SSD) job/total_pd_usage_time

詳しくは、Dataflow の料金をご覧ください。

Monitoring で使用可能なリソースについては、モニタリング対象リソースタイプをご覧ください。

PromQL クエリを記述する

Cloud Monitoring から指標をクエリするには、Prometheus Query Language(PromQL)を使用します。このセクションでは、シナリオの PromQL クエリを小さな句から構築して記述する方法について説明します。このセクションでは、PromQL の予備知識は必要ありません。詳細については、Cloud Monitoring の PromQL をご覧ください。

指標名を PromQL 文字列にマッピングする

PromQL クエリで Monitoring 指標を使用するには、次のように指標名を PromQL 文字列にマッピングする必要があります。

指標名PromQL 文字列
job/total_vcpu_time dataflow_googleapis_com:job_total_vcpu_time
job/total_memory_usage_time dataflow_googleapis_com:job_total_memory_usage_time
job/total_streaming_data_processed dataflow_googleapis_com:job_total_streaming_data_processed
job/total_pd_usage_time dataflow_googleapis_com:job_total_pd_usage_time

詳細については、Cloud Monitoring 指標を PromQL にマッピングするをご覧ください。

クエリをビルドする

推定費用を取得するには、各指標の最新の値に基づいて各コンポーネントの料金を計算します。指標は 60 秒ごとにサンプリングされるため、最新の値を取得するには、1 分間のウィンドウ関数を使用して、各ウィンドウ内の最大値を取得します。

  • 推定 CPU 費用を取得するには、まず job/total_vcpu_time を秒から時間に変換します。CPU の 1 時間あたりの vCPU 単価を掛けます。

    # ((vCPU time)[Bucket 1m] / Seconds per hour * vCPU Price)
    max_over_time(dataflow_googleapis_com:job_total_vcpu_time[1m]) / 3600 * CPU_PRICE
    

    この式により、プロジェクト内のすべてのジョブの推定 CPU 費用を計算できます。1 時間あたりの CPU 費用の見積もりを取得するには、sum 集計演算子を使用してジョブ ID でグループ化します。

    sum(
      max_over_time(dataflow_googleapis_com:job_total_vcpu_time[1m]) / 3600 * CPU_PRICE
    ) by (job_id)
    
  • メモリの推定費用を取得するには、job/total_memory_usage_time を秒から時間に変換します。1 時間あたりの GB 単価のメモリ料金を乗算し、ジョブ ID でグループ化します。

    #((Memory time)[Bucket 1m] / Seconds per hour) * Memory Price
    sum(
      max_over_time(dataflow_googleapis_com:job_total_memory_usage_time[1m]) / 3600 * MEMORY_PRICE
    ) by (job_id)
    
  • シャッフル費用の見積もりを取得するには、job/total_streaming_data_processed をバイトから GB に変換します。シャッフル中に処理されたデータの料金(GB 単価)を乗算し、ジョブ ID でグループ化します。

    # Shuffle Billing. Reported once every 60 seconds, measured in bytes.
    # Formula: (Shuffle Data)[Bucket 1m] / (Bytes in GB) * (Shuffle Price)
    sum(
      max_over_time(
        dataflow_googleapis_com:job_total_streaming_data_processed[1m]
     ) / 1000000000 * SHUFFLE_PRICE
    ) by (job_id)
    
  • Persistent Disk の推定使用料金を取得するには、storage_type ラベルでインデックスを作成して、ディスクタイプ(Standard または SSD)ごとに分離します。それぞれの値を GB 秒から GB 時に変換し、ジョブ ID でグループ化します。

    # Formula: ((Standard PD time)[Bucket 1m] / Seconds per hour) * Standard PD price
    sum(
      max_over_time(
        dataflow_googleapis_com:job_total_pd_usage_time{storage_type="HDD"}[1m]
      ) / 3600 * STANDARD_PD_PRICE
    ) by (job_id)
    
    # Formula: ((SSD PD time)[Bucket 1m] / Seconds per hour) * SSD PD price
    sum(
      max_over_time(
        dataflow_googleapis_com:job_total_pd_usage_time{storage_type="SSD"}[1m]
      ) / 3600 * SSD_PD_PRICE
    ) by (job_id)
    
  • 前の値を合計すると、ジョブあたりの推定費用が得られます。上位 25 件のジョブを取得するには、Top-K フィルタを使用します。

    topk(25,
      # Sum the individual values.
    )
    

クエリ全体を記述する

クエリ全体は次のようになります。

topk(25,
sum(
  max_over_time(
    dataflow_googleapis_com:job_total_vcpu_time[1m]) / 3600 * CPU_PRICE
  )
  by (job_id) +
sum(
  max_over_time(
    dataflow_googleapis_com:job_total_memory_usage_time[1m]) / 3600 * MEMORY_PRICE
  )
  by (job_id) +
sum(
  max_over_time(
    dataflow_googleapis_com:job_total_streaming_data_processed[1m]) / 1000000000 * SHUFFLE_PRICE
  )
  by (job_id) +
sum(
  max_over_time(
    dataflow_googleapis_com:job_total_pd_usage_time{storage_type="HDD"}[1m]) / 3600 * STANDARD_PD_PRICE
  )
  by (job_id) +
sum(
  max_over_time(
    dataflow_googleapis_com:job_total_pd_usage_time{storage_type="SSD"}[1m]) / 3600 * SSD_PD_PRICE
  )
  by (job_id)
)

次の変数を、リージョンの Dataflow の料金ページの値に置き換えます。

  • CPU_PRICE: CPU 料金(1 時間あたりの vCPU 単価)
  • MEMORY_PRICE: メモリ料金(1 時間あたりの GB 単価)
  • SHUFFLE_PRICE: シャッフル料金(GB 単価)
  • STANDARD_PD_PRICE: 標準 Persistent Disk の料金(1 時間あたりの GB 単価)
  • SSD_PD_PRICE: SSD Persistent Disk の料金(1 時間あたりの GB 単価)

ダッシュボードを編集する

このプロジェクトで Dataflow のカスタム ダッシュボードをまだ作成していない場合は、次の手順で作成します。

  1. Google Cloud コンソールで、[Dataflow] > [モニタリング] ページに移動します。

    [モニタリング] に移動

  2. [事前定義] プルダウンで、[ダッシュボードをカスタマイズ] をクリックします。

  3. 省略可: [カスタムビュー名] ボックスに、ダッシュボードの名前を入力します。

以前にカスタム ダッシュボードを作成した場合は、次の手順でダッシュボードを編集します。

  1. Google Cloud コンソールで、[Dataflow] > [モニタリング] ページに移動します。

    [モニタリング] に移動

  2. [事前定義] プルダウンで、カスタム ダッシュボードを選択します。

  3. [ダッシュボードを編集] をクリックします。

指標グラフを追加する

指標グラフをダッシュボードに追加する手順は次のとおりです。

  1. [ウィジェットを追加] をクリックします。
  2. [ウィジェットを追加] ペインで、[指標] を選択します。
  3. [ウィジェットのタイトル] ボックスに、グラフのタイトル(Estimated cost (top 25) など)を入力します。
  4. [PROMQL] をクリックします。
  5. 前述の PromQL クエリを貼り付けます。
  6. [クエリを実行] をクリックします。
  7. [適用] をクリックします。
  8. 省略可: グラフをドラッグして、ダッシュボード上の位置を調整します。

次のステップ