Мониторинг стоимости бессерверных вычислений

В этой статье объясняется, как использовать таблицу системы использования с выставлением счетов для отслеживания затрат на использование бессерверных вычислений.

Вы можете отслеживать использование бессерверных вычислений для записных книжек и заданий, запрашивая оплачиваемую системную таблицу использования (system.billing.usage), которая включает атрибуты пользователей и рабочей нагрузки, связанные с бессерверными затратами на вычисления. К применимым полям относятся следующие:

  • Столбец identity_metadata содержит поле run_as, в котором показан пользователь или сервисный принципал, чьи учетные данные использовались для выполнения рабочей нагрузки.
  • Столбец usage_metadata содержит поля, описывающие рабочую нагрузку: job_run_id, , job_namenotebook_idи notebook_path.

Замечание

Из-за нашей распределенной архитектуры может появиться несколько записей, связанных с данной бессерверной вычислительной рабочей нагрузкой в заданном временном интервале. Например, можно увидеть несколько записей с одинаковыми job_id, job_run_id или job_name но с различными значениями потребления DBU для каждого. Сумма этих DBU представляет собой почасовое потребление DBU для запуска задания в указанном временном интервале.

Дополнительные функции, выставленные как бессерверные

Существует несколько функций Azure Databricks, использующих бессерверные вычисления в фоновом режиме, но не требуют включения учетной записи для бессерверных вычислений для записных книжек, рабочих процессов и конвейеров Lakeflow.

В SKU бессерверных заданий учитываются следующие возможности:

  • Чистые комнаты: конкретная чистая комната, связанная с использованием, регистрируется в usage_metadata.central_clean_room_id.
  • Сетевые таблицы (прежние версии): зарегистрировано со значением billing_origin_productONLINE_TABLES.

Использование бюджетов для мониторинга расходов

Администраторы учетных записей могут настроить бюджеты для группирования затрат и настройки оповещений. См. статью "Создание и мониторинг бюджетов".

Импорт панели мониторинга использования

Администраторы учетных записей могут импортировать панели мониторинга управления затратами в любую рабочую область с поддержкой каталога Unity в своей учетной записи. См. статью "Импорт панели мониторинга использования".

Поиск задания или записной книжки в пользовательском интерфейсе

Чтобы найти задачу или записную книжку в пользовательском интерфейсе на основе записи учета биллинга, скопируйте значение usage_metadata.job_id или usage_metadata.notebook_id из записи использования. Эти идентификаторы неизменяемы и могут использоваться, даже если имя задания или путь к записной книжке изменяется.

Для поиска работы в пользовательском интерфейсе с учетом его job_id:

  1. Скопируйте job_id из записи об использовании. В этом примере предположим, что идентификатор имеет значение 700809544510906.
  2. Перейдите в интерфейс Задания и конвейеры в той же рабочей области Azure Databricks, что и задание.
  3. Выберите фильтр Доступен для меня.
  4. Вставьте идентификатор (700809544510906) в строку поиска заданий фильтра .

Чтобы найти записную книжку в пользовательском интерфейсе на основании notebook_id, следуйте следующим инструкциям:

  1. Скопируйте notebook_id из записи об использовании. В этом примере предположим, что идентификатор имеет значение 700809544510906.
  2. Перейдите к пользовательскому интерфейсу Workspaces в той же рабочей области Azure Databricks, что и записная книжка.
  3. Щелкните любую записную книжку в списке.
  4. После открытия записной книжки просмотрите URL-адрес в адресной строке браузера. Оно должно выглядеть так: https://<databricks-account-url>/?o=<workspace-ID>#notebook/<notebook ID>/command/<command ID>.
  5. В адресной строке браузера замените идентификатор записной книжки идентификатором, скопированным на первом шаге, а затем удалите все после идентификатора записной книжки. Оно должно выглядеть так: https://<databricks-account-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,
  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

Сортировка бессерверных заданий на основе общих расходов

Этот запрос возвращает список заданий и количество DBU, потребляемых каждым заданием, в порядке убывания по потреблению DBU.

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, потребляемых каждой рабочей нагрузкой.

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

Отчет о потребленных бессерверных вычислительных единицах (DBUs) для рабочих нагрузок, которые имеют общий пользовательский тег.

Этот запрос возвращает список заданий, использующих бессерверные вычисления, которые используют один и тот же пользовательский тег, и количество баз данных, потребляемых каждой рабочей нагрузкой:

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

Отчет о DBU, потреблённых в режиме производительности

Этот запрос суммирует использование бессерверных DBU по режиму производительности (PERFORMANCE_OPTIMIZED или STANDARD) и типу рабочей нагрузки (заданиям или конвейерам) за последние 30 дней:

SELECT
  product_features.performance_target,
  billing_origin_product,
  SUM(usage_quantity) as total_dbu
FROM
  system.billing.usage
WHERE
  product_features.is_serverless
  and billing_origin_product in ('JOBS','DLT')
  and usage_unit = 'DBU'
  and usage_date >= DATEADD(day, -30, current_date)
GROUP BY
  1,2
ORDER BY
  total_dbu DESC