分享方式:


監視無伺服器計算的成本

本文說明如何使用計費使用量系統資料表 (Public Preview) 來監視無伺服器計算使用量的成本。

您可以查詢計費使用量系統資料表,system.billing.usage其中包含與無伺服器計算成本相關的使用者和工作負載屬性,以監視筆記本和作業的無伺服器計算使用量。 適用的欄位包括:

  • identity_metadata 資料行包含 run_as 欄位,其中顯示用來執行工作負載之認證的使用者或服務主體。
  • usage_metadata 資料行具有描述工作負載的欄位:job_run_idjob_namenotebook_id notebook_path

無伺服器使用量記錄的考慮

分析無伺服器使用量時,請考慮下列事項:

  • 您可能會在指定小時內看到與指定無伺服器計算工作負載相關聯的多個記錄。 例如,您可能會看到多個 job_id具有相同、 job_run_id或 job_name 的記錄,但每個記錄都有不同的 DBU 耗用量值。 這些 DBU 的總和共同代表指定作業執行的每小時 DBU 耗用量。

注意

如需 Null 工作負載屬性的更新,請參閱 即將推出的內容?

使用預算來監視支出

帳戶管理員可以設定預算,以將成本分組並設定警示。 請參閱使用預算來監視帳戶支出

匯入使用方式儀表板

帳戶管理員可以將成本管理儀表板匯入其帳戶中任何已啟用 Unity 目錄的工作區。 請參閱 匯入使用量儀表板

在UI中尋找作業或筆記本

若要根據帳單記錄在UI中尋找作業或筆記本,請從使用量記錄複製 usage_metadata.job_idusage_metadata.notebook_id 值。 這些標識碼是不可變的,即使作業名稱或筆記本路徑變更,也可以使用。

若要根據其 job_id在UI中尋找作業:

  1. job_id從使用量記錄複製 。 在這裡範例中,假設識別碼為 700809544510906
  2. 流覽至 與作業相同的 Azure Databricks 工作區中的工作流程 UI。
  3. 請確定未核取我所擁有的唯一作業篩選條件。
  4. 將標識碼 (700809544510906) 貼到篩選工作搜尋列中。

若要根據UI notebook_id尋找筆記本,請使用下列指示:

  1. notebook_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 之後刪除所有專案。 該名稱應會顯示為 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