Tokennutzung von Drittanbietermodellen nachverfolgen

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 den jsonPayload.metadata-Tokenblock enthalten.
  • Sie haben mindestens die Rolle „Loganzeige“ (roles/logging.viewer). Die Standardrolle roles/logging.viewer gewährt SQL-Zugriff auf die Logansicht _Default._Default, die in diesem Leitfaden verwendet wird. Zum Abfragen der Ansicht _Default._AllLogs ist roles/logging.privateLogViewer oder roles/logging.viewAccessor erforderlich.
  • Ihr Log-Bucket _Default wurde für Observability Analytics aktualisiert.
    1. Rufen Sie in der Google Cloud -Console Logging > Logs Storage auf, suchen Sie den _Default-Bucket und prüfen Sie die Spalte Observability Analytics.
    2. Wenn sie nicht aktiviert ist, klicken Sie auf  Mehr > Upgrade für die Nutzung von Observability Analytics durchführen. Durch das Upgrade wird _Default direkt geändert. Das kann nicht rückgängig gemacht werden.
    3. 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.

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:

  1. Öffnen Sie in der Google Cloud Console Logging > Log-Explorer.
  2. 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"
    
  3. Klicken Sie auf Abfrage ausführen.

  4. 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

  1. Öffnen Sie in der Google Cloud Console Logging > Observability Analytics.
  2. Legen Sie die Zeitraumauswahl auf Letzte 30 Tage fest. Die Zeitraumauswahl begrenzt Ihre Abfrageergebnisse zusätzlich zur SQL-WHERE-Klausel.
  3. 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

  1. Führen Sie die Abfrage aus Schritt 2 oder die Abfrage Täglicher Token-Trend nach Modell in Observability Analytics aus.
  2. Wenn Sie eine visuelle Zeitreihe oder ein Balkendiagramm wünschen, wechseln Sie im Ergebnisbereich von Tabelle zu Diagramm.
  3. 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

  1. Rufen Sie in der Google Cloud Console Logging > Logbasierte Messwerte auf und klicken Sie dann auf Messwert erstellen.
  2. Wählen Sie Verteilung als Messwerttyp aus.
  3. Fügen Sie die Abfrage aus Schritt 1 in das Feld Filter ein und legen Sie Feldname auf jsonPayload.metadata.totalTokenCount fest.
  4. Fügen Sie zwei Labels hinzu:
    • model wird labels.model zugeordnet
    • model_provider wird labels.model_provider zugeordnet

Nächste Schritte