Vous pouvez calculer la consommation de jetons par modèle, jour et utilisateur pour les modèles tiers dans les outils pour les développeurs d'IA, tels que Anthropic Claude Opus 5.5 et Anthropic Claude Sonnet 5.5, à l'aide de Cloud Logging et d'Analyse de l'observabilité.
Guide de démarrage rapide
Si le bucket de journaux _Default de votre projet est déjà mis à niveau pour Analyse de l'observabilité, exécutez la requête suivante dans Journalisation > Analyse de l'observabilité (en remplaçant [PROJECT_ID] par l'ID de votre projet Google Cloud ) pour obtenir l'utilisation de jetons sur 30 jours pour les modèles Anthropic tiers :
SELECT
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64)) AS input_tokens,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64)) AS output_tokens,
IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64)), 0) AS cached_tokens,
IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64)), 0) AS thoughts_tokens,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
model
ORDER BY
total_tokens DESC
Avant de commencer
Avant d'exécuter les étapes du tutoriel, assurez-vous que votre projet répond aux exigences suivantes :
- La journalisation des métadonnées est activée. Les contrôles de l'administrateur de vos outils pour les développeurs d'IA doivent être activés pour la journalisation des métadonnées afin que les enregistrements
inference_responseincluent le bloc de jetonsjsonPayload.metadata. - Vous disposez au moins du rôle Visionneuse de journaux (
roles/logging.viewer). Le rôle standardroles/logging.vieweraccorde un accès SQL à la vue de journaux_Default._Defaultutilisée tout au long de ce guide. Pour interroger la vue_Default._AllLogs, vous devez disposer deroles/logging.privateLogViewerouroles/logging.viewAccessor. - Votre bucket de journaux
_Defaulta été mis à niveau pour l'Analyse de l'observabilité.- Dans la console Google Cloud , accédez à Journalisation > Stockage des journaux, recherchez le bucket
_Defaultet consultez la colonne Analyse de l'observabilité. - Si ce n'est pas le cas, cliquez sur Plus > Mettre à niveau pour utiliser l'Analyse de l'observabilité. La mise à niveau modifie
_Defaultsur place et est irréversible. - Laissez le temps à la propagation initiale : après la mise à niveau d'un bucket, Cloud Logging met entre 30 et 60 minutes pour actualiser les caches de routage pour les nouvelles entrées de journal, et plusieurs heures pour remplir les journaux historiques (le remplissage commence une heure après la fin de la mise à niveau).
- Dans la console Google Cloud , accédez à Journalisation > Stockage des journaux, recherchez le bucket
Structure de l'enregistrement du journal
Chaque appel d'inférence émet une seule entrée InferenceResponseLog dans le journal businessaicode.googleapis.com%2Finference_response. L'identité du modèle est enregistrée dans labels et le nombre de jetons est enregistré dans jsonPayload.metadata :
{
"logName": "projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response",
"timestamp": "2026-10-07T17:23:03.495323480Z",
"labels": {
"model": "claude-sonnet-5-5",
"model_provider": "Anthropic",
"client_name": "antigravity_cli",
"user_id": "user:user@example.com",
"trajectory_id": "25cd0b58-58ea-4beb-b2d7-42e0d3fdd96d",
"request_id": "25cd0b58-58ea-4beb-b2d7-42e0d3fdd96d-19"
},
"jsonPayload": {
"@type": "type.googleapis.com/google.cloud.businessaicode.logging.v1.InferenceResponseLog",
"metadata": {
"promptTokenCount": "70825",
"cachedContentTokenCount": "69079",
"candidatesTokenCount": "14215",
"totalTokenCount": "85040"
}
}
}
Documentation de référence sur les champs et règles de comptabilisation
| Champ LogEntry (explorateur de journaux et métriques basées sur les journaux) | Expression SQL (Analyse de l'observabilité) | Description |
|---|---|---|
labels.model |
JSON_VALUE(labels.model) |
Identifiant du modèle (par exemple, claude-sonnet-5-5 pour Anthropic Claude Sonnet 5.5 ou claude-opus-5-5 pour Anthropic Claude Opus 5.5). |
labels.model_provider |
JSON_VALUE(labels.model_provider) |
Nom du fournisseur (par exemple, Anthropic ou Google). |
labels.user_id |
JSON_VALUE(labels.user_id) |
Principal authentifié (par exemple, user:user@example.com). |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
ID de la conversation ou de la trajectoire de l'agent. Un tour d'utilisateur s'étend généralement sur plusieurs appels request_id sous un même trajectory_id. |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
Nombre total de jetons d'entrée pour l'appel (y compris les jetons mis en cache). |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
Sous-ensemble de promptTokenCount diffusé à partir du cache de requêtes. Omettez-le s'il est nul. N'ajoutez pas à promptTokenCount ni à totalTokenCount. |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
Jetons de sortie générés par le modèle. |
jsonPayload.metadata.thoughtsTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) |
Jetons de raisonnement, le cas échéant. Omitted for Anthropic models. |
jsonPayload.metadata.totalTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) |
Total faisant autorité pour l'appel. Équivaut à promptTokenCount + candidatesTokenCount (+ thoughtsTokenCount si disponible). |
Étape 1 : Vérifiez les journaux entrants dans l'explorateur de journaux
Avant d'exécuter des requêtes SQL, vérifiez que les enregistrements inference_response avec des métadonnées de jeton arrivent dans votre projet :
- Dans la console Google Cloud , ouvrez Logging > Explorateur de journaux.
Collez la requête suivante dans l'éditeur de requête, en remplaçant
[PROJECT_ID]par l'ID de votre projet :logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response" labels.model_provider="Anthropic"Cliquez sur Exécuter la requête.
Dans le volet Champs de journaux, cliquez sur model pour afficher la répartition des requêtes entre les modèles Anthropic. Cette vue comptabilise les requêtes, et non les jetons.
Étape 2 : Additionner les jetons par modèle dans Analyse de l'observabilité
- Dans la console Google Cloud , ouvrez Logging > Analyse de l'observabilité.
- Définissez le sélecteur de période sur 30 derniers jours (le sélecteur de période limite les résultats de votre requête en plus de votre clause
WHERESQL). Collez et exécutez la requête suivante en remplaçant
[PROJECT_ID]par l'ID de votre projet :SELECT JSON_VALUE(labels.model) AS model, COUNT(*) AS requests, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64)) AS input_tokens, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64)) AS output_tokens, IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64)), 0) AS cached_tokens, IFNULL(SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64)), 0) AS thoughts_tokens, SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens FROM `[PROJECT_ID].global._Default._Default` WHERE log_id = "businessaicode.googleapis.com/inference_response" AND JSON_VALUE(labels.model_provider) = "Anthropic" AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) GROUP BY model ORDER BY total_tokens DESC
Étape 3 : Recettes SQL courantes
Utilisez les requêtes SQL suivantes dans Journalisation > Analyse de l'observabilité pour analyser les tendances quotidiennes des jetons et l'attribution des jetons par utilisateur.
Tendance quotidienne des jetons par modèle
SELECT
TIMESTAMP_TRUNC(timestamp, DAY) AS day,
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
day, model
ORDER BY
day DESC, total_tokens DESC
Attribution par utilisateur et par modèle
SELECT
JSON_VALUE(labels.user_id) AS user_id,
JSON_VALUE(labels.model) AS model,
COUNT(*) AS requests,
SUM(SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64)) AS total_tokens
FROM
`[PROJECT_ID].global._Default._Default`
WHERE
log_id = "businessaicode.googleapis.com/inference_response"
AND JSON_VALUE(labels.model_provider) = "Anthropic"
AND JSON_VALUE(labels.user_id) IS NOT NULL
AND timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
GROUP BY
user_id, model
ORDER BY
total_tokens DESC
Étape 4 : Épingler à un tableau de bord Cloud Monitoring
Deux options s'offrent à vous pour créer des tableaux de bord, selon que vous ayez besoin de répartitions SQL historiques ou ponctuelles, ou d'une métrique continue légère :
| Méthode | Application idéale | Conserver l'historique au-delà de 30 jours ? | Compatible avec le regroupement user_id ? |
|---|---|---|---|
| Option A : Enregistrer un graphique SQL depuis Analyse de l'observabilité | Tableaux et graphiques quotidiens, par modèle et par utilisateur, sans configuration de métrique | Limitée par la durée de conservation du bucket de journaux (30 jours par défaut) | Oui (aucune limite de cardinalité) |
| Option B : Métrique de distribution basée sur les journaux | Séries temporelles de surveillance continue et alertes sur les libellés à faible cardinalité | Oui (stockées dans Monitoring) | Non (la cardinalité élevée épuise le quota de métriques) |
Option A : Enregistrer directement depuis Analyse de l'observabilité
- Exécutez la requête de l'étape 2 ou la requête Tendance quotidienne des jetons par modèle dans Analyse de l'observabilité.
- Passez du volet des résultats Tableau à Graphique si vous souhaitez obtenir une série temporelle ou un graphique à barres visuels.
- Dans la barre d'outils du volet des résultats, cliquez sur Enregistrer dans le tableau de bord, puis choisissez un tableau de bord Monitoring existant ou créez-en un.
Option B : Créer une métrique de distribution basée sur les journaux
- Dans la console Google Cloud , accédez à Logging > Métriques basées sur les journaux, puis cliquez sur Créer une métrique.
- Sélectionnez Distribution comme type de métrique.
- Collez la requête de l'étape 1 dans le champ Filtre, puis définissez Nom du champ sur
jsonPayload.metadata.totalTokenCount. - Ajoutez deux libellés :
modelmappé surlabels.modelmodel_providermappé surlabels.model_provider
Étapes suivantes
- Afficher les métriques des outils de développement d'IA
- Configurer la disponibilité des modèles des outils IA pour les développeurs
- Configurer les paramètres de conformité des outils IA pour les développeurs