Surveiller le coût du compute Serverless
Cet article explique comment utiliser la table système d'utilisation facturable pour surveiller le coût de votre utilisation du compute serverless.
Vous pouvez surveiller l'utilisation du compute Serverless pour les Notebooks et les Jobs en interrogeant la table système d'utilisation facturable (system.billing.usage), qui inclut les attributs d'utilisateur et de charge de travail liés aux coûts du compute Serverless. Les champs applicables comprennent :
-
La colonne
identity_metadatainclut le champrun_as, qui affiche l'utilisateur ou le Service Principal dont les identifiants ont été utilisés pour exécuter la charge de travail. -
La colonne
usage_metadatacontient des champs qui décrivent la charge de travail :job_run_id,job_name,notebook_idetnotebook_path. -
La colonne
custom_tags, qui inclura toutes les balises héritées des politiques d'utilisation serverless. Voir Attribuer l’utilisation avec les politiques d’utilisation serverless.
En raison de notre architecture distribuée, vous pourriez voir plusieurs enregistrements associés à une charge de travail compute Serverless donnée au cours d'une période donnée. Par exemple, vous pourriez voir plusieurs enregistrements avec les mêmes job_id, job_run_id ou job_name, mais avec des valeurs de consommation de DBU différentes pour chacun. La somme de ces DBU représente la consommation horaire de DBU pour l'exécution d'un Job donné au cours de cette période.
Fonctionnalités supplémentaires facturées en tant que serverless
Il existe plusieurs fonctionnalités Databricks qui tirent parti du compute Serverless en arrière-plan, mais ne nécessitent pas que votre compte soit activé pour le compute Serverless pour les notebooks, les workflows et les LakeFlow Pipelines.
Les fonctionnalités suivantes sont facturées sous la référence SKU des jobs serverless :
-
Data quality monitoring: Enregistré dans la table de facturation avec une valeur
billing_origin_productdeLAKEHOUSE_MONITORING. -
Optimisation prédictive: journalisée dans la table de facturation avec une valeur
billing_origin_productdePREDICTIVE_OPTIMIZATION. -
Vues matérialisées dans Databricks SQL: Lorsque vous créez une vue matérialisée dans un SQL Warehouse, un pipeline Serverless est créé pour traiter les refresh. Vous pouvez afficher les enregistrements de facturation de la vue matérialisée en interrogeant les enregistrements où
billing_origin_product = 'SQL'etusage_metadata.dlt_pipeline_id IS NOT NULL. -
Contrôle d’accès précis sur un compute dédié: Identifiable par une valeur
billing_origin_productdeFINE_GRAINED_ACCESS_CONTROL. -
Lakeflow Connect: l'ingestion par connecteur géré est enregistrée avec une valeur
billing_origin_productdeLAKEFLOW_CONNECT. -
Recherche IA: Journalisé avec une valeur de
billing_origin_productdeVECTOR_SEARCH. -
Salles blanches: la salle blanche spécifique liée à l'utilisation est enregistrée sous
usage_metadata.central_clean_room_id. -
Tables en ligne (héritées) : Enregistrées avec une valeur
billing_origin_productdeONLINE_TABLES. Voir Migrer des tables en ligne héritées et tierces.
Utilisez des budgets pour surveiller les dépenses
Les administrateurs de compte peuvent configurer des budgets pour regrouper les coûts et configurer des alertes. Consultez Créer et surveiller des budgets.
Importer un tableau de bord d’utilisation
Les administrateurs de compte peuvent importer des tableaux de bord de gestion des coûts vers n'importe quel workspace compatible Unity Catalog de leur compte. Consultez Importer un tableau de bord d'utilisation.
Trouvez un Job ou un Notebook dans l'interface utilisateur
Pour trouver un job ou un notebook dans l'interface utilisateur en fonction d'un enregistrement de facturation, copiez la valeur usage_metadata.job_id ou usage_metadata.notebook_id de l'enregistrement d'utilisation. Ces IDs sont immuables et peuvent être utilisés même si le nom du job ou le chemin du notebook change.
Pour trouver un Job dans l'interface utilisateur en fonction de son job_id:
- Copiez le
job_idde l’enregistrement d’utilisation. Dans cet exemple, supposons que l'ID soit700809544510906. - Accédez à l’interface utilisateur Jobs & Pipelines dans le même Databricks Workspace que le Job.
- Sélectionnez le filtre Accessible par moi .
- Collez l'ID ( 700809544510906 ) dans la barre de recherche Filtrer les jobs .
Pour trouver un Notebook dans l'interface utilisateur en fonction de son notebook_id, utilisez les instructions suivantes :
- Copiez le
notebook_idde l’enregistrement d’utilisation. Dans cet exemple, supposons que l'ID soit700809544510906. - Accédez à l'interface utilisateur Workspaces dans le même Workspace Databricks que le Notebook.
- Cliquez sur n'importe quel Notebook de la liste.
- Après avoir ouvert le notebook, examinez l'URL dans la barre d'adresse du navigateur. Cela devrait ressembler à
https://<databricks-account-url>/?o=<workspace-ID>#notebook/<notebook ID>/command/<command ID>. - Dans la barre d'adresse du navigateur, remplacez l'ID du notebook par l'ID que vous avez copié à la première étape, puis supprimez tout ce qui suit l'ID du notebook. Cela devrait ressembler à
https://<databricks-account-url>/?o=<workspace ID>#notebook/700809544510906. - Après avoir ouvert le notebook, vous pouvez cliquer sur le bouton Share pour afficher le propriétaire du notebook.
Utilisez les alertes pour suivre les dépenses serverless
Les alertes sont un moyen puissant de rester informé de vos dépenses Serverless. Avec les alertes, vous pouvez recevoir des notifications lorsque certaines conditions sont remplies dans les résultats de votre query. Pour savoir comment créer des alertes, consultez Créer une alerte.
Vous pouvez ajouter des alertes aux queries suivantes pour surveiller les budgets. Dans chaque query, remplacez {budget} par le budget de votre choix.
Alerte lorsque les dépenses d'un workspace dépassent un threshold au cours des 30 derniers jours.
Vous pouvez configurer une alerte pour qu'elle se Trigger chaque fois que cette query renvoie une ligne. Remplacez {budget} par votre budget choisi.
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}
Alerte lorsqu'un utilisateur dépasse le threshold au cours des 30 derniers jours
Vous pouvez configurer une alerte pour qu'elle se Trigger chaque fois que cette query renvoie une ligne. Remplacez {budget} par votre budget choisi.
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}
Alerter lorsqu'un Job dépasse le threshold au cours des 30 derniers jours
Vous pouvez configurer une alerte pour qu'elle se Trigger chaque fois que cette query renvoie une ligne. Remplacez {budget} par votre budget choisi.
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}
Exemples de query
Utilisez les queries suivantes pour obtenir des insights sur l'utilisation serverless de votre compte :
- Trier les Notebook Serverless en fonction des dépenses totales
- Trier les Jobs Serverless en fonction des dépenses totales
- Rapport sur les DBU consommées par un utilisateur donné
- Rendre compte des DBU de compute serverless consommées par les charges de travail qui partagent un tag personnalisé.
- Rapport sur les DBU consommés par le mode de performance
Trier les notebooks Serverless en fonction des dépenses totales
Cette query renvoie la liste des Notebooks et le nombre de DBU consommées par chaque Notebook, par ordre décroissant de consommation de 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
Trier les jobs serverless en fonction des dépenses totales
Cette query renvoie une liste de jobs et le nombre de DBU consommés par chaque job, par ordre décroissant de consommation de 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
Rapport sur les DBU consommées par un utilisateur particulier
Cette query renvoie une liste de Notebooks et de Jobs qui utilisent le compute serverless exécutés par un utilisateur ou un service principal donné, et le nombre de DBU consommés par chaque charge de travail :
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
Rapport sur les DBU de compute serverless consommées par les charges de travail qui partagent une balise personnalisée
Cette query renvoie une liste des Jobs qui utilisent un compute Serverless et partagent le même tag personnalisé, ainsi que le nombre de DBU consommées par chaque charge de travail :
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
Rapport sur les DBU consommées par le mode de performance
Cette query résume la consommation de DBU serverless par mode de performance (PERFORMANCE_OPTIMIZED ou STANDARD) et par type de workload (Jobs ou pipelines) au cours des 30 derniers jours :
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