다음을 통해 공유


서버리스 컴퓨팅 비용 모니터링

이 문서에서는 청구 가능한 사용량 시스템 테이블(공개 미리 보기)을 사용하여 서버리스 컴퓨팅 사용량을 모니터링하는 방법을 설명합니다.

서버리스 컴퓨팅 비용과 관련된 사용자 및 워크로드 특성이 포함된 청구 가능한 사용량 시스템 테이블(system.billing.usage)을 쿼리하여 Notebook 및 작업에 대한 서버리스 컴퓨팅 사용량을 모니터링할 수 있습니다. 해당하는 필드는 다음과 같습니다.

  • identity_metadata 열에는 워크로드를 실행하는 데 자격 증명을 사용한 사용자 또는 서비스 주체를 표시하는 run_as 필드가 포함됩니다.
  • usage_metadata 열에는 워크로드 job_run_id, job_name, notebook_id notebook_path을(를) 설명하는 필드가 포함되어 있습니다.

서버리스 사용량 레코드에 대한 고려 사항

서버리스 사용량을 분석할 때는 다음을 고려합니다.

  • 특정 시간에 지정된 서버리스 컴퓨팅 워크로드와 관련된 여러 레코드가 표시될 수 있습니다. 예를 들어 job_id, job_run_id 또는 job_name'이 동일하지만 각각 다른 DBU 사용량 값을 가진 여러 레코드가 표시될 수 있습니다. DBU의 합계는 특정 작업 실행에 대한 시간당 총 DBU 사용량을 나타냅니다.

참고 항목

null 워크로드 특성에 대한 업데이트는 향후 제공될 기능을 참조하세요.

예산을 사용하여 지출 모니터링

계정 관리자는 예산을 설정하여 비용을 그룹화하고 경고를 설정할 수 있습니다. 예산을 사용하여 계정 지출 모니터링을 참조하세요.

사용량 대시보드 가져오기

계정 관리자는 비용 관리 대시보드를 계정의 Unity 카탈로그 사용 작업 영역으로 가져올 수 있습니다. 사용량 대시보드 가져오기를 참조하세요.

UI에서 작업 또는 Notebook 찾기

청구 레코드를 기반으로 UI에서 작업 또는 Notebook을 찾으려면 사용량 레코드에서 usage_metadata.job_id 값 또는 usage_metadata.notebook_id 값을 복사합니다. 해당 ID는 변경할 수 없으며 작업 이름 또는 Notebook 경로가 변경되더라도 사용할 수 있습니다.

job_id을(를) 기반으로 UI에서 작업을 찾으려면 다음을 수행합니다.

  1. 사용량 레코드에서 job_id을(를) 복사합니다. 이 예제에서는 ID를 700809544510906(으)로 가정합니다.
  2. 작업과 동일한 Azure Databricks 작업 영역에서 워크플로 UI로 이동합니다.
  3. 내가 소유한 작업만 필터가 선택 해제되었는지 확인합니다.
  4. ID(700809544510906)를 필터 작업 검색 창에 붙여넣습니다.

notebook_id을(를) 기반으로 UI에서 Notebook을 찾으려면 다음 지침을 따릅니다.

  1. 사용량 레코드에서 notebook_id을(를) 복사합니다. 이 예제에서는 ID를 700809544510906(으)로 가정합니다.
  2. Notebook과 동일한 Azure Databricks 작업 영역에서 작업 영역 UI로 이동합니다.
  3. 목록에서 Notebook을 클릭합니다.
  4. Notebook을 연 후 브라우저 주소 표시줄에서 URL을 검사합니다. https://<account-console-url>/?o=<workspace ID>#notebook/<notebook ID>/command/<command ID> 형식입니다.
  5. 브라우저 주소 표시줄에서 Notebook ID를 첫 번째 단계에서 복사한 ID로 바꾼 다음, Notebook ID 다음에 오는 모든 항목을 삭제합니다. https://<account-console-url>/?o=<workspace ID>#notebook/700809544510906 형식입니다.
  6. Notebook을 연 후 공유 버튼을 클릭하면 Notebook 소유자를 확인할 수 있습니다.

경고를 사용하여 서버리스 지출 추적

경고는 서버리스 지출에 대한 정보를 파악할 수 있는 강력한 방법입니다. 경고를 사용하면 쿼리 결과에서 특정 조건이 충족될 경우 알림을 받을 수 있습니다. 경고를 만드는 방법을 알아보려면 경고 만들기를 참조하세요.

다음 쿼리에 경고를 추가하여 예산을 모니터링할 수 있습니다. 각 쿼리에서 {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}

샘플 쿼리

다음 쿼리를 사용하여 계정의 서버리스 사용량에 대한 인사이트를 얻습니다.

비용이 많이 드는 서버리스 컴퓨팅 Notebook 식별

이 쿼리는 Notebook 목록과 각 Notebook에서 사용한 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

특정 사용자가 사용한 DPU에 대한 보고서

이 쿼리는 특정 사용자 또는 서비스 주체가 실행하는 서버리스 컴퓨팅을 사용한 Notebook 및 작업 목록과 각 워크로드에서 사용한 DPU를 반환합니다.

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

맞춤 태그를 공유하는 워크로드에서 사용한 서버리스 컴퓨팅 DPU에 대한 보고서

이 쿼리는 동일한 맞춤 태그를 공유하는 서버리스 컴퓨팅을 사용한 작업 목록과 각 워크로드에서 사용한 DPU를 반환합니다.

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