メインコンテンツまでスキップ

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

この記事では、課金利用 システムテーブルを使用して、サーバレス コンピュートの利用コストを監視する方法について説明します。

ノートブックおよびジョブのサーバレス コンピュートの使用状況を監視するには、system.billing.usageをクエリします。これには、サーバレス コンピュートのコストに関連するユーザ属性とワークロード属性が含まれます。 適用可能なフィールドは次のとおりです。

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

  • usage_metadata列には、ワークロードを説明するフィールド ( job_run_idjob_namenotebook_idnotebook_path) があります。

  • custom_tags列には、予算ポリシーから継承されたタグが含まれます。Attribute サーバレス usage with budget ポリシーを参照してください。

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

サーバレスの利用状況を分析する際には、以下の点を考慮してください。

  • 特定の時間に、特定のサーバレス コンピュート ワークロードに関連付けられた複数のレコードが表示される場合があります。 たとえば、同じ job_idjob_run_id、または job_name の複数のレコードが表示され、それぞれに異なる DBU 消費量の値がある場合があります。 これらの DBU の合計は、特定のジョブ実行の時間単位の DBU 消費量をまとめて表します。
注記

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

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

アカウント管理者は、コストをグループ化し、アラートを設定するための予算を設定できます。 「予算の作成と監視」を参照してください

使用状況ダッシュボードのインポート

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

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

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

job_idに基づいてUIでジョブを検索するには:

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

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

  1. 使用状況レコードから notebook_id をコピーします。 この例では、ID が 700809544510906であると仮定します。
  2. ノートブックと同じ 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}を選択した予算に置き換えてください。

SQL
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}を選択した予算に置き換えてください。

SQL
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}を選択した予算に置き換えてください。

SQL
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}

サンプル クエリ

次のクエリを使用して、アカウントでのサーバレスの使用状況についての知見を取得できます。

Identify expensive サーバレス コンピュート ノートブック

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

SQL
SELECT
usage_metadata.notebook_id,
usage_metadata. notebook_path,
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,2
ORDER BY
total_dbu DESC

Identify expensive サーバレス コンピュート ジョブ

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

SQL
SELECT
usage_metadata.job_id,
usage_metadata.job_name,
SUM(usage_quantity) as total_dbu
FROM
system.billing.usage
WHERE
usage_metadata.job_id is not null
and usage_unit = 'DBU'
and usage_date >= DATEADD(day, -30, current_date)
and sku_name like '%JOBS_SERVERLESS_COMPUTE%'
GROUP BY
1,2
ORDER BY
total_dbu DESC

特定のユーザーが消費したDBUに関するレポート

このクエリは、特定のユーザーまたはサービスプリンシパルが実行するサーバレス計算を使用するノートブックとジョブのリスト、および各ワークロードが消費するDBUの数を返します:

SQL
SELECT
usage_metadata.job_id,
usage_metadata.job_name,
usage_metadata.notebook_id,
usage_metadata. notebook_path,
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,3,4
ORDER BY
total_dbu DESC

カスタムタグを共有するワークロードによって消費されたサーバレス コンピュート DBU に関するレポート

このクエリは、同じカスタムタグを共有するサーバーレスコンピュートを使用するジョブのリストと、各ワークロードによって消費されたDBUの数を返します:

SQL
SELECT
usage_metadata.job_id,
usage_metadata.job_name,
usage_metadata.notebook_id,
usage_metadata. notebook_path,
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,3,4
ORDER BY
total_dbu DESC