Realiza un seguimiento del uso de tokens de modelos de terceros

Puedes calcular el consumo de tokens por modelo, día y usuario para modelos de terceros en las herramientas de IA para desarrolladores, como Anthropic Claude Opus 5.5 y Anthropic Claude Sonnet 5.5, con Cloud Logging y Estadísticas de observabilidad.

Guía de inicio rápido

Si el bucket de registros _Default de tu proyecto ya se actualizó para Estadísticas de observabilidad, ejecuta la siguiente consulta en Logging > Estadísticas de observabilidad(reemplaza [PROJECT_ID] por el ID de tu Google Cloud proyecto) para obtener el uso de tokens de 30 días en los modelos de Anthropic de terceros:

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

Antes de comenzar

Asegúrate de que tu proyecto cumpla con los siguientes requisitos antes de ejecutar los pasos del instructivo:

  • El registro de metadatos está habilitado. Los controles de administrador de las herramientas de IA para desarrolladores deben tener habilitado el registro de metadatos para que los registros inference_response incluyan el bloque de tokens jsonPayload.metadata.
  • Tienes al menos el rol de Visualizador de registros (roles/logging.viewer). El rol estándar roles/logging.viewer otorga acceso a SQL a la vista de registros _Default._Default que se usa en esta guía. Para consultar la vista _Default._AllLogs, se requiere roles/logging.privateLogViewer o roles/logging.viewAccessor.
  • Tu bucket de registros _Default se actualizó para Estadísticas de observabilidad.
    1. En la Google Cloud consola de , ve a Logging > Almacenamiento de registros, busca el bucket _Default y verifica la columna Estadísticas de observabilidad.
    2. Si no está habilitado, haz clic en Más > Actualizar para usar Estadísticas de observabilidad. La actualización modifica _Default en su lugar y no se puede deshacer.
    3. Permite la propagación inicial: Después de actualizar un bucket, Cloud Logging tarda entre 30 y 60 minutos en actualizar las memorias caché de enrutamiento para las entradas de registro nuevas y varias horas en completar los registros históricos (el completado comienza 1 hora después de que se completa la actualización).

Cómo se estructura el registro

Cada llamada de inferencia emite una sola entrada InferenceResponseLog al registro businessaicode.googleapis.com%2Finference_response. La identidad del modelo se registra en labels, y los recuentos de tokens se registran en 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"
    }
  }
}

Referencia de campos y reglas de recuento

Campo LogEntry (Explorador de registros y métricas basadas en registros) Expresión SQL (Estadísticas de observabilidad) Descripción
labels.model JSON_VALUE(labels.model) Identificador del modelo (por ejemplo, claude-sonnet-5-5 para Anthropic Claude Sonnet 5.5 o claude-opus-5-5 para Anthropic Claude Opus 5.5).
labels.model_provider JSON_VALUE(labels.model_provider) Nombre del proveedor (por ejemplo, Anthropic o Google).
labels.user_id JSON_VALUE(labels.user_id) Principal autenticado (por ejemplo, user:user@example.com).
labels.trajectory_id JSON_VALUE(labels.trajectory_id) ID de la conversación o la trayectoria del agente. Un turno de usuario suele abarcar varias llamadas request_id en un solo trajectory_id.
jsonPayload.metadata.promptTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) Tokens de entrada totales para la llamada (incluidos los tokens almacenados en caché).
jsonPayload.metadata.cachedContentTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) Subconjunto de promptTokenCount que se entrega desde la caché de instrucciones. Se omite cuando es cero. No agregues a promptTokenCount ni totalTokenCount.
jsonPayload.metadata.candidatesTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) Tokens de salida generados por el modelo.
jsonPayload.metadata.thoughtsTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) Tokens de razonamiento, cuando corresponda. Se omite para los modelos de Anthropic.
jsonPayload.metadata.totalTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) Total autoritativo para la llamada. Es igual a promptTokenCount + candidatesTokenCount (+ thoughtsTokenCount cuando está presente).

Paso 1: Verifica los registros entrantes en el Explorador de registros

Antes de ejecutar consultas en SQL, confirma que los registros inference_response con metadatos de tokens lleguen a tu proyecto:

  1. En la Google Cloud consola de, abre Logging > Explorador de registros.
  2. Pega la siguiente consulta en el editor de consultas y reemplaza [PROJECT_ID] por el ID de tu proyecto:

    logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response"
    labels.model_provider="Anthropic"
    
  3. Haz clic en Ejecutar consulta.

  4. En el panel Campos de registro, haz clic en modelo para ver la distribución de solicitudes en los modelos de Anthropic. Esta vista cuenta las solicitudes, no los tokens.

Paso 2: Suma tokens por modelo en Estadísticas de observabilidad

  1. En la Google Cloud consola de, abre Logging > Estadísticas de observabilidad.
  2. Establece el selector de período en Últimos 30 días (el selector de período limita los resultados de la consulta, además de la cláusula WHERE de SQL).
  3. Pega y ejecuta la siguiente consulta, reemplaza [PROJECT_ID] por el ID de tu proyecto:

    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
    

Paso 3: Recetas comunes de SQL

Usa las siguientes consultas de SQL en Logging > Estadísticas de observabilidad para analizar las tendencias diarias de tokens y la atribución de tokens por usuario.

Tendencia diaria de tokens por modelo

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

Atribución por usuario y por modelo

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

Paso 4: Ancla a un panel de Cloud Monitoring

Tienes dos opciones para crear paneles, según si necesitas desgloses históricos o ad hoc de SQL, o una métrica continua ligera:

Enfoque Ideal para ¿Conserva el historial más allá de 30 días? ¿Admite la agrupación user_id?
Opción A: Guarda el gráfico de SQL desde Estadísticas de observabilidad Tablas y gráficos por modelo, diarios y por usuario sin configuración de métricas Limitado por la retención del bucket de registros (30 días predeterminados) Sí (sin límite de cardinalidad)
Opción B: Métrica de distribución basada en registros Series temporales de supervisión continua y alertas sobre etiquetas de baja cardinalidad Sí (almacenado en Monitoring) No (la alta cardinalidad agota la cuota de métricas)

Opción A: Guarda directamente desde Estadísticas de observabilidad

  1. Ejecuta la consulta de paso 2 o la consulta de tendencia diaria de tokens por modelo en Estadísticas de observabilidad.
  2. Cambia el panel de resultados de Tabla a Gráfico si deseas una serie temporal visual o un gráfico de barras.
  3. En la barra de herramientas del panel de resultados, haz clic en Guardar en el panel y, luego, elige un panel de Monitoring existente o crea uno nuevo.

Opción B: Crea una métrica de distribución basada en registros

  1. En la Google Cloud consola de , ve a Logging > Métricas basadas en registros y, luego, haz clic en Crear métrica.
  2. Selecciona Distribución como el tipo de métrica.
  3. Pega la consulta del paso 1 en el campo Filtro y establece Nombre del campo en jsonPayload.metadata.totalTokenCount.
  4. Agrega dos etiquetas:
    • model asignado a labels.model
    • model_provider asignado a labels.model_provider

¿Qué sigue?