É possível calcular o consumo de tokens por modelo, dia e usuário para modelos de terceiros nas ferramentas de IA para desenvolvedores, como o Anthropic Claude Opus 5.5 e o Anthropic Claude Sonnet 5.5, usando o Cloud Logging e a Análise de observabilidade.
Guia de início rápido
Se o bucket de registros _Default do seu projeto já tiver sido atualizado para a Análise de
observabilidade, execute a consulta a seguir em Logging > Análise de observabilidade
(substituindo [PROJECT_ID] pelo Google Cloud ID do projeto) para receber o uso de
tokens de 30 dias em modelos Anthropic de terceiros:
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 começar
Verifique se o projeto atende aos seguintes requisitos antes de executar as etapas do tutorial:
- A geração de registros de metadados está ativada. Os controles de administrador das ferramentas de IA para desenvolvedores
precisam ter
a geração de registros de metadados
ativada para que os registros
inference_responseincluam ojsonPayload.metadatabloco de tokens. - Você tem pelo menos o papel Leitor de registros (
roles/logging.viewer) . O papel padrãoroles/logging.viewerconcede acesso SQL à visualização de registros_Default._Defaultusada neste guia. A consulta da visualização_Default._AllLogsrequerroles/logging.privateLogViewerouroles/logging.viewAccessor. - O bucket de registros
_Defaultfoi atualizado para a Análise de observabilidade.- No Google Cloud console, acesse Logging > Armazenamento de registros, encontre o
_Defaultbucket e verifique a coluna Análise de observabilidade. - Se ele não estiver ativado, clique em
Mais > Fazer upgrade para
usar a Análise de observabilidade. O upgrade modifica
_Defaultno local e não pode ser desfeito. - Permitir a propagação inicial:depois de fazer upgrade de um bucket, o Cloud Logging leva de 30 a 60 minutos para atualizar os caches de roteamento de novas entradas de registro e várias horas para preencher os registros históricos (o preenchimento começa 1 hora após a conclusão do upgrade).
- No Google Cloud console, acesse Logging > Armazenamento de registros, encontre o
Como o registro de registro é estruturado
Cada chamada de inferência emite uma única entrada InferenceResponseLog para o registro businessaicode.googleapis.com%2Finference_response. A identidade do modelo é registrada em labels, e as contagens de tokens são registradas em 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"
}
}
}
Referência de campo e regras de contagem
| Campo LogEntry (Análise de registros e métricas com base em registros) | Expressão SQL (Análise de observabilidade) | Descrição |
|---|---|---|
labels.model |
JSON_VALUE(labels.model) |
Identificador do modelo (por exemplo, claude-sonnet-5-5 para Anthropic Claude Sonnet 5.5 ou claude-opus-5-5 para Anthropic Claude Opus 5.5). |
labels.model_provider |
JSON_VALUE(labels.model_provider) |
Nome do provedor (por exemplo, Anthropic ou Google). |
labels.user_id |
JSON_VALUE(labels.user_id) |
Principal autenticado (por exemplo, user:user@example.com). |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
ID da trajetória da conversa ou do agente. Um turno de usuário normalmente abrange várias chamadas request_id em um único trajectory_id. |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
Total de tokens de entrada para a chamada (inclui tokens armazenados em cache). |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
Subconjunto de promptTokenCount disponibilizado no cache de comandos. Omitido quando zero. Não adicione a promptTokenCount ou totalTokenCount. |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
Tokens de saída gerados pelo modelo. |
jsonPayload.metadata.thoughtsTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) |
Tokens de raciocínio, quando aplicável. Omitido para modelos da Anthropic. |
jsonPayload.metadata.totalTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) |
Total autorizado para a chamada. É igual a promptTokenCount + candidatesTokenCount (+ thoughtsTokenCount quando presente). |
Etapa 1: verificar os registros recebidos no Explorador de registros
Antes de executar consultas SQL, confirme se os registros inference_response com metadados de token estão chegando ao seu projeto:
- No Google Cloud console, abra Geração de registros > Análise de registros.
Cole a consulta a seguir no editor de consultas, substituindo
[PROJECT_ID]pelo ID do projeto:logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response" labels.model_provider="Anthropic"Clique em Executar consulta.
No painel Campos de registro, clique em modelo para conferir a distribuição de solicitações em modelos da Anthropic. Essa visualização conta solicitações, não tokens.
Etapa 2: somar tokens por modelo na Análise de observabilidade
- No Google Cloud console, abra Logging > Análise de observabilidade.
- Defina o seletor de período como Últimos 30 dias (o seletor de período limita os resultados da consulta, além da cláusula
WHEREdo SQL). Cole e execute a consulta a seguir, substituindo
[PROJECT_ID]pelo ID do projeto: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
Etapa 3: receitas SQL comuns
Use as consultas SQL a seguir em Logging > Análise de observabilidade para analisar as tendências diárias de tokens e a atribuição de tokens por usuário.
Tendência diária 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
Atribuição por usuário e 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
Etapa 4: fixar em um painel do Cloud Monitoring
Há duas opções de painel, dependendo se você precisa de detalhamentos históricos ou ad hoc do SQL ou de uma métrica contínua leve:
| Abordagem | Ideal para | Retém o histórico por mais de 30 dias? | Oferece suporte ao agrupamento user_id? |
|---|---|---|---|
| Opção A: salvar o gráfico SQL da Análise de observabilidade | Tabelas e gráficos por modelo, diários e por usuário com configuração de métrica zero | Limitado pela retenção do bucket de registros (padrão de 30 dias) | Sim (sem limite de cardinalidade) |
| Opção B: métrica de distribuição com base em registros | Série temporal de monitoramento contínuo e alertas em rótulos de baixa cardinalidade | Sim (armazenado no Monitoring) | Não (a alta cardinalidade esgota a cota de métricas) |
Opção A: salvar diretamente da Análise de observabilidade
- Execute a consulta de etapa 2 ou a consulta de tendência diária de tokens por modelo na Análise de observabilidade.
- Mude o painel de resultados de Tabela para Gráfico se quiser uma série temporal visual ou um gráfico de barras.
- Na barra de ferramentas do painel de resultados, clique em Salvar no painel e escolha um painel do Monitoring ou crie um novo.
Opção B: criar uma métrica de distribuição com base em registros
- No Google Cloud console, acesse Logging > Métricas com base em registros e clique em Criar métrica.
- Selecione Distribuição como o tipo de métrica.
- Cole a consulta da etapa 1 no campo Filtro
e defina Nome do campo como
jsonPayload.metadata.totalTokenCount. - Adicione dois rótulos:
modelmapeado paralabels.modelmodel_providermapeado paralabels.model_provider
A seguir
- Conferir métricas das ferramentas para desenvolvedores de IA
- Configurar a disponibilidade do modelo de ferramentas de IA para desenvolvedores
- Configurar as definições de conformidade das ferramentas de IA para desenvolvedores