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_responseincluyan el bloque de tokensjsonPayload.metadata. - Tienes al menos el rol de Visualizador de registros (
roles/logging.viewer). El rol estándarroles/logging.viewerotorga acceso a SQL a la vista de registros_Default._Defaultque se usa en esta guía. Para consultar la vista_Default._AllLogs, se requiereroles/logging.privateLogVieweroroles/logging.viewAccessor. - Tu bucket de registros
_Defaultse actualizó para Estadísticas de observabilidad.- En la Google Cloud consola de , ve a Logging > Almacenamiento de registros, busca el bucket
_Defaulty verifica la columna Estadísticas de observabilidad. - Si no está habilitado, haz clic en
Más > Actualizar para
usar Estadísticas de observabilidad. La actualización modifica
_Defaulten su lugar y no se puede deshacer. - 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).
- En la Google Cloud consola de , ve a Logging > Almacenamiento de registros, busca el bucket
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:
- En la Google Cloud consola de, abre Logging > Explorador de registros.
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"Haz clic en Ejecutar consulta.
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
- En la Google Cloud consola de, abre Logging > Estadísticas de observabilidad.
- 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
WHEREde SQL). 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
- Ejecuta la consulta de paso 2 o la consulta de tendencia diaria de tokens por modelo en Estadísticas de observabilidad.
- Cambia el panel de resultados de Tabla a Gráfico si deseas una serie temporal visual o un gráfico de barras.
- 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
- En la Google Cloud consola de , ve a Logging > Métricas basadas en registros y, luego, haz clic en Crear métrica.
- Selecciona Distribución como el tipo de métrica.
- Pega la consulta del paso 1 en el campo Filtro
y establece Nombre del campo en
jsonPayload.metadata.totalTokenCount. - Agrega dos etiquetas:
modelasignado alabels.modelmodel_providerasignado alabels.model_provider
¿Qué sigue?
- Consulta las métricas de las herramientas para desarrolladores de IA
- Configura la disponibilidad de modelos de las herramientas de IA para desarrolladores
- Configura los parámetros de cumplimiento de las herramientas de IA para desarrolladores