Melacak penggunaan token model pihak ketiga

Anda dapat menghitung konsumsi token menurut model, hari, dan pengguna untuk model pihak ketiga di alat developer AI, seperti Anthropic Claude Opus 5.5 dan Anthropic Claude Sonnet 5.5, menggunakan Cloud Logging dan Observability Analytics.

Panduan Memulai

Jika bucket log _Default project Anda sudah diupgrade untuk Observability Analytics, jalankan kueri berikut di Logging > Observability Analytics (ganti [PROJECT_ID] dengan ID project Google Cloud Anda) untuk mendapatkan penggunaan token 30 hari di seluruh model Anthropic pihak ketiga:

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

Sebelum memulai

Pastikan project Anda memenuhi persyaratan berikut sebelum menjalankan langkah-langkah tutorial:

  • Logging metadata diaktifkan. Kontrol administrator alat developer AI Anda harus mengaktifkan Pencatatan log metadata agar catatan inference_response menyertakan blok token jsonPayload.metadata.
  • Anda memiliki setidaknya peran Logs Viewer (roles/logging.viewer). Peran roles/logging.viewer standar memberikan akses SQL ke tampilan log _Default._Default yang digunakan di seluruh panduan ini. Membuat kueri tampilan _Default._AllLogs memerlukan roles/logging.privateLogViewer atau roles/logging.viewAccessor.
  • Bucket log _Default Anda diupgrade untuk Observability Analytics.
    1. Di konsol Google Cloud , buka Logging > Logs Storage, temukan bucket _Default, dan periksa kolom Observability Analytics.
    2. Jika belum diaktifkan, klik Lainnya > Upgrade untuk menggunakan Observability Analytics. Upgrade mengubah _Default di tempat dan tidak dapat diurungkan.
    3. Izinkan propagasi awal: Setelah mengupgrade bucket, Cloud Logging memerlukan waktu 30 hingga 60 menit untuk memperbarui cache perutean untuk entri log baru, dan beberapa jam untuk mengisi ulang log historis (pengisian ulang dimulai 1 jam setelah upgrade selesai).

Cara struktur rekaman log

Setiap panggilan inferensi memancarkan satu entri InferenceResponseLog ke log businessaicode.googleapis.com%2Finference_response. Identitas model dicatat di labels, dan jumlah token dicatat di 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"
    }
  }
}

Referensi kolom dan aturan penghitungan

Kolom LogEntry (Logs Explorer dan Metrik berbasis log) Ekspresi SQL (Observability Analytics) Deskripsi
labels.model JSON_VALUE(labels.model) ID model (misalnya, claude-sonnet-5-5 untuk Anthropic Claude Sonnet 5.5 atau claude-opus-5-5 untuk Anthropic Claude Opus 5.5).
labels.model_provider JSON_VALUE(labels.model_provider) Nama penyedia (misalnya, Anthropic atau Google).
labels.user_id JSON_VALUE(labels.user_id) Akun utama yang diautentikasi (misalnya, user:user@example.com).
labels.trajectory_id JSON_VALUE(labels.trajectory_id) ID lintasan percakapan atau agen. Satu giliran pengguna biasanya mencakup beberapa panggilan request_id dalam satu trajectory_id.
jsonPayload.metadata.promptTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.promptTokenCount) AS INT64) Total token input untuk panggilan (termasuk token yang di-cache).
jsonPayload.metadata.cachedContentTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.cachedContentTokenCount) AS INT64) Subset promptTokenCount disajikan dari cache perintah. Dihilangkan jika nol. Jangan tambahkan ke promptTokenCount atau totalTokenCount.
jsonPayload.metadata.candidatesTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.candidatesTokenCount) AS INT64) Token output yang dihasilkan oleh model.
jsonPayload.metadata.thoughtsTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.thoughtsTokenCount) AS INT64) Token penalaran, jika berlaku. Dihilangkan untuk model Anthropic.
jsonPayload.metadata.totalTokenCount SAFE_CAST(JSON_VALUE(json_payload.metadata.totalTokenCount) AS INT64) Total otoritatif untuk panggilan. Sama dengan promptTokenCount + candidatesTokenCount (+ thoughtsTokenCount jika ada).

Langkah 1: Verifikasi log masuk di Logs Explorer

Sebelum menjalankan kueri SQL, pastikan bahwa rekaman inference_response dengan metadata token tiba di project Anda:

  1. Di konsol Google Cloud , buka Logging > Logs Explorer.
  2. Tempel kueri berikut ke editor kueri, dengan mengganti [PROJECT_ID] dengan project ID Anda:

    logName="projects/[PROJECT_ID]/logs/businessaicode.googleapis.com%2Finference_response"
    labels.model_provider="Anthropic"
    
  3. Klik Run query.

  4. Di panel Log fields, klik model untuk melihat distribusi permintaan di seluruh model Anthropic. Tampilan ini menghitung permintaan, bukan token.

Langkah 2: Jumlahkan token menurut model di Observability Analytics

  1. Di konsol Google Cloud , buka Logging > Observability Analytics.
  2. Tetapkan Pemilih rentang waktu ke 30 hari terakhir (pemilih rentang waktu membatasi hasil kueri Anda selain klausa WHERE SQL Anda).
  3. Tempel dan jalankan kueri berikut, dengan mengganti [PROJECT_ID] dengan project ID Anda:

    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
    

Langkah 3: Resep SQL umum

Gunakan kueri SQL berikut di Logging > Observability Analytics untuk menganalisis tren token harian dan atribusi token per pengguna.

Tren token harian menurut model

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

Atribusi per pengguna, per model

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

Langkah 4: Sematkan ke dasbor Cloud Monitoring

Anda memiliki dua opsi untuk dasbor, bergantung pada apakah Anda memerlukan perincian SQL historis atau ad hoc, atau metrik berkelanjutan yang ringan:

Pendekatan Paling cocok untuk Mempertahankan histori lebih dari 30 hari? Mendukung pengelompokan user_id?
Opsi A: Menyimpan diagram SQL dari Observability Analytics Tabel dan diagram per model, harian, dan per pengguna tanpa penyiapan metrik Dibatasi oleh retensi bucket log (default 30 hari) Ya (tidak ada batas kardinalitas)
Opsi B: Metrik distribusi berbasis log Deret waktu Pemantauan Berkelanjutan dan pemberitahuan pada label kardinalitas rendah Ya (disimpan di Monitoring) Tidak (kardinalitas tinggi menghabiskan kuota metrik)

Opsi A: Menyimpan langsung dari Observability Analytics

  1. Jalankan kueri dari Langkah 2 atau kueri Tren token harian menurut model di Observability Analytics.
  2. Alihkan panel hasil dari Tabel ke Diagram jika Anda menginginkan deret waktu atau diagram batang visual.
  3. Di toolbar panel hasil, klik Simpan ke dasbor, lalu pilih dasbor Monitoring yang ada atau buat dasbor baru.

Opsi B: Membuat metrik distribusi berbasis log

  1. Di konsol Google Cloud , buka Logging > Metrik berbasis log, lalu klik Create metric.
  2. Pilih Distribusi sebagai jenis metrik.
  3. Tempelkan kueri dari Langkah 1 ke kolom Filter, lalu tetapkan Nama kolom ke jsonPayload.metadata.totalTokenCount.
  4. Tambahkan dua label:
    • model dipetakan ke labels.model
    • model_provider dipetakan ke labels.model_provider

Langkah berikutnya