Puedes calcular el consumo de tokens por modelo, día y usuario para los modelos de terceros en las herramientas para desarrolladores de IA, 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 > Observability Analytics (reemplaza [PROJECT_ID] por el ID de tu proyecto Google Cloud ) para obtener el uso de tokens durante 30 días en los modelos externos de Anthropic:
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
Antes de ejecutar los pasos del instructivo, asegúrate de que tu proyecto cumpla con los siguientes requisitos:
- El registro de metadatos está habilitado. Los controles del administrador de tus herramientas para desarrolladores de IA deben tener habilitado el registro de metadatos para que los registros de
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 toda 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 consola de Google Cloud , ve a Logging > Almacenamiento de registros, busca el bucket
_Defaulty marca la columna Estadísticas de observabilidad. - Si no está habilitada, 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 reabastecer los registros históricos (el reabastecimiento comienza 1 hora después de que se completa la actualización).
- En la consola de Google Cloud , ve a Logging > Almacenamiento de registros, busca el bucket
Cómo se estructura el registro
Cada llamada de inferencia emite una sola entrada InferenceResponseLog en el 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"
}
}
}
Reglas de referencia y recuento de campos
| 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) |
Es el 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) |
Es el principal autenticado (por ejemplo, user:user@example.com). |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
Es el ID de la conversación o la trayectoria del agente. Por lo general, un turno del usuario abarca varias llamadas request_id en un solo trajectory_id. |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
Es la cantidad total de tokens de entrada 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 a totalTokenCount. |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
Son los tokens de salida que genera 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) |
Es el total autorizado para la llamada. Es igual a promptTokenCount + candidatesTokenCount (más 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 de inference_response con metadatos de token lleguen a tu proyecto:
- En la consola de Google Cloud , 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 Log fields, haz clic en model para ver la distribución de solicitudes en los modelos de Anthropic. Esta vista cuenta las solicitudes, no los tokens.
Paso 2: Suma los tokens por modelo en Estadísticas de observabilidad
- En la consola de Google Cloud , abre Registro > 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, reemplazando
[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 en SQL en Registro > 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: Fija el gráfico 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 por más de 30 días? | ¿Admite el agrupamiento de 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 de forma predeterminada) | 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í (se almacena 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 del paso 2 o la consulta Tendencia diaria de tokens por modelo en Estadísticas de observabilidad.
- Cambia el panel de resultados de Tabla a Gráfico si deseas un gráfico de barras o de series temporales visual.
- 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 consola de Google Cloud , 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:
modelse asignó alabels.modelmodel_providerasignado alabels.model_provider
¿Qué sigue?
- Consulta las métricas de las herramientas para desarrolladores de IA
- Configura la disponibilidad del modelo de las herramientas para desarrolladores de IA
- Configura los parámetros de cumplimiento de las herramientas de IA para desarrolladores