サーバーレス コンピューティングのコストを監視する

この記事では、課金対象の使用状況システム テーブル (パブリック プレビュー) を使用して、サーバーレス コンピューティングの使用のコストを監視する方法について説明します。

サーバーレス コンピューティングのコストに関連するユーザーおよびワークロード属性が含まれる、課金対象の使用状況システム テーブル (system.billing.usage) のクエリを実行することで、ノートブックとジョブのサーバーレス コンピューティングの使用量を監視できます。 該当するフィールドは次のとおりです。

  • identity_metadata 列には、run_as フィールドが含まれます。これは、ワークロードの実行のために資格情報が使用された、ユーザーまたはサービス プリンシパルを示します。
  • usage_metadata 列には、ワークロードを表すフィールド job_run_idjob_namenotebook_id notebook_path と があります。

サーバーレス使用状況レコードに関する考慮事項

サーバーレス使用状況を分析するときには、次の点を考慮してください。

  • 特定の 1 時間における特定のサーバーレス コンピューティング ワークロードに、複数のレコードが関連付けられていることがあります。 たとえば、同じ job_idjob_run_id またはjob_nameを持つものの、それぞれ異なる DBU 消費値を持つ複数のレコードがあるとします。 これらの DBU の合計が、特定のジョブ実行における 1 時間あたりの DBU 消費量を集合的に表しています。

Note

null ワークロード属性の更新については、「今後の予定」を参照してください。

予算を使用して支出を監視する

アカウント管理者は、予算を設定してコストをグループ化し、アラートを設定できます。 予算を使用してアカウントの支出を監視するを参照してください。

使用状況ダッシュボードをインポートする

アカウント管理者は、コスト管理 ダッシュボードを自分のアカウント内の任意の Unity Catalog 対応ワークスペースにインポートできます。 使用状況ダッシュボードをインポートするを参照してください。

UI でジョブまたはノートブックを検索する

課金レコードに基づいて UI でジョブまたはノートブックを検索するには、使用状況レコードから usage_metadata.job_id または usage_metadata.notebook_id 値をコピーします。 これらの ID は不変であり、ジョブ名またはノートブック パスが変更された場合でも使用できます。

UI の job_id に基づく UI でジョブを検索するには、次の操作を行います。

  1. 使用状況レコードから job_id をコピーします。 この例では、ID が 700809544510906 であると想定します。
  2. ジョブと同じ Azure Databricks ワークスペースのワークフロー UI に移動します。
  3. [ユーザーが所有するジョブのみ] フィルターのチェックボックスがオフになっていることを確認してください。
  4. ID (700809544510906) を [ジョブのフィルター] 検索バーに貼り付けてください。

UI の notebook_id に基づく UI でノートブックを検索するには、次の手順を使用してください。

  1. 使用状況レコードから notebook_id をコピーします。 この例では、ID が 700809544510906 であると想定します。
  2. ノートブックと同じ Azure Databricks ワークスペースのワークスペース UI に移動します。
  3. リスト内の任意のノートブックをクリックします。
  4. ノートブックを開いたら、ブラウザーのアドレス バーにある URL を調べてください。 https://<account-console-url>/?o=<workspace ID>#notebook/<notebook ID>/command/<command ID> のようになります。
  5. ブラウザーのアドレス バーで、ノートブック ID を最初の手順でコピーした ID に置き換え、ノートブック ID 以降をすべて削除します。 https://<account-console-url>/?o=<workspace ID>#notebook/700809544510906 のようになります。
  6. ノートブックを開いた後、[共有] ボタンをクリックすると、ノートブックの所有者を表示できます。

アラートを使用してサーバーレスの支出を追跡する

アラートは、サーバーレスの支出に関する情報を常に把握するための強力な方法です。 アラートを使用すると、クエリ結果で特定の条件が満たされたときに通知を受け取ることができます。 アラートを作成する方法については、「アラートを作成する」を参照してください。

次のクエリにアラートを追加し、予算を監視できます。 各クエリで、{budget} を、選択した予算で置き換えます。

過去 30 日間で、ワークスペースの支出がしきい値を超えたときにアラートを出す

このクエリから行が返されるたびにトリガーするようにアラートを設定できます。 {budget} を、選択した予算で置き換えます。

SELECT
   t1.workspace_id,
   SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
   t1.cloud = list_prices.cloud and
   t1.sku_name = list_prices.sku_name and
   t1.usage_start_time >= list_prices.price_start_time and
   (t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
   t1.sku_name LIKE '%SERVERLESS%'
   AND billing_origin_product IN ("JOBS", "INTERACTIVE")
   AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
   t1.workspace_id
HAVING
   list_cost > {budget}

過去 30 日間で、ユーザーがしきい値を超えたときにアラートを出す

このクエリから行が返されるたびにトリガーするようにアラートを設定できます。 {budget} を、選択した予算で置き換えます。

SELECT
   t1.identity_metadata.run_as,
   SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
   t1.cloud = list_prices.cloud and
   t1.sku_name = list_prices.sku_name and
   t1.usage_start_time >= list_prices.price_start_time and
   (t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
   t1.sku_name LIKE '%SERVERLESS%'
   AND billing_origin_product IN ("JOBS", "INTERACTIVE")
   AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
   t1.identity_metadata.run_as
HAVING
   list_cost > {budget}

過去 30 日間で、ジョブがしきい値を超えたときにアラートを出す

このクエリから行が返されるたびにトリガーするようにアラートを設定できます。 {budget} を、選択した予算で置き換えます。

SELECT
   t1.workspace_id,
   t1.usage_metadata.job_id,
   SUM(t1.usage_quantity * list_prices.pricing.default) as list_cost
FROM system.billing.usage t1
INNER JOIN system.billing.list_prices on
   t1.cloud = list_prices.cloud and
   t1.sku_name = list_prices.sku_name and
   t1.usage_start_time >= list_prices.price_start_time and
   (t1.usage_end_time <= list_prices.price_end_time or list_prices.price_end_time is null)
WHERE
   t1.sku_name LIKE '%SERVERLESS%'
   AND billing_origin_product IN ("JOBS")
   AND t1.usage_date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY
   t1.workspace_id, t1.usage_metadata.job_id,
HAVING
   list_cost > {budget}

サンプル クエリ

次のクエリを使用し、アカウントでのサーバーレスの使用状況に関する分析情報を取得します。

高コストのサーバーレス コンピューティング ノートブックを特定する

このクエリは、ノートブックの一覧と、各ノートブックが消費した DBU 数を、DBU 消費量の降順で返します。

SELECT
  usage_metadata.notebook_id,
  SUM(usage_quantity) as total_dbu
FROM
  system.billing.usage
WHERE
  usage_metadata.notebook_id is not null
  and billing_origin_product = 'INTERACTIVE'
  and product_features.is_serverless
  and usage_unit = 'DBU'
  and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
  1
ORDER BY
  total_dbu DESC

高コストのサーバーレス コンピューティング ジョブを特定する

このクエリは、ジョブの一覧と、各ジョブが消費した DBU 数を、DBU 消費量の降順で返します。

SELECT
  usage_metadata.job_id,
  SUM(usage_quantity) as total_dbu
FROM
  system.billing.usage
WHERE
  usage_metadata.job_id is not null
  and billing_origin_product = 'JOBS'
  and product_features.is_serverless
  and usage_unit = 'DBU'
  and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
  1
ORDER BY
  total_dbu DESC

特定のユーザーが消費した DBU について報告する

このクエリは、特定のユーザーまたはサービス プリンシパルによって実行されたサーバーレス コンピューティングを使用するノートブックとジョブの一覧と、各ワークロードで消費された DBU の数を返します。

SELECT
  usage_metadata.job_id,
  usage_metadata.notebook_id,
  SUM(usage_quantity) as total_dbu
FROM
  system.billing.usage
WHERE
  identity_metadata.run_as = '<emailaddress@domain.com>'
  and billing_origin_product in ('JOBS','INTERACTIVE')
  and product_features.is_serverless
  and usage_unit = 'DBU'
  and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
  1,2
ORDER BY
  total_dbu DESC

カスタム タグを共有するワークロードによって消費された、サーバーレス コンピューティング DBU について報告する

このクエリは、同じカスタム タグを共有するサーバーレス コンピューティングを使用するジョブの一覧と、各ワークロードで消費された DBU の数を返します。

SELECT
  usage_metadata.job_id,
  usage_metadata.notebook_id,
  SUM(usage_quantity) as total_dbu
FROM
  system.billing.usage
WHERE
  custom_tags.<key> = '<value>'
  and billing_origin_product in ('JOBS','INTERACTIVE')
  and product_features.is_serverless
  and usage_unit = 'DBU'
  and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
  1,2
ORDER BY
  total_dbu DESC