Anthropic Claude Opus 5.5 や Anthropic Claude Sonnet 5.5 などのサードパーティ モデルのモデル別、日別、ユーザー別のトークン消費量を計算するには、Cloud Logging と オブザーバビリティ分析 を使用して AI デベロッパー ツールを使用します。
クイックスタート
プロジェクトの _Default ログバケットが オブザーバビリティ分析用にすでにアップグレードされている場合は、[ロギング] > [オブザーバビリティ分析] で次のクエリを実行し([PROJECT_ID] を Google Cloud プロジェクト ID に置き換えます)、サードパーティの Anthropic モデル全体で 30 日間のトークン使用量を取得します。
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
始める前に
チュートリアルの手順を実行する前に、プロジェクトが次の要件を満たしていることを確認してください。
- メタデータ ロギングが有効になっている。
inference_responseレコードにjsonPayload.metadataトークン ブロックが含まれるように、AI デベロッパー ツール管理者の制御でメタデータ ロギングを有効にする必要があります。 - 少なくともログ閲覧者ロール(
roles/logging.viewer)が付与されている。標準のroles/logging.viewerロールは、このガイド全体で使用される_Default._Defaultログビューへの SQL アクセス権を付与します。_Default._AllLogsビューのクエリには、roles/logging.privateLogViewerまたはroles/logging.viewAccessorが必要です。 _Defaultログバケットがオブザーバビリティ分析用にアップグレードされました。- Google Cloud コンソールで、[ロギング] > [ログ ストレージ] に移動し、
_Defaultバケットを見つけて、[オブザーバビリティ分析] 列を確認します。 - 有効になっていない場合は、 [その他] > [オブザーバビリティ分析を使用するためにアップグレード] をクリックします。アップグレードでは
_Defaultがインプレースで変更され、元に戻すことはできません。 - 初期伝播を許可する: バケットをアップグレードした後、Cloud Logging は新しいログエントリのルーティング キャッシュを更新するのに 30 ~ 60 分かかり、過去のログのバックフィルには数時間かかります(バックフィルはアップグレードの完了から 1 時間後に開始されます)。
- Google Cloud コンソールで、[ロギング] > [ログ ストレージ] に移動し、
ログレコードの構造
推論呼び出しごとに、businessaicode.googleapis.com%2Finference_response ログに 1 つの InferenceResponseLog エントリが出力されます。モデル ID は labels に記録され、トークン数は 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"
}
}
}
フィールド リファレンスとカウントルール
| LogEntry フィールド(ログ エクスプローラとログベースの指標) | SQL 式(オブザーバビリティ分析) | 説明 |
|---|---|---|
labels.model |
JSON_VALUE(labels.model) |
モデル識別子(Anthropic Claude Sonnet 5.5 の場合は claude-sonnet-5-5、Anthropic Claude Opus 5.5 の場合は claude-opus-5-5 など)。 |
labels.model_provider |
JSON_VALUE(labels.model_provider) |
プロバイダ名(例: Anthropic、Google)。 |
labels.user_id |
JSON_VALUE(labels.user_id) |
認証されたプリンシパル(user:user@example.com など)。 |
labels.trajectory_id |
JSON_VALUE(labels.trajectory_id) |
会話またはエージェントの軌跡 ID。通常、1 回のユーザー ターンは、1 つの trajectory_id の下で複数の request_id 呼び出しにまたがります。 |
jsonPayload.metadata.promptTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) |
通話の入力トークンの合計数(キャッシュに保存されたトークンを含む)。 |
jsonPayload.metadata.cachedContentTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) |
プロンプト キャッシュから提供された promptTokenCount のサブセット。ゼロの場合は省略されます。promptTokenCount または totalTokenCount に追加しないでください。 |
jsonPayload.metadata.candidatesTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) |
モデルによって生成された出力トークン。 |
jsonPayload.metadata.thoughtsTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) |
推論トークン(該当する場合)。Anthropic モデルでは省略されています。 |
jsonPayload.metadata.totalTokenCount |
SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) |
通話の信頼できる合計。promptTokenCount + candidatesTokenCount(存在する場合は thoughtsTokenCount)と等しい。 |
ステップ 1: ログ エクスプローラで受信ログを確認する
SQL クエリを実行する前に、トークン メタデータを含む inference_response レコードがプロジェクトに届いていることを確認します。
- Google Cloud コンソールで、[ロギング] > [ログ エクスプローラ] を開きます。
次のクエリをクエリエディタに貼り付けます。
[PROJECT_ID]は実際のプロジェクト ID に置き換えます。logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response" labels.model_provider="Anthropic"[クエリを実行] をクリックします。
[ログフィールド] ペインで [モデル] をクリックして、Anthropic モデル全体のリクエスト分布を表示します。このビューでは、トークンではなくリクエストがカウントされます。
ステップ 2: オブザーバビリティ分析でモデル別にトークンを合計する
- Google Cloud コンソールで、[ロギング] > [オブザーバビリティ分析] を開きます。
- [期間セレクタ] を [過去 30 日間] に設定します(期間セレクタは、SQL
WHERE句に加えてクエリ結果を制限します)。 次のクエリを貼り付けて実行します。
[PROJECT_ID]は実際のプロジェクト ID に置き換えます。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
ステップ 3: 一般的な SQL レシピ
[ロギング] > [オブザーバビリティ分析] で次の SQL クエリを使用して、1 日あたりのトークンの傾向とユーザーごとのトークンの属性を分析します。
モデル別のトークンの日別推移
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
ユーザーごと、モデルごとのアトリビューション
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
ステップ 4: Cloud Monitoring ダッシュボードに固定する
ダッシュボードには、履歴またはアドホック SQL の内訳が必要か、軽量の継続的指標が必要かに応じて、次の 2 つのオプションがあります。
| アプローチ | 最適な用途 | 30 日を超えて履歴を保持しますか? | user_id グループ化をサポートしていますか? |
|---|---|---|---|
| オプション A: オブザーバビリティ分析から SQL グラフを保存する | 指標の設定なしで、モデル別、日別、ユーザー別のテーブルとグラフ | ログバケットの保持期間(デフォルトは 30 日)によって制限されます。 | はい(基数の上限なし) |
| オプション B: ログベースの分布指標 | 継続的モニタリングの時系列とカーディナリティの低いラベルのアラート | はい(Monitoring に保存) | いいえ(カーディナリティが高いため、指標の割り当てが使い果たされる) |
オプション A: オブザーバビリティ分析から直接保存する
- ステップ 2 のクエリまたは オブザーバビリティ分析のモデル別のトークンの日次推移クエリを実行します。
- 時系列グラフや棒グラフを表示する場合は、結果ペインを [表] から [グラフ] に切り替えます。
- 結果ペインのツールバーで、[ダッシュボードに保存] をクリックし、既存の Monitoring ダッシュボードを選択するか、新しいダッシュボードを作成します。
オプション B: ログベースの分布指標を作成する
- Google Cloud コンソールで、[ロギング] > [ログベースの指標] に移動し、[指標の作成] をクリックします。
- 指標タイプとして [分布] を選択します。
- ステップ 1 のクエリを [フィルタ] フィールドに貼り付け、[フィールド名] を
jsonPayload.metadata.totalTokenCountに設定します。 - 次の 2 つのラベルを追加します。
modelがlabels.modelにマッピングされましたmodel_providerがlabels.model_providerにマッピングされました