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 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 facturés dans 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 pour le job (telles que les événements CREATED, STARTED, FAILED ou CANCELLED) n'incluent pas de bloc billableTokenUsage.
À partir du 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 d'invite 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 non mis en cache standard. | cachedContentTokenCount |
| Jetons de sortie | Jetons de réponse générés plus jetons de raisonnement (réflexion). Les jetons de réflexion 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 jetons 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 d'invite envoyés au modèle, y compris les jetons mis en cache. |
cachedContentTokenCount |
Partie des jetons d'invite diffusés à partir du cache de contexte. |
toolUsePromptTokenCount |
Jetons d'invite ajoutés par les appels d'outils (tels que le schéma, le profil ou l'historique des requêtes). |
candidatesTokenCount |
Jetons de réponse générés, à l'exclusion des jetons de réflexion. |
thoughtsTokenCount |
Jetons de raisonnement (réflexion) 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 réflexion 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 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 sont pas déjà activées.
Rôles requis pour activer les API
Pour activer les API, vous avez besoin 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 obtenir cette autorisation via le
rôle Administrateur d'utilisation du service (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 répond aux 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 Google Cloud console, accédez à la page Logging > Routeur de journaux.
Localisez 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 () et 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 de votre Google Cloud projet.
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 vos journaux d'analyse d'insights sur les données et alimenter le tableau de bord personnalisé 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 aucun frais supplémentaire.
- 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 une fois la mise à niveau terminée. Les journaux plus anciens restent disponibles dans l'explorateur de journaux, mais n'apparaissent pas dans les résultats des requêtes SQL. Une fois le bucket mis à niveau, exécutez au moins une analyse d'insights sur les données afin que votre tableau de bord puisse afficher des données.
Console
Dans la Google Cloud console, accédez à la page Logging > Stockage des journaux.
Localisez la ligne du bucket
_Defaultet cochez la colonne Analyse de l'observabilité disponible :- Si la colonne affiche Ouvrir, Analyse de l'observabilité est déjà activé.
- Si la colonne affiche Mettre à niveau, cliquez sur Mettre à niveau, puis confirmez la mise à niveau.
Attendez quelques minutes que l'état de la colonne passe à Ouvrir.
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 Google Cloud projet.
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 Google Cloud CLI. Pour les agrégations horaires ou quotidiennes dans votre projet, vous pouvez créer un tableau de bord à l'aide d'Analyse de l'observabilité.
Console
Dans la Google Cloud console, accédez à la page Logging > Explorateur de journaux.
Si l'éditeur de requête n'est pas visible, activez 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 d'insights sur les données.
- JOB_ID : ID d'une exécution de job d'analyse spécifique.
Sélectionnez une plage de dates (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 d'insights sur les données récentes et mettez en forme les champs de jetons 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 de votre Google Cloud projet.
Une colonne vide dans le tableau de sortie indique 0 jeton pour ce champ.
Pour transformer ces champs en métriques, utilisez les formules décrites dans
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 Google Cloud console.
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 de votre Google Cloud projet.
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 de votre Google Cloud projet.
Créer un tableau de bord à l'aide d'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 d'Analyse de l'observabilité.
Cette approche exécute des requêtes SQL directement sur vos journaux d'analyse d'insights sur les données dans le bucket de journaux _Default. Elle 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 des estimations de métriques agrégées.
- Historique détaillé des jobs : en plus des graphiques agrégés, vous pouvez inspecter les jobs d'analyse individuels dans une vue tabulaire.
- Aucun frais supplémentaire : le passage du bucket de journaux
_Defaultà l'Analyse de l'observabilité n'entraîne aucun frais supplémentaire.
Cette option crée un tableau de bord Monitoring avec trois widgets qui exécutent des requêtes SQL sur vos journaux :
- Utilisation quotidienne des 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 @__project_id
variable (@__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 de projet dans le JSON avant de l'importer.
Console
Dans la Google Cloud console, 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 pour votre projet. Vérifiez que l'invite répertorie votre projet, puis cliquez sur Continuer l'exécution sur chaque widget.
Sélectionnez une plage de dates 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 Google Cloud projet.
Ouvrez la page "Tableaux de bord" dans la Google Cloud console, sélectionnez Analyse d'insights – Utilisation des jetons, et 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 ni acheminés en dehors du bucket de journaux_Default. - Seuls les jobs réussis avec des métadonnées de jetons 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 d'Analyse de l'observabilité sur le bucket
_Default. - Le widget de tableau par job affiche au maximum les 500 jobs les plus récents dans la plage de dates sélectionnée. Pour inspecter les jobs plus anciens, interrogez l'explorateur de journaux.
Étape suivante
- 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.