Sie können den Tokenverbrauch nach Modell, Tag und Nutzer für Drittanbietermodelle in KI-Entwicklertools wie Anthropic Claude Opus 5.5 und Anthropic Claude Sonnet 5.5 mit Cloud Logging und Observability Analytics berechnen.
Kurzanleitung
Wenn für den Log-Bucket „_Default“ Ihres Projekts bereits ein Upgrade für Observability Analytics durchgeführt wurde, führen Sie die folgende Abfrage unter Logging > Observability Analytics aus (ersetzen Sie [PROJECT_ID] durch Ihre Google Cloud Projekt-ID), um die Tokennutzung über 30 Tage hinweg für Anthropic-Modelle von Drittanbietern abzurufen:
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
Hinweis
Prüfen Sie, ob Ihr Projekt die folgenden Anforderungen erfüllt, bevor Sie die Schritte des Tutorials ausführen:
- Metadaten-Logging ist aktiviert. In den Administratorsteuerfeldern für Ihre KI-Entwicklertools muss Metadatenprotokollierung aktiviert sein, damit
inference_response-Einträge denjsonPayload.metadata-Tokenblock enthalten. - Sie haben mindestens die Rolle „Loganzeige“ (
roles/logging.viewer). Die Standardrolleroles/logging.viewergewährt SQL-Zugriff auf die Logansicht_Default._Default, die in diesem Leitfaden verwendet wird. Zum Abfragen der Ansicht_Default._AllLogsistroles/logging.privateLogVieweroderroles/logging.viewAccessorerforderlich. - Ihr Log-Bucket
_Defaultwurde für Observability Analytics aktualisiert.- Rufen Sie in der Google Cloud -Console Logging > Logs Storage auf, suchen Sie den
_Default-Bucket und prüfen Sie die Spalte Observability Analytics. - Wenn sie nicht aktiviert ist, klicken Sie auf Mehr > Upgrade für die Nutzung von Observability Analytics durchführen. Durch das Upgrade wird
_Defaultdirekt geändert. Das kann nicht rückgängig gemacht werden. - Erste Weitergabe abwarten:Nach dem Upgrade eines Buckets dauert es 30 bis 60 Minuten, bis Cloud Logging die Routing-Caches für neue Logeinträge aktualisiert, und mehrere Stunden, bis historische Logs nachgefüllt werden. Das Nachfüllen beginnt eine Stunde nach Abschluss des Upgrades.
- Rufen Sie in der Google Cloud -Console Logging > Logs Storage auf, suchen Sie den
Aufbau des Logdatensatzes
Bei jedem Inferenzaufruf wird ein einzelner InferenceResponseLog-Eintrag in das businessaicode.googleapis.com%2Finference_response-Log ausgegeben. Die Modellidentität wird in labels und die Anzahl der Tokens in jsonPayload.metadata aufgezeichnet:
{
"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"
}
}
}
Feldreferenz und Zählregeln
| LogEntry-Feld (Log-Explorer und logbasierte Messwerte) | SQL-Ausdruck (Observability Analytics) | Beschreibung |
|---|---|---|
labels.model |
JSON_VALUE(labels.model) |
Modell-ID (z. B. claude-sonnet-5-5 für Anthropic Claude Sonnet 5.5 oder claude-opus-5-5 für Anthropic Claude Opus 5.5). |
labels.model_provider |
JSON_VALUE(labels.model_provider) |
Name des Anbieters (z. B. Anthropic oder Google). |
labels.user_id |
JSON_VALUE(labels.user_id) |
Authentifiziertes Konto (z. B. user:user@example.com). |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
ID des Unterhaltungs- oder Agentenverlaufs. Ein Nutzer-Turn umfasst in der Regel mehrere request_id-Aufrufe unter einem einzelnen trajectory_id. |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
Gesamtzahl der Eingabetokens für den Anruf (einschließlich der im Cache gespeicherten Tokens). |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
Teilmenge von promptTokenCount, die aus dem Prompt-Cache bereitgestellt wurde. Wird weggelassen, wenn der Wert null ist. Fügen Sie keine Inhalte zu promptTokenCount oder totalTokenCount hinzu. |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
Ausgabetokens, die vom Modell generiert werden. |
jsonPayload.metadata.thoughtsTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) |
Begründungstokens, falls zutreffend. Wird für Anthropic-Modelle ausgelassen. |
jsonPayload.metadata.totalTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) |
Autoritative Gesamtzahl für den Anruf. Entspricht promptTokenCount + candidatesTokenCount (+ thoughtsTokenCount, falls vorhanden). |
Schritt 1: Eingehende Protokolle im Log-Explorer prüfen
Bevor Sie SQL-Abfragen ausführen, prüfen Sie, ob inference_response-Datensätze mit Token-Metadaten in Ihrem Projekt eingehen:
- Öffnen Sie in der Google Cloud Console Logging > Log-Explorer.
Fügen Sie die folgende Abfrage in den Abfrageeditor ein und ersetzen Sie
[PROJECT_ID]durch Ihre Projekt-ID:logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response" labels.model_provider="Anthropic"Klicken Sie auf Abfrage ausführen.
Klicken Sie im Bereich Logfelder auf model, um die Verteilung der Anfragen auf die Anthropic-Modelle aufzurufen. In dieser Ansicht werden Anfragen und nicht Tokens gezählt.
Schritt 2: Tokens nach Modell in Observability Analytics summieren
- Öffnen Sie in der Google Cloud Console Logging > Observability Analytics.
- Legen Sie die Zeitraumauswahl auf Letzte 30 Tage fest. Die Zeitraumauswahl begrenzt Ihre Abfrageergebnisse zusätzlich zur SQL-
WHERE-Klausel. Fügen Sie die folgende Abfrage ein und führen Sie sie aus. Ersetzen Sie dabei
[PROJECT_ID]durch Ihre Projekt-ID: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
Schritt 3: Häufig verwendete SQL-Rezepte
Verwenden Sie die folgenden SQL-Abfragen unter Logging > Observability Analytics, um tägliche Tokentrends und die Tokenzuordnung pro Nutzer zu analysieren.
Täglicher Tokentrend nach Modell
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 pro Nutzer und pro Modell
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
Schritt 4: An ein Cloud Monitoring-Dashboard anpinnen
Je nachdem, ob Sie historische oder Ad-hoc-SQL-Aufschlüsselungen oder einen einfachen kontinuierlichen Messwert benötigen, haben Sie zwei Optionen für die Erstellung von Dashboards:
| Ansatz | Optimal für | Wird der Verlauf länger als 30 Tage aufbewahrt? | Unterstützt die Gruppierung von user_id? |
|---|---|---|---|
| Option A: SQL-Diagramm aus Observability Analytics speichern | Tägliche Tabellen und Diagramme pro Modell und Nutzer ohne Einrichtung von Messwerten | Begrenzt durch die Aufbewahrungsdauer des Log-Buckets (standardmäßig 30 Tage) | Ja (kein Kardinalitätsgrenzwert) |
| Option B: Logbasierter Verteilungs-Messwert | Zeitreihen für kontinuierliches Monitoring und Benachrichtigungen zu Labels mit niedriger Kardinalität | Ja (in Monitoring gespeichert) | Nein (hohe Kardinalität schöpft das Messwertkontingent aus) |
Option A: Direkt in Observability Analytics speichern
- Führen Sie die Abfrage aus Schritt 2 oder die Abfrage Täglicher Token-Trend nach Modell in Observability Analytics aus.
- Wenn Sie eine visuelle Zeitreihe oder ein Balkendiagramm wünschen, wechseln Sie im Ergebnisbereich von Tabelle zu Diagramm.
- Klicken Sie in der Symbolleiste des Ergebnisbereichs auf Im Dashboard speichern und wählen Sie dann ein vorhandenes Monitoring-Dashboard aus oder erstellen Sie ein neues.
Option B: Logbasierten Verteilungsmesswert erstellen
- Rufen Sie in der Google Cloud Console Logging > Logbasierte Messwerte auf und klicken Sie dann auf Messwert erstellen.
- Wählen Sie Verteilung als Messwerttyp aus.
- Fügen Sie die Abfrage aus Schritt 1 in das Feld Filter ein und legen Sie Feldname auf
jsonPayload.metadata.totalTokenCountfest. - Fügen Sie zwei Labels hinzu:
modelwirdlabels.modelzugeordnetmodel_providerwirdlabels.model_providerzugeordnet
Nächste Schritte
- Messwerte für KI-Entwicklertools ansehen
- Modellverfügbarkeit für KI‑Entwicklertools konfigurieren
- Compliance-Einstellungen für KI‑Entwicklertools konfigurieren