Monitora l'utilizzo dei token di insight sui dati

Questo documento spiega come monitorare il consumo di token per le scansioni di insight sui dati di Knowledge Catalog (in precedenza Dataplex Universal Catalog) utilizzando Cloud Logging e Cloud Monitoring. Il monitoraggio dell'utilizzo dei token per scansione e per job consente di comprendere le tendenze di utilizzo dei modelli e stimare i costi fatturati per il progetto.

Come funziona la registrazione dell'utilizzo dei token

Quando un job di scansione di insight sui dati (jsonPayload.type="DATA_DOCUMENTATION") viene completato con lo stato SUCCEEDED, Knowledge Catalog scrive una voce di log nel log dataplex.googleapis.com/data_scan. Questa voce di log contiene un blocco billableTokenUsage in jsonPayload.dataDocumentation che registra la suddivisione dei token per il job. Le altre voci di log per il job (ad esempio eventi CREATED, STARTED, FAILED o CANCELLED) non includono un blocco billableTokenUsage.

Dal blocco billableTokenUsage, puoi monitorare tre categorie di token principali per stimare la fatturazione:

Metrica Descrizione Formula (utilizzando i campi billableTokenUsage)
Token di input non memorizzati nella cache Token di input non forniti dalla memorizzazione nella cache del contesto, inclusi i token di prompt per l'utilizzo degli strumenti. max(promptTokenCount - cachedContentTokenCount, 0) + toolUsePromptTokenCount
Token di input memorizzati nella cache Token di input erogati dalla memorizzazione nella cache del contesto. I token memorizzati nella cache vengono monitorati separatamente perché non hanno un prezzo alla tariffa di input standard non memorizzata nella cache. cachedContentTokenCount
Token di output Token di risposta generati più token di ragionamento (pensiero). I token di ragionamento vengono fatturati come token di output. candidatesTokenCount + thoughtsTokenCount

Per i dettagli sui prezzi dei token, consulta i prezzi di Data Cloud Agent.

Campi token nella voce di log

Ogni voce di log dataplex.googleapis.com/data_scan include identificatori di risorse e job standard come resource.labels.datascan_id, resource.labels.location, jsonPayload.jobId e jsonPayload.state. Per le scansioni di insight sui dati riuscite, l'oggetto jsonPayload.dataDocumentation.billableTokenUsage contiene i seguenti campi:

Campo Descrizione
promptTokenCount Numero totale di token di prompt inviati al modello, inclusi i token memorizzati nella cache.
cachedContentTokenCount Parte dei token di prompt forniti dalla memorizzazione nella cache del contesto.
toolUsePromptTokenCount Token di prompt aggiunti dalle chiamate di strumenti (ad esempio contesto di schema, profilo o cronologia delle query).
candidatesTokenCount Token di risposta generati, esclusi i token di ragionamento.
thoughtsTokenCount Token di ragionamento (pensiero) generati dal modello.

L'esempio seguente mostra una voce di log dataplex.googleapis.com/data_scan per un job di scansione di insight sui dati riuscito:

{
  "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"
      }
    }
  }
}

In questo esempio, il job non ha utilizzato la memorizzazione nella cache del contesto, i token di ragionamento o le chiamate di strumenti. Di conseguenza, i token di input non memorizzati nella cache sono pari a 20,412, i token di input memorizzati nella cache sono pari a 0 e i token di output sono pari a 7,053.

Prima di iniziare

Prima di eseguire query sui log dei token di insight sui dati o creare una dashboard di monitoraggio, completa i seguenti prerequisiti.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per monitorare l'utilizzo dei token di insight sui dati, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Visualizza i log di scansione dei dati ed esegui query di Observability Analytics: Visualizzatore log (roles/logging.viewer)
  • Crea dashboard personalizzate in Monitoring: Monitoring Editor (roles/monitoring.editor)
  • Visualizza le dashboard personalizzate in Monitoring: Monitoring Viewer (roles/monitoring.viewer)

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Abilita API

Abilita le API Dataplex, Logging e Monitoring, se non sono già abilitate.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente hai già questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilita le API

Verifica la configurazione del routing dei log

Le scansioni di insight sui dati scrivono i log con il nome del log dataplex.googleapis.com/data_scan. Le configurazioni della dashboard in questo documento leggono questi log dal bucket di log _Default del progetto. Verifica che il routing dei log del progetto soddisfi le seguenti condizioni:

  • Il sink _Default è abilitato e instrada i log al bucket di log _Default.
  • Il sink _Default non ha un filtro di esclusione che elimina i log dataplex.googleapis.com/data_scan o DATA_DOCUMENTATION.

Console

  1. Nella Google Cloud console, vai alla pagina Logging > Router dei log.

    Vai al router dei log

  2. Individua il sink _Default e verifica che il suo stato sia Abilitato e che la destinazione sia il bucket _Default.

  3. Fai clic sul menu del sink () e seleziona Visualizza dettagli sink. Verifica che nessun filtro di esclusione corrisponda a dataplex.googleapis.com/data_scan o DATA_DOCUMENTATION.

gcloud

Descrivi il sink _Default per esaminarne lo stato, la destinazione e i filtri di esclusione:

gcloud logging sinks describe _Default --project=PROJECT_ID

Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto.

Verifica che disabled non sia impostato su true, che destination termini con /buckets/_Default e che nessuna voce in exclusions corrisponda a data_scan.

Abilita Observability Analytics nel bucket _Default

Per eseguire query SQL sui log di scansione di insight sui dati e alimentare la dashboard personalizzata di Observability Analytics, esegui l'upgrade del bucket di log _Default del progetto in modo che utilizzi Observability Analytics.

Prima di abilitare Observability Analytics nel bucket di log _Default, esamina le seguenti considerazioni:

  • L'upgrade di un bucket a Observability Analytics non può essere annullato e non comporta costi aggiuntivi.
  • Non è necessario creare un set di dati BigQuery collegato.
  • Le query SQL di Observability Analytics restituiscono solo i log che arrivano dopo il completamento dell'upgrade. I log precedenti rimangono disponibili in Esplora log, ma non vengono visualizzati nei risultati delle query SQL. Dopo aver eseguito l'upgrade del bucket, esegui almeno una scansione di insight sui dati in modo che la dashboard abbia dati da visualizzare.

Console

  1. Nella Google Cloud console, vai alla pagina Logging > Archiviazione log.

    Vai ad Archiviazione log

  2. Individua la riga del bucket _Default e controlla la colonna Observability Analytics disponibile:

    • Se la colonna mostra Apri, Observability Analytics è già abilitato.
    • Se la colonna mostra Esegui l'upgrade, fai clic su Esegui l'upgrade e conferma l' upgrade.
  3. Attendi alcuni minuti finché lo stato della colonna non cambia in Apri.

gcloud

  1. Esegui l'upgrade del bucket di log _Default per abilitare Observability Analytics:

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

    Sostituisci PROJECT_ID con l' Google Cloud ID progetto.

  2. Dopo alcuni minuti, verifica che l'upgrade sia completato:

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

    Verifica che l'output includa analyticsEnabled: true.

Visualizza l'utilizzo dei token per job in Esplora log

Per esaminare l'utilizzo dei token dei singoli job di scansione di insight sui dati, utilizza Esplora log o Google Cloud CLI. Per le aggregazioni orarie o giornaliere nel progetto, puoi creare una dashboard utilizzando Observability Analytics.

Console

  1. Nella Google Cloud console, vai alla pagina Logging > Esplora log.

    Vai a Esplora log

  2. Se l'editor di query non è visibile, attiva Mostra query.

  3. Inserisci la seguente query nell'editor di query:

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

    (Facoltativo) Per filtrare una scansione o un'esecuzione di job specifica, aggiungi una delle seguenti righe alla query:

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

    Sostituisci quanto segue:

    • DATA_SCAN_ID: l'ID della scansione di insight sui dati.
    • JOB_ID: l'ID di un'esecuzione di job di scansione specifica.
  4. Seleziona un intervallo di tempo (ad esempio, Ultime 24 ore), quindi fai clic su Esegui query.

  5. Espandi una voce di log e apri jsonPayload > dataDocumentation > billableTokenUsage per esaminare i conteggi dei token per quel job.

gcloud

Leggi le voci di log di scansione di insight sui dati recenti e formatta i campi dei token come tabella:

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)'

Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto.

Una colonna vuota nella tabella di output indica 0 token per quel campo. Per trasformare questi campi in metriche, utilizza le formule descritte in Come funziona la registrazione dell'utilizzo dei token.

Esegui query sull'utilizzo dei token utilizzando Observability Analytics

Puoi anche eseguire o personalizzare le query SQL dei widget direttamente nella pagina Analisi dei log della Google Cloud console.

I grafici giornalieri e orari condividono la stessa query del grafico, che restituisce una riga per ogni job di scansione. Ogni widget del grafico raggruppa e somma le righe per giorno (timeBinSize: 86400s) o per ora (timeBinSize: 3600s). Se modifichi una query del grafico e la incolli di nuovo in un widget della dashboard, conserva gli alias delle colonne timestamp, total_non_cached_input_tokens, total_cached_input_tokens e total_output_tokens.

Per filtrare una query in modo da includere una sola scansione, aggiungi la seguente condizione alla clausola WHERE:

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

Sostituisci DATA_SCAN_ID con l'ID della scansione di approfondimenti sui dati.

Query di esempio del grafico (grafici giornalieri e orari)

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

Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto.

Query di esempio per job di scansione

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

Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto.

Crea una dashboard utilizzando Observability Analytics

Per visualizzare e monitorare l'utilizzo dei token del modello nel tempo, puoi creare una dashboard di Monitoring personalizzata utilizzando Observability Analytics.

Questo approccio esegue query SQL direttamente sui log di scansione degli insight sui dati nel bucket di log _Default. Offre diversi vantaggi:

  • Precisione: le query calcolano i conteggi esatti dei token direttamente dai payload JSON delle voci di log anziché dalle stime delle metriche aggregate.
  • Cronologia dei job granulare: oltre ai grafici aggregati, puoi esaminare i singoli job di scansione in una visualizzazione tabellare.
  • Nessun costo aggiuntivo: l'upgrade del bucket di log _Default a Observability Analytics non comporta costi aggiuntivi.

Questa opzione crea una dashboard di Monitoring con tre widget che eseguono query SQL sui log:

  • Utilizzo dei token giornaliero (grafico a barre in pila)
  • Utilizzo dei token orario (grafico a linee)
  • Utilizzo dei token per job di scansione (tabella che mostra gli ultimi 500 job)

La seguente configurazione JSON della dashboard utilizza la variabile integrata @__project_id (@__project_id.global._Default._Default), che esegue automaticamente query sul progetto in cui apri la dashboard. Non è necessario modificare i segnaposto del progetto nel JSON prima di importarlo.

Console

  1. Nella Google Cloud console, vai alla pagina Monitoraggio > Dashboard.

    Vai a Dashboard

  2. Fai clic su Crea dashboard.

  3. Nella barra degli strumenti, fai clic su Impostazioni, seleziona JSON e poi seleziona Editor JSON.

  4. Sostituisci i contenuti esistenti dell'editor con la definizione JSON della dashboard fornita nella sezione successiva.

  5. Fai clic su Applica modifiche. Con il salvataggio automatico abilitato, Monitoring salva la dashboard come Data Insights - Token Usage.

  6. La prima volta che apri la dashboard, ogni widget ti chiede di confermare l'esecuzione della query SQL sul motore BigQuery per il tuo progetto. Verifica che il prompt elenchi il tuo progetto, quindi fai clic su Continua esecuzione in ogni widget.

  7. Seleziona un intervallo di tempo nella barra degli strumenti della dashboard (ad esempio, Ultimi 7 giorni).

gcloud

  1. Salva la definizione JSON della dashboard in un file locale denominato dashboard.json.
  2. Crea la dashboard in Monitoring:

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

    Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto.

  3. Apri la pagina Dashboard nella console Google Cloud , seleziona Scansione approfondimenti - Utilizzo dei token e fai clic su Continua esecuzione in ogni widget per autorizzare l'esecuzione della query SQL.

Definizione JSON della dashboard

Per creare la dashboard, espandi la sezione seguente e copia la definizione JSON:

Definizione 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"
          }
        }
      }
    ]
  }
}

Limitazioni

  • Le metriche dei token sono complete solo se i log dataplex.googleapis.com/data_scan non vengono esclusi o instradati dal bucket di log _Default.
  • Vengono conteggiati solo i job riusciti con i metadati dei token. Le voci di log senza un blocco billableTokenUsage vengono escluse dalle query e dalle metriche.
  • Utilizza queste dashboard per monitorare le tendenze di utilizzo e stimare i costi, non per riconciliare una fattura ufficiale di fatturazione Cloud.
  • Ogni Google Cloud progetto richiede la propria configurazione della dashboard.
  • Le query SQL non restituiscono le voci di log scritte prima dell'abilitazione di Observability Analytics nel bucket _Default.
  • Il widget della tabella per job mostra al massimo i 500 job più recenti nell'intervallo di tempo selezionato. Per esaminare i job precedenti, esegui query su Esplora log.

Passaggi successivi