Memantau penggunaan token insight data

Dokumen ini menjelaskan cara memantau pemakaian token untuk pemindaian insight data Knowledge Catalog (sebelumnya Dataplex Universal Catalog) menggunakan Cloud Logging dan Cloud Monitoring. Dengan melacak penggunaan token per pemindaian dan per tugas, Anda dapat memahami tren penggunaan model dan memperkirakan biaya yang ditagih di seluruh project.

Cara kerja logging penggunaan token

Saat tugas pemindaian insight data (jsonPayload.type="DATA_DOCUMENTATION") selesai dengan status SUCCEEDED, Knowledge Catalog akan menulis entri log ke log dataplex.googleapis.com/data_scan. Entri log ini berisi blok billableTokenUsage di bagian jsonPayload.dataDocumentation yang mencatat perincian token untuk tugas tersebut. Entri log lain untuk tugas (seperti peristiwa CREATED, STARTED, FAILED, atau CANCELLED) tidak menyertakan blok billableTokenUsage.

Dari blok billableTokenUsage, Anda dapat melacak tiga kategori token utama untuk memperkirakan penagihan:

Metrik Deskripsi Formula (menggunakan kolom billableTokenUsage)
Token input yang tidak di-cache Token input yang tidak disajikan dari cache konteks, termasuk token perintah penggunaan alat. max(promptTokenCount - cachedContentTokenCount, 0) + toolUsePromptTokenCount
Token input yang di-cache Token input yang disajikan dari cache konteks. Token yang di-cache dilacak secara terpisah karena tidak dikenai harga sesuai tarif input non-cache standar. cachedContentTokenCount
Token output Token respons yang dihasilkan ditambah token penalaran (berpikir). Token penalaran ditagih sebagai token output. candidatesTokenCount + thoughtsTokenCount

Untuk mengetahui detail harga token, lihat Harga Agen Data Cloud.

Kolom token dalam entri log

Setiap entri log dataplex.googleapis.com/data_scan menyertakan ID resource dan tugas standar seperti resource.labels.datascan_id, resource.labels.location, jsonPayload.jobId, dan jsonPayload.state. Untuk pemindaian insight data yang berhasil, objek jsonPayload.dataDocumentation.billableTokenUsage berisi kolom berikut:

Kolom Deskripsi
promptTokenCount Total token perintah yang dikirim ke model, termasuk token yang di-cache.
cachedContentTokenCount Bagian token perintah yang disajikan dari cache konteks.
toolUsePromptTokenCount Token perintah yang ditambahkan oleh panggilan alat (seperti konteks skema, profil, atau histori kueri).
candidatesTokenCount Token respons yang dihasilkan, tidak termasuk token penalaran.
thoughtsTokenCount Token penalaran (pemikiran) yang dihasilkan oleh model.

Contoh berikut menunjukkan entri log dataplex.googleapis.com/data_scan untuk tugas pemindaian insight data yang berhasil:

{
  "resource": {
    "type": "dataplex.googleapis.com/DataScan",
    "labels": {
      "datascan_id": "my-insights-scan",
      "location": "us-central1",
      "resource_container": "projects/1234567890"
    }
  },
  "jsonPayload": {
    "type": "DATA_DOCUMENTATION",
    "jobId": "8f2b3c4d-1234-5678-9abc-def012345678",
    "state": "SUCCEEDED",
    "dataDocumentation": {
      "billableTokenUsage": {
        "promptTokenCount": "20412",
        "candidatesTokenCount": "7053"
      }
    }
  }
}

Dalam contoh ini, tugas tidak menggunakan cache konteks, token penalaran, atau panggilan alat. Akibatnya, token input yang tidak di-cache sama dengan 20,412, token input yang di-cache sama dengan 0, dan token output sama dengan 7,053.

Sebelum memulai

Sebelum Anda mengkueri log token insight data atau membuat dasbor pemantauan, selesaikan prasyarat berikut.

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk memantau penggunaan token insight data, minta administrator untuk memberi Anda peran IAM berikut pada project Anda:

  • Melihat log pemindaian data dan menjalankan kueri Observability Analytics: Logs Viewer (roles/logging.viewer)
  • Membuat dasbor kustom di Monitoring: Editor Monitoring (roles/monitoring.editor)
  • Melihat dasbor kustom di Monitoring: Monitoring Viewer (roles/monitoring.viewer)

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Mengaktifkan API

Aktifkan Dataplex, Logging, Monitoring API, jika belum diaktifkan.

Peran yang diperlukan untuk mengaktifkan API

Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

Aktifkan API

Memverifikasi konfigurasi perutean log

Pemindaian insight data menulis log dengan nama log dataplex.googleapis.com/data_scan. Konfigurasi dasbor dalam dokumen ini membaca log tersebut dari bucket log _Default project Anda. Pastikan perutean log project Anda memenuhi kondisi berikut:

  • Sink _Default diaktifkan dan merutekan log ke bucket log _Default.
  • Sink _Default tidak memiliki filter pengecualian yang menghapus log dataplex.googleapis.com/data_scan atau DATA_DOCUMENTATION.

Konsol

  1. Di konsol Google Cloud , buka halaman Logging > Log Router.

    Buka Log Router

  2. Temukan sink _Default dan pastikan statusnya adalah Diaktifkan dan tujuannya adalah bucket _Default.

  3. Klik menu sink () lalu pilih Lihat detail sink. Pastikan tidak ada filter pengecualian yang cocok dengan dataplex.googleapis.com/data_scan atau DATA_DOCUMENTATION.

gcloud

Deskripsikan sink _Default untuk memeriksa status, tujuan, dan filter pengecualiannya:

gcloud logging sinks describe _Default --project=PROJECT_ID

Ganti PROJECT_ID dengan project ID Google CloudAnda.

Verifikasi bahwa disabled tidak disetel ke true, destination diakhiri dengan /buckets/_Default, dan tidak ada entri di exclusions yang cocok dengan data_scan.

Mengaktifkan Observability Analytics di bucket _Default

Untuk menjalankan kueri SQL pada log pemindaian insight data dan mendukung dasbor Observability Analytics kustom, upgrade bucket log _Default project Anda untuk menggunakan Observability Analytics.

Sebelum Anda mengaktifkan Observability Analytics di bucket log _Default, tinjau pertimbangan berikut:

  • Mengupgrade bucket ke Observability Analytics tidak dapat diurungkan, dan tidak dikenai biaya tambahan.
  • Anda tidak perlu membuat set data BigQuery tertaut.
  • Kueri SQL Observability Analytics hanya menampilkan log yang tiba setelah upgrade selesai. Log lama tetap tersedia di Logs Explorer, tetapi tidak muncul di hasil kueri SQL. Setelah mengupgrade bucket, jalankan setidaknya satu pemindaian insight data agar dasbor Anda memiliki data untuk ditampilkan.

Konsol

  1. Di konsol Google Cloud , buka halaman Logging > Logs Storage.

    Buka Penyimpanan Log

  2. Temukan baris bucket _Default dan periksa kolom Observability Analytics available:

    • Jika kolom menampilkan Open, Observability Analytics sudah diaktifkan.
    • Jika kolom menampilkan Upgrade, klik Upgrade dan konfirmasi upgrade.
  3. Tunggu beberapa menit hingga status kolom berubah menjadi Buka.

gcloud

  1. Upgrade bucket log _Default untuk mengaktifkan Observability Analytics:

    gcloud logging buckets update _Default \
        --location=global --enable-analytics --project=PROJECT_ID
    

    Ganti PROJECT_ID dengan project ID Google Cloud Anda.

  2. Setelah beberapa menit, verifikasi bahwa upgrade telah selesai:

    gcloud logging buckets describe _Default \
        --location=global --project=PROJECT_ID
    

    Konfirmasi bahwa output menyertakan analyticsEnabled: true.

Melihat penggunaan token per tugas di Logs Explorer

Untuk memeriksa konsumsi token setiap tugas pemindaian insight data, gunakan Logs Explorer atau Google Cloud CLI. Untuk agregasi per jam atau harian di seluruh project, Anda dapat membuat dasbor menggunakan Observability Analytics.

Konsol

  1. Di konsol Google Cloud , buka halaman Logging > Logs Explorer.

    Buka Logs Explorer

  2. Jika editor kueri tidak terlihat, aktifkan Show query.

  3. Masukkan kueri berikut di editor kueri:

    log_id("dataplex.googleapis.com/data_scan")
    jsonPayload.type="DATA_DOCUMENTATION"
    jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:*
    

    Opsional: Untuk memfilter pemindaian atau eksekusi tugas tertentu, tambahkan salah satu baris berikut ke kueri:

    resource.labels.datascan_id="DATA_SCAN_ID"
    jsonPayload.jobId="JOB_ID"
    

    Ganti kode berikut:

    • DATA_SCAN_ID: ID pemindaian insight data.
    • JOB_ID: ID dari operasi tugas pemindaian tertentu.
  4. Pilih rentang waktu (misalnya, Last 24 hours), lalu klik Run query.

  5. Luaskan entri log dan buka jsonPayload > dataDocumentation > billableTokenUsage untuk memeriksa jumlah token untuk tugas tersebut.

gcloud

Baca entri log pemindaian data insights terbaru dan format kolom token sebagai tabel:

gcloud logging read \
    'log_id("dataplex.googleapis.com/data_scan") AND jsonPayload.type="DATA_DOCUMENTATION" AND jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:*' \
    --project=PROJECT_ID --freshness=1d --limit=20 \
    --format='table(timestamp, resource.labels.datascan_id:label=SCAN,
jsonPayload.jobId:label=JOB,
jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:label=PROMPT,
jsonPayload.dataDocumentation.billableTokenUsage.cachedContentTokenCount:label=CACHED,
jsonPayload.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount:label=TOOL_USE,
jsonPayload.dataDocumentation.billableTokenUsage.candidatesTokenCount:label=CANDIDATES,
jsonPayload.dataDocumentation.billableTokenUsage.thoughtsTokenCount:label=THOUGHTS)'

Ganti PROJECT_ID dengan project ID Google CloudAnda.

Kolom kosong dalam tabel output menunjukkan token 0 untuk kolom tersebut. Untuk mengubah kolom ini menjadi metrik, gunakan formula di Cara kerja logging penggunaan token.

Membuat kueri penggunaan token menggunakan Observability Analytics

Anda juga dapat menjalankan atau menyesuaikan kueri SQL widget langsung di halaman Log Analytics di Google Cloud console.

Diagram harian dan per jam menggunakan kueri diagram yang sama, yang menampilkan satu baris per tugas pemindaian. Setiap widget diagram mengelompokkan dan menjumlahkan baris berdasarkan hari (timeBinSize: 86400s) atau jam (timeBinSize: 3600s). Jika Anda mengedit kueri diagram dan menempelkannya kembali ke widget dasbor, pertahankan alias kolom timestamp, total_non_cached_input_tokens, total_cached_input_tokens, dan total_output_tokens.

Untuk memfilter kueri ke satu pemindaian, tambahkan kondisi berikut ke klausa WHERE:

AND JSON_VALUE(resource.labels, '$.datascan_id') = 'DATA_SCAN_ID'

Ganti DATA_SCAN_ID dengan ID pemindaian insight data Anda.

Contoh kueri diagram (diagram harian dan per jam)

SELECT
  timestamp,
  GREATEST(
    IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)
    - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),
    0)
  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)
    AS total_non_cached_input_tokens,
  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)
    AS total_cached_input_tokens,
  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)
  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)
    AS total_output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE
  log_id = 'dataplex.googleapis.com/data_scan'
  AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'
  AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL

Ganti PROJECT_ID dengan project ID Google Cloud Anda.

Contoh kueri per-scan-job

SELECT
  timestamp,
  JSON_VALUE(resource.labels, '$.datascan_id') AS data_scan_id,
  JSON_VALUE(resource.labels, '$.location') AS location,
  JSON_VALUE(json_payload, '$.jobId') AS job_id,
  JSON_VALUE(json_payload, '$.state') AS state,
  GREATEST(
    IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)
    - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),
    0)
  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)
    AS non_cached_input_tokens,
  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)
    AS cached_input_tokens,
  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)
  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)
    AS output_tokens
FROM `PROJECT_ID.global._Default._Default`
WHERE
  log_id = 'dataplex.googleapis.com/data_scan'
  AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'
  AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL
ORDER BY timestamp DESC
LIMIT 500

Ganti PROJECT_ID dengan project ID Google CloudAnda.

Membuat dasbor menggunakan Observability Analytics

Untuk memvisualisasikan dan melacak pemakaian token model dari waktu ke waktu, Anda dapat membuat dasbor Monitoring kustom menggunakan Observability Analytics.

Pendekatan ini menjalankan kueri SQL langsung terhadap log pemindaian insight data Anda di bucket log _Default. Fitur ini menawarkan beberapa manfaat:

  • Akurasi: Kueri menghitung jumlah token yang tepat langsung dari payload JSON entri log, bukan estimasi metrik gabungan.
  • Histori tugas terperinci: Selain diagram gabungan, Anda dapat memeriksa tugas pemindaian individual dalam tampilan tabel.
  • Tanpa biaya tambahan: Mengupgrade bucket log _Default ke Observability Analytics tidak dikenai biaya tambahan.

Opsi ini membuat dasbor Monitoring dengan tiga widget yang menjalankan kueri SQL pada log Anda:

  • Penggunaan token harian (diagram batang bertumpuk)
  • Penggunaan token per jam (diagram garis)
  • Penggunaan token per tugas pemindaian (tabel yang menampilkan 500 tugas terbaru)

Konfigurasi JSON dasbor berikut menggunakan variabel @__project_id bawaan (@__project_id.global._Default._Default), yang otomatis mengkueri project tempat Anda membuka dasbor. Anda tidak perlu mengedit placeholder project apa pun di JSON sebelum mengimpornya.

Konsol

  1. Di konsol Google Cloud , buka halaman Monitoring > Dashboards.

    Buka Dasbor

  2. Klik Buat Dasbor.

  3. Di toolbar, klik Settings, pilih JSON, lalu pilih JSON Editor.

  4. Ganti konten editor yang ada dengan definisi JSON dasbor yang disediakan di bagian berikutnya.

  5. Klik Terapkan perubahan. Dengan mengaktifkan simpan otomatis, Monitoring akan menyimpan dasbor sebagai Data Insights - Token Usage.

  6. Saat pertama kali membuka dasbor, setiap widget akan meminta Anda untuk mengonfirmasi penjalanan kueri SQL di mesin BigQuery untuk project Anda. Pastikan perintah mencantumkan project Anda, lalu klik Lanjutkan eksekusi di setiap widget.

  7. Pilih rentang waktu di toolbar dasbor (misalnya, Last 7 days).

gcloud

  1. Simpan definisi JSON dasbor ke file lokal bernama dashboard.json.
  2. Buat dasbor di Monitoring:

    gcloud monitoring dashboards create \
        --project=PROJECT_ID \
        --config-from-file=dashboard.json
    

    Ganti PROJECT_ID dengan project IDGoogle Cloud Anda.

  3. Buka halaman Dasbor di konsol Google Cloud , pilih Pemindaian Insight - Penggunaan Token, lalu klik Lanjutkan eksekusi di setiap widget untuk mengizinkan eksekusi kueri SQL.

Definisi JSON dasbor

Untuk membuat dasbor, perluas bagian berikut dan salin definisi JSON:

Definisi JSON

{
  "displayName": "Data Insights - Token Usage",
  "mosaicLayout": {
    "columns": 48,
    "tiles": [
      {
        "xPos": 0,
        "yPos": 0,
        "width": 24,
        "height": 16,
        "widget": {
          "title": "Daily token usage",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR",
              "displayHorizontal": false
            },
            "dataSets": [
              {
                "plotType": "STACKED_BAR",
                "targetAxis": "Y1",
                "breakdowns": [],
                "dimensions": [
                  {
                    "column": "timestamp",
                    "columnType": "TIMESTAMP",
                    "sortColumn": "timestamp",
                    "sortOrder": "SORT_ORDER_ASCENDING",
                    "timeBinSize": "86400s"
                  }
                ],
                "measures": [
                  {
                    "column": "total_non_cached_input_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  },
                  {
                    "column": "total_cached_input_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  },
                  {
                    "column": "total_output_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  }
                ],
                "timeSeriesQuery": {
                  "opsAnalyticsQuery": {
                    "sql": "SELECT\n  timestamp,\n  GREATEST(\n    IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n    - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n    0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n    AS total_non_cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n    AS total_cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n    AS total_output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n  log_id = 'dataplex.googleapis.com/data_scan'\n  AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n  AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL"
                  }
                }
              }
            ],
            "yAxis": {
              "label": "tokens",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "xPos": 24,
        "yPos": 0,
        "width": 24,
        "height": 16,
        "widget": {
          "title": "Hourly token usage",
          "xyChart": {
            "chartOptions": {
              "mode": "COLOR",
              "displayHorizontal": false
            },
            "dataSets": [
              {
                "plotType": "LINE",
                "targetAxis": "Y1",
                "breakdowns": [],
                "dimensions": [
                  {
                    "column": "timestamp",
                    "columnType": "TIMESTAMP",
                    "sortColumn": "timestamp",
                    "sortOrder": "SORT_ORDER_ASCENDING",
                    "timeBinSize": "3600s"
                  }
                ],
                "measures": [
                  {
                    "column": "total_non_cached_input_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  },
                  {
                    "column": "total_cached_input_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  },
                  {
                    "column": "total_output_tokens",
                    "aggregationFunction": {
                      "type": "sum",
                      "parameters": []
                    }
                  }
                ],
                "timeSeriesQuery": {
                  "opsAnalyticsQuery": {
                    "sql": "SELECT\n  timestamp,\n  GREATEST(\n    IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n    - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n    0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n    AS total_non_cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n    AS total_cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n    AS total_output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n  log_id = 'dataplex.googleapis.com/data_scan'\n  AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n  AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL"
                  }
                }
              }
            ],
            "yAxis": {
              "label": "tokens",
              "scale": "LINEAR"
            }
          }
        }
      },
      {
        "xPos": 0,
        "yPos": 16,
        "width": 48,
        "height": 20,
        "widget": {
          "title": "Token usage per scan job (latest 500)",
          "timeSeriesTable": {
            "columnSettings": [],
            "dataSets": [
              {
                "tableTemplate": "",
                "timeSeriesQuery": {
                  "opsAnalyticsQuery": {
                    "sql": "SELECT\n  timestamp,\n  JSON_VALUE(resource.labels, '$.datascan_id') AS data_scan_id,\n  JSON_VALUE(resource.labels, '$.location') AS location,\n  JSON_VALUE(json_payload, '$.jobId') AS job_id,\n  JSON_VALUE(json_payload, '$.state') AS state,\n  GREATEST(\n    IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') AS INT64), 0)\n    - IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0),\n    0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.toolUsePromptTokenCount') AS INT64), 0)\n    AS non_cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.cachedContentTokenCount') AS INT64), 0)\n    AS cached_input_tokens,\n  IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.candidatesTokenCount') AS INT64), 0)\n  + IFNULL(SAFE_CAST(JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.thoughtsTokenCount') AS INT64), 0)\n    AS output_tokens\nFROM `@__project_id.global._Default._Default`\nWHERE\n  log_id = 'dataplex.googleapis.com/data_scan'\n  AND JSON_VALUE(json_payload, '$.type') = 'DATA_DOCUMENTATION'\n  AND JSON_VALUE(json_payload, '$.dataDocumentation.billableTokenUsage.promptTokenCount') IS NOT NULL\nORDER BY timestamp DESC\nLIMIT 500"
                  }
                }
              }
            ],
            "metricVisualization": "NUMBER"
          }
        }
      }
    ]
  }
}

Batasan

  • Metrik token hanya lengkap jika log dataplex.googleapis.com/data_scan tidak dikecualikan atau dialihkan dari bucket log _Default.
  • Hanya tugas yang berhasil dengan metadata token yang dihitung. Entri log tanpa pemblokiran billableTokenUsage dikecualikan dari kueri dan metrik.
  • Gunakan dasbor ini untuk memantau tren penggunaan dan memperkirakan biaya, bukan untuk mencocokkan invoice resmi Penagihan Cloud.
  • Setiap Google Cloud project memerlukan penyiapan dasbornya sendiri.
  • Kueri SQL tidak menampilkan entri log yang ditulis sebelum Observability Analytics diaktifkan di bucket _Default.
  • Widget tabel per tugas menampilkan maksimal 500 tugas terbaru dalam rentang waktu yang dipilih. Untuk memeriksa tugas yang lebih lama, buat kueri Logs Explorer.

Langkah berikutnya