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

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

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

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

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

サーバーレス使用記録に関する考慮事項

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

  • 特定の時間に、特定のサーバレス コンピュート ワークロードに関連付けられた複数のレコードが表示される場合があります。 たとえば、同じjob_idjob_run_id、またはジョブの複数のレコードがあり、それぞれに異なる 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}選択した予算に置き換えてください。

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 に関するレポート

このクエリは、特定のユーザーまたはサービスプリンシパルによって serverless コンピュート 実行 を使用するワークロードとジョブのリストと、各ワークロードで消費された 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