Ce document explique comment surveiller la consommation de jetons pour les analyses d'insights sur les données de Knowledge Catalog (anciennement Dataplex Universal Catalog) à l'aide de Cloud Logging et de Cloud Monitoring. Le suivi de l'utilisation des jetons par analyse et par job vous permet de comprendre les tendances d'utilisation des modèles et d'estimer les coûts de facturation de votre projet.
Fonctionnement de la journalisation de l'utilisation des jetons
Lorsqu'un job d'analyse d'insights sur les données (jsonPayload.type="DATA_DOCUMENTATION") se termine avec l'état SUCCEEDED, Knowledge Catalog écrit une entrée de journal dans le journal dataplex.googleapis.com/data_scan. Cette entrée de journal contient un bloc billableTokenUsage sous jsonPayload.dataDocumentation qui enregistre la répartition des jetons pour le job. Les autres entrées de journal du job (telles que les événements CREATED, STARTED, FAILED ou CANCELLED) n'incluent pas de bloc billableTokenUsage.
Dans le bloc billableTokenUsage, vous pouvez suivre trois catégories de jetons principales pour estimer la facturation :
| Métrique | Description | Formule (à l'aide des champs billableTokenUsage) |
|---|---|---|
| Jetons d'entrée non mis en cache | Jetons d'entrée qui n'ont pas été diffusés à partir du cache de contexte, y compris les jetons de prompt d'utilisation d'outils. | max(promptTokenCount - cachedContentTokenCount, 0) + toolUsePromptTokenCount |
| Jetons d'entrée mis en cache | Jetons d'entrée diffusés à partir du cache de contexte. Les jetons mis en cache sont suivis séparément, car ils ne sont pas facturés au tarif d'entrée standard sans mise en cache. | cachedContentTokenCount |
| Jetons de sortie | Jetons de réponse générés plus jetons de raisonnement (réflexion). Les jetons de raisonnement sont facturés en tant que jetons de sortie. | candidatesTokenCount + thoughtsTokenCount |
Pour en savoir plus sur les tarifs des jetons, consultez Tarifs de l'agent Data Cloud.
Champs de jeton dans l'entrée de journal
Chaque entrée de journal dataplex.googleapis.com/data_scan inclut des identifiants de ressource et de job standards, tels que resource.labels.datascan_id, resource.labels.location, jsonPayload.jobId et jsonPayload.state. Pour les analyses d'insights sur les données réussies, l'objet jsonPayload.dataDocumentation.billableTokenUsage contient les champs suivants :
| Champ | Description |
|---|---|
promptTokenCount |
Nombre total de jetons de prompt envoyés au modèle, y compris les jetons mis en cache. |
cachedContentTokenCount |
Partie des jetons de prompt diffusés à partir du cache de contexte. |
toolUsePromptTokenCount |
Jetons de requête ajoutés par les appels d'outils (comme le schéma, le profil ou le contexte de l'historique des requêtes). |
candidatesTokenCount |
Jetons de réponse générés, à l'exclusion des jetons de raisonnement. |
thoughtsTokenCount |
Jetons de raisonnement générés par le modèle. |
L'exemple suivant montre une entrée de journal dataplex.googleapis.com/data_scan pour un job d'analyse d'insights sur les données réussi :
{
"resource": {
"type": "dataplex.googleapis.com/DataScan",
"labels": {
"datascan_id": "my-insights-scan",
"location": "us-central1",
"resource_container": "projects/1234567890"
}
},
"jsonPayload": {
"type": "DATA_DOCUMENTATION",
"jobId": "8f2b3c4d-1234-5678-9abc-def012345678",
"state": "SUCCEEDED",
"dataDocumentation": {
"billableTokenUsage": {
"promptTokenCount": "20412",
"candidatesTokenCount": "7053"
}
}
}
}
Dans cet exemple, le job n'a pas utilisé la mise en cache de contexte, les jetons de raisonnement ni les appels d'outils. Par conséquent, les jetons d'entrée non mis en cache sont égaux à 20,412, les jetons d'entrée mis en cache sont égaux à 0 et les jetons de sortie sont égaux à 7,053.
Avant de commencer
Avant d'interroger les journaux de jetons d'insights sur les données ou de créer un tableau de bord de surveillance, remplissez les conditions préalables suivantes.
Rôles requis
Pour obtenir les autorisations nécessaires pour surveiller l'utilisation des jetons d'insights sur les données, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
-
Afficher les journaux d'analyse des données et exécuter des requêtes d'analyse de l'observabilité : Visionneuse de journaux (
roles/logging.viewer) -
Créer des tableaux de bord personnalisés dans Monitoring : Éditeur Monitoring (
roles/monitoring.editor) -
Afficher les tableaux de bord personnalisés dans Monitoring : Lecteur Monitoring (
roles/monitoring.viewer)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Activer les API
Activez les API Dataplex, Logging et Monitoring si elles ne le sont pas déjà.
Rôles requis pour activer les API
Pour activer des API, vous devez disposer de l'autorisation serviceusage.services.enable. Si vous avez créé le projet, vous disposez probablement déjà de cette autorisation via le rôle Propriétaire (roles/owner). Sinon, vous pouvez l'obtenir via le rôle Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin). Découvrez comment attribuer des rôles.
Vérifier la configuration du routage des journaux
Les analyses d'insights sur les données écrivent des journaux sous le nom de journal dataplex.googleapis.com/data_scan. Les configurations de tableau de bord de ce document lisent ces journaux à partir du bucket de journaux _Default de votre projet. Vérifiez que le routage des journaux de votre projet remplit les conditions suivantes :
- Le récepteur
_Defaultest activé et achemine les journaux vers le bucket de journaux_Default. Le récepteur
_Defaultne comporte aucun filtre "Exclure" qui supprime les journauxdataplex.googleapis.com/data_scanouDATA_DOCUMENTATION.
Console
Dans la console Google Cloud , accédez à la page Logging > Routeur de journaux.
Recherchez le récepteur
_Defaultet vérifiez que son état est Activé et que sa destination est le bucket_Default.Cliquez sur le menu du récepteur (), puis sélectionnez Afficher les détails du récepteur. Vérifiez qu'aucun filtre "Exclure" ne correspond à
dataplex.googleapis.com/data_scanouDATA_DOCUMENTATION.
gcloud
Décrivez le récepteur _Default pour inspecter son état, sa destination et ses filtres d'exclusion :
gcloud logging sinks describe _Default --project=PROJECT_ID
Remplacez PROJECT_ID par l'ID du projet Google Cloud.
Vérifiez que disabled n'est pas défini sur true, que destination se termine par /buckets/_Default et qu'aucune entrée sous exclusions ne correspond à data_scan.
Activer l'analyse de l'observabilité sur le bucket _Default
Pour exécuter des requêtes SQL sur les journaux d'analyse des insights sur les données et alimenter le tableau de bord personnalisé d'Analyse de l'observabilité, mettez à niveau le bucket de journaux _Default de votre projet pour utiliser Analyse de l'observabilité.
Avant d'activer l'Analyse de l'observabilité sur le bucket de journaux _Default, tenez compte des points suivants :
- La mise à niveau d'un bucket vers Analyse de l'observabilité est irréversible et n'entraîne aucuns frais supplémentaires.
- Vous n'avez pas besoin de créer un ensemble de données BigQuery associé.
Les requêtes SQL d'Analyse de l'observabilité ne renvoient que les journaux qui arrivent après la mise à niveau. Les journaux plus anciens restent disponibles dans l'explorateur de journaux, mais n'apparaissent pas dans les résultats des requêtes SQL. Après avoir mis à niveau le bucket, exécutez au moins une analyse des insights sur les données afin que votre tableau de bord dispose de données à afficher.
Console
Dans la console Google Cloud , accédez à la page Logging > Stockage des journaux.
Recherchez la ligne du bucket
_Defaultet vérifiez la colonne Analyse de l'observabilité disponible :- Si la colonne affiche Ouvrir, l'analyse de l'observabilité est déjà activée.
- Si la colonne indique Mettre à niveau, cliquez sur Mettre à niveau et confirmez la mise à niveau.
Attendez quelques minutes que l'état de la colonne passe à Ouvert.
gcloud
Mettez à niveau le bucket de journaux
_Defaultpour activer l'analyse de l'observabilité :gcloud logging buckets update _Default \ --location=global --enable-analytics --project=PROJECT_IDRemplacez PROJECT_ID par l'ID du projet Google Cloud .
Après quelques minutes, vérifiez que la mise à niveau est terminée :
gcloud logging buckets describe _Default \ --location=global --project=PROJECT_IDVérifiez que la sortie inclut
analyticsEnabled: true.
Afficher l'utilisation des jetons par job dans l'explorateur de journaux
Pour inspecter la consommation de jetons des jobs d'analyse d'insights sur les données individuels, utilisez l'explorateur de journaux ou la Google Cloud CLI. Pour les agrégations horaires ou quotidiennes dans votre projet, vous pouvez créer un tableau de bord à l'aide de l'analyse de l'observabilité.
Console
Dans la console Google Cloud , accédez à la page Logging > Explorateur de journaux.
Si l'éditeur de requête n'est pas visible, activez l'option Afficher la requête.
Saisissez la requête suivante dans l'éditeur de requête :
log_id("dataplex.googleapis.com/data_scan") jsonPayload.type="DATA_DOCUMENTATION" jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:*Facultatif : Pour filtrer une analyse ou une exécution de job spécifique, ajoutez l'une des lignes suivantes à la requête :
resource.labels.datascan_id="DATA_SCAN_ID" jsonPayload.jobId="JOB_ID"Remplacez les éléments suivants :
- DATA_SCAN_ID : ID de l'analyse des insights sur les données.
- JOB_ID : ID d'une exécution de job d'analyse spécifique.
Sélectionnez une période (par exemple, Dernières 24 heures), puis cliquez sur Exécuter la requête.
Développez une entrée de journal et ouvrez
jsonPayload>dataDocumentation>billableTokenUsagepour inspecter le nombre de jetons pour ce job.
gcloud
Lisez les entrées de journal d'analyse des insights sur les données récentes et mettez en forme les champs de jeton sous forme de tableau :
gcloud logging read \
'log_id("dataplex.googleapis.com/data_scan") AND jsonPayload.type="DATA_DOCUMENTATION" AND jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:*' \
--project=PROJECT_ID --freshness=1d --limit=20 \
--format='table(timestamp, resource.labels.datascan_id:label=SCAN,
jsonPayload.jobId:label=JOB,
jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:label=PROMPT,
jsonPayload.dataDocumentation.billableTokenUsage.cachedContentTokenCount:label=CACHED,
jsonPayload.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount:label=TOOL_USE,
jsonPayload.dataDocumentation.billableTokenUsage.candidatesTokenCount:label=CANDIDATES,
jsonPayload.dataDocumentation.billableTokenUsage.thoughtsTokenCount:label=THOUGHTS)'
Remplacez PROJECT_ID par l'ID du projet Google Cloud.
Une colonne vide dans la table de sortie indique des jetons 0 pour ce champ.
Pour transformer ces champs en métriques, utilisez les formules de la section Fonctionnement de la journalisation de l'utilisation des jetons.
Interroger l'utilisation des jetons à l'aide de l'Analyse de l'observabilité
Vous pouvez également exécuter ou personnaliser les requêtes SQL du widget directement sur la page "Analyse de journaux" de la consoleGoogle Cloud .
Les graphiques quotidiens et horaires partagent la même requête de graphique, qui renvoie une ligne par job d'analyse. Chaque widget de graphique regroupe et additionne les lignes par jour (timeBinSize: 86400s) ou par heure (timeBinSize: 3600s). Si vous modifiez une requête de graphique et la collez dans un widget de tableau de bord, conservez les alias de colonne timestamp, total_non_cached_input_tokens, total_cached_input_tokens et total_output_tokens.
Pour filtrer une requête sur une seule analyse, ajoutez la condition suivante à la clause WHERE :
AND JSON_VALUE(resource.labels, '$.datascan_id') = 'DATA_SCAN_ID'
Remplacez DATA_SCAN_ID par l'ID de votre analyse d'insights sur les données.
Exemple de requête de graphique (graphiques quotidiens et horaires)
SELECT
timestamp,
GREATEST(
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)
- IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),
0)
+ IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)
AS total_non_cached_input_tokens,
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)
AS total_cached_input_tokens,
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)
+ IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)
AS total_output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE
log_id = 'dataplex.googleapis.com/data_scan'
AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'
AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL
Remplacez PROJECT_ID par l'ID du projet Google Cloud.
Exemple de requête par job d'analyse
SELECT
timestamp,
JSON_VALUE(resource.labels, '$.datascan_id') AS data_scan_id,
JSON_VALUE(resource.labels, '$.location') AS location,
JSON_VALUE(json_payload, '$.jobId') AS job_id,
JSON_VALUE(json_payload, '$.state') AS state,
GREATEST(
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)
- IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),
0)
+ IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)
AS non_cached_input_tokens,
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)
AS cached_input_tokens,
IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)
+ IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)
AS output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE
log_id = 'dataplex.googleapis.com/data_scan'
AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'
AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL
ORDER BY timestamp DESC
LIMIT 500
Remplacez PROJECT_ID par l'ID du projet Google Cloud.
Créer un tableau de bord à l'aide de l'Analyse de l'observabilité
Pour visualiser et suivre la consommation de jetons du modèle au fil du temps, vous pouvez créer un tableau de bord Monitoring personnalisé à l'aide de l'analyse de l'observabilité.
Cette approche exécute des requêtes SQL directement sur les journaux d'analyse des insights sur les données dans le bucket de journaux _Default. Il présente plusieurs avantages :
- Précision : les requêtes calculent le nombre exact de jetons directement à partir des charges utiles JSON des entrées de journal, plutôt que d'utiliser des estimations de métriques agrégées.
- Historique des jobs précis : en plus des graphiques agrégés, vous pouvez inspecter des jobs d'analyse individuels dans une vue tabulaire.
- Aucuns frais supplémentaires : la mise à niveau du bucket de journaux
_Defaultvers Analyse de l'observabilité n'entraîne aucuns frais supplémentaires.
Cette option crée un tableau de bord Monitoring avec trois widgets qui exécutent des requêtes SQL sur vos journaux :
- Utilisation quotidienne de jetons (graphique à barres empilées)
- Utilisation horaire des jetons (graphique en courbes)
- Utilisation des jetons par job d'analyse (tableau affichant les 500 derniers jobs)
La configuration JSON du tableau de bord suivante utilise la variable @__project_id intégrée (@__project_id.global._Default._Default), qui interroge automatiquement le projet dans lequel vous ouvrez le tableau de bord. Vous n'avez pas besoin de modifier les espaces réservés du projet dans le fichier JSON avant de l'importer.
Console
Dans la console Google Cloud , accédez à la page Monitoring > Tableaux de bord.
Cliquez sur Créer un tableau de bord.
Dans la barre d'outils, cliquez sur Paramètres, sélectionnez JSON, puis Éditeur JSON.
Remplacez le contenu existant de l'éditeur par la définition JSON du tableau de bord fournie dans la section suivante.
Cliquez sur Appliquer les modifications. Lorsque l'enregistrement automatique est activé, Monitoring enregistre le tableau de bord sous le nom
Data Insights - Token Usage.La première fois que vous ouvrez le tableau de bord, chaque widget vous invite à confirmer l'exécution de la requête SQL sur le moteur BigQuery de votre projet. Vérifiez que l'invite liste votre projet, puis cliquez sur Continuer l'exécution sur chaque widget.
Sélectionnez une période dans la barre d'outils du tableau de bord (par exemple, 7 derniers jours).
gcloud
- Enregistrez la définition JSON du tableau de bord dans un fichier local nommé
dashboard.json. Créez le tableau de bord dans Monitoring :
gcloud monitoring dashboards create \ --project=PROJECT_ID \ --config-from-file=dashboard.jsonRemplacez PROJECT_ID par l'ID de votre projetGoogle Cloud .
Ouvrez la page Tableaux de bord dans la console Google Cloud , sélectionnez Analyse Insights - Utilisation des jetons, puis cliquez sur Continuer l'exécution sur chaque widget pour autoriser l'exécution de la requête SQL.
Définition JSON du tableau de bord
Pour créer le tableau de bord, développez la section suivante et copiez la définition JSON :
Définition JSON
{
"displayName": "Data Insights - Token Usage",
"mosaicLayout": {
"columns": 48,
"tiles": [
{
"xPos": 0,
"yPos": 0,
"width": 24,
"height": 16,
"widget": {
"title": "Daily token usage",
"xyChart": {
"chartOptions": {
"mode": "COLOR",
"displayHorizontal": false
},
"dataSets": [
{
"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"breakdowns": [],
"dimensions": [
{
"column": "timestamp",
"columnType": "TIMESTAMP",
"sortColumn": "timestamp",
"sortOrder": "SORT_ORDER_ASCENDING",
"timeBinSize": "86400s"
}
],
"measures": [
{
"column": "total_non_cached_input_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
},
{
"column": "total_cached_input_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
},
{
"column": "total_output_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
}
],
"timeSeriesQuery": {
"opsAnalyticsQuery": {
"sql": "SELECT\n timestamp,\n GREATEST(\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n AS total_non_cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n AS total_cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n AS total_output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n log_id = 'dataplex.googleapis.com/data_scan'\n AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL"
}
}
}
],
"yAxis": {
"label": "tokens",
"scale": "LINEAR"
}
}
}
},
{
"xPos": 24,
"yPos": 0,
"width": 24,
"height": 16,
"widget": {
"title": "Hourly token usage",
"xyChart": {
"chartOptions": {
"mode": "COLOR",
"displayHorizontal": false
},
"dataSets": [
{
"plotType": "LINE",
"targetAxis": "Y1",
"breakdowns": [],
"dimensions": [
{
"column": "timestamp",
"columnType": "TIMESTAMP",
"sortColumn": "timestamp",
"sortOrder": "SORT_ORDER_ASCENDING",
"timeBinSize": "3600s"
}
],
"measures": [
{
"column": "total_non_cached_input_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
},
{
"column": "total_cached_input_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
},
{
"column": "total_output_tokens",
"aggregationFunction": {
"type": "sum",
"parameters": []
}
}
],
"timeSeriesQuery": {
"opsAnalyticsQuery": {
"sql": "SELECT\n timestamp,\n GREATEST(\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n AS total_non_cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n AS total_cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n AS total_output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n log_id = 'dataplex.googleapis.com/data_scan'\n AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL"
}
}
}
],
"yAxis": {
"label": "tokens",
"scale": "LINEAR"
}
}
}
},
{
"xPos": 0,
"yPos": 16,
"width": 48,
"height": 20,
"widget": {
"title": "Token usage per scan job (latest 500)",
"timeSeriesTable": {
"columnSettings": [],
"dataSets": [
{
"tableTemplate": "",
"timeSeriesQuery": {
"opsAnalyticsQuery": {
"sql": "SELECT\n timestamp,\n JSON_VALUE(resource.labels, '$.datascan_id') AS data_scan_id,\n JSON_VALUE(resource.labels, '$.location') AS location,\n JSON_VALUE(json_payload, '$.jobId') AS job_id,\n JSON_VALUE(json_payload, '$.state') AS state,\n GREATEST(\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n AS non_cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n AS cached_input_tokens,\n IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n AS output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n log_id = 'dataplex.googleapis.com/data_scan'\n AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL\nORDER BY timestamp DESC\nLIMIT 500"
}
}
}
],
"metricVisualization": "NUMBER"
}
}
}
]
}
}
Limites
- Les métriques de jetons ne sont complètes que si les journaux
dataplex.googleapis.com/data_scanne sont pas exclus ou redirigés du bucket de journaux_Default. - Seuls les jobs réussis avec des métadonnées de jeton sont comptabilisés. Les entrées de journal sans bloc
billableTokenUsagesont exclues des requêtes et des métriques. - Utilisez ces tableaux de bord pour surveiller les tendances d'utilisation et estimer les coûts, et non pour rapprocher une facture Cloud Billing officielle.
- Chaque Google Cloud projet nécessite sa propre configuration de tableau de bord.
- Les requêtes SQL ne renvoient pas les entrées de journal écrites avant l'activation de l'Analyse de l'observabilité sur le bucket
_Default. - Le widget de table par job affiche au maximum les 500 jobs les plus récents au cours de la période sélectionnée. Pour inspecter des jobs plus anciens, interrogez l'explorateur de journaux.
Étapes suivantes
- En savoir plus sur les insights sur les données pour les données structurées
- Découvrez comment utiliser les insights sur les données pour les données structurées.
- Découvrez comment surveiller les journaux Knowledge Catalog.
- Découvrez comment surveiller les métriques Knowledge Catalog.