É possível calcular o consumo de tokens por modelo, dia e usuário para modelos de terceiros nas ferramentas para desenvolvedores de IA, como o Anthropic Claude Opus 5.5 e o Anthropic Claude Sonnet 5.5, usando o Cloud Logging e o 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 seguinte consulta em Logging > Análise de Observabilidade (substituindo [PROJECT_ID] pelo ID do projeto Google Cloud ) para receber o uso de tokens de 30 dias em modelos de terceiros da 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 começar
Verifique se o projeto atende aos seguintes requisitos antes de executar as etapas do tutorial:
- O registro de metadados está ativado. Os controles do administrador das ferramentas para desenvolvedores de IA precisam ter o registro de metadados ativado para que os registros do
inference_responseincluam o bloco de tokenjsonPayload.metadata. - Você tem pelo menos o papel de Leitor de registros (
roles/logging.viewer). O papel padrãoroles/logging.viewerconcede acesso SQL à visualização de registros_Default._Defaultusada neste guia. Para consultar a visualização_Default._AllLogs, é necessário terroles/logging.privateLogViewerouroles/logging.viewAccessor. - O bucket de registros
_Defaultfoi atualizado para a Análise de observabilidade.- No console Google Cloud , acesse Logging > Armazenamento de registros, encontre o bucket
_Defaulte verifique a coluna Análise de observabilidade. - Se 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. - Aguarde 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 uma hora após a conclusão do upgrade.
- No console Google Cloud , acesse Logging > Armazenamento de registros, encontre o bucket
Como o registro de log é estruturado
Cada chamada de inferência emite uma única entrada InferenceResponseLog no 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 em cache). |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
Subconjunto de promptTokenCount veiculados do 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 da 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 console Google Cloud , 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 model para ver a distribuição de solicitações entre os modelos da Anthropic. Essa visualização conta solicitações, não tokens.
Etapa 2: somar tokens por modelo na Análise de observabilidade
- No console do Google Cloud , abra Logging > Análise de observabilidade.
- Defina o seletor de período como Últimos 30 dias. Ele 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 comuns de SQL
Use as seguintes consultas SQL em Geração de registros > 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 painéis, dependendo se você precisa de detalhamentos históricos ou ad hoc de SQL ou de uma métrica contínua leve:
| Abordagem | Ideal para | Retém o histórico por mais de 30 dias? | Tem suporte para agrupamento de user_id? |
|---|---|---|---|
| Opção A: salvar o gráfico SQL da Análise de observabilidade | Tabelas e gráficos diários, por modelo e por usuário sem configuração de métricas | 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 da Etapa 2 ou a consulta 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 ou um gráfico de barras visual.
- 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 console do Google Cloud , 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 de ferramentas para desenvolvedores de IA
- Configurar a disponibilidade do modelo de ferramentas para desenvolvedores de IA
- Configurar as configurações de compliance das ferramentas de IA para desenvolvedores