Supervisa el uso de tokens de estadísticas de datos

En este documento, se explica cómo supervisar el consumo de tokens para los análisis de estadísticas de datos de Knowledge Catalog (antes Dataplex Universal Catalog) con Cloud Logging y Cloud Monitoring. El seguimiento del uso de tokens por análisis y por trabajo te permite comprender las tendencias de uso del modelo y estimar los costos facturados en tu proyecto.

Cómo funciona el registro del uso de tokens

Cuando un trabajo de análisis de estadísticas de datos (jsonPayload.type="DATA_DOCUMENTATION") se completa con un estado SUCCEEDED, Knowledge Catalog escribe una entrada de registro en el registro dataplex.googleapis.com/data_scan. Esta entrada de registro contiene un bloque billableTokenUsage en jsonPayload.dataDocumentation que registra el desglose de tokens para el trabajo. Otras entradas de registro para el trabajo (como eventos CREATED, STARTED, FAILED o CANCELLED) no incluyen un bloque billableTokenUsage.

En el bloque billableTokenUsage, puedes hacer un seguimiento de tres categorías principales de tokens para estimar la facturación:

Métrica Descripción Fórmula (con campos billableTokenUsage)
Tokens de entrada no almacenados en caché Tokens de entrada que no se entregaron desde la caché de contexto, incluidos los tokens de instrucciones de uso de herramientas. max(promptTokenCount - cachedContentTokenCount, 0) + toolUsePromptTokenCount
Tokens de entrada almacenados en caché Tokens de entrada entregados desde la caché de contexto. Los tokens almacenados en caché se registran por separado porque no tienen el precio de la tarifa de entrada estándar no almacenada en caché. cachedContentTokenCount
Tokens de salida Tokens de respuesta generados más tokens de razonamiento (pensamiento). Los tokens de razonamiento se facturan como tokens de salida. candidatesTokenCount + thoughtsTokenCount

Para obtener detalles sobre los precios de los tokens, consulta Precios de Data Cloud Agent.

Campos de tokens en la entrada de registro

Cada entrada de registro dataplex.googleapis.com/data_scan incluye identificadores de recursos y trabajos estándar, como resource.labels.datascan_id, resource.labels.location, jsonPayload.jobId y jsonPayload.state. Para los análisis de estadísticas de datos correctos, el objeto jsonPayload.dataDocumentation.billableTokenUsage contiene los siguientes campos:

Campo Descripción
promptTokenCount Tokens de instrucción totales enviados al modelo, incluidos los tokens almacenados en caché.
cachedContentTokenCount Porción de los tokens de instrucción entregados desde la caché de contexto.
toolUsePromptTokenCount Tokens de instrucción agregados por llamadas a herramientas (como el esquema, el perfil o el contexto del historial de consultas).
candidatesTokenCount Tokens de respuesta generados, excluidos los tokens de razonamiento.
thoughtsTokenCount Tokens de razonamiento (pensamiento) generados por el modelo.

En el siguiente ejemplo, se muestra una entrada de registro dataplex.googleapis.com/data_scan para un trabajo de análisis de estadísticas de datos correcto:

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

En este ejemplo, el trabajo no usó almacenamiento en caché de contexto, tokens de razonamiento ni llamadas a herramientas. Como resultado, los tokens de entrada no almacenados en caché son iguales a 20,412, los tokens de entrada almacenados en caché son iguales a 0 y los tokens de salida son iguales a 7,053.

Antes de comenzar

Antes de consultar los registros de tokens de estadísticas de datos o crear un panel de supervisión, completa los siguientes requisitos previos.

Roles obligatorios

Para obtener los permisos que necesitas para supervisar el uso de tokens de estadísticas de datos, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Habilita las APIs

Habilita las APIs de Dataplex, Logging y Monitoring si aún no están habilitadas.

Roles necesarios para habilitar las APIs

Para habilitar las APIs, necesitas el permiso serviceusage.services.enable. Si creaste el proyecto, es probable que ya tengas este permiso a través del rol de propietario (roles/owner). De lo contrario, puedes obtener este permiso a través del rol de administrador de Service Usage (roles/serviceusage.serviceUsageAdmin). Obtén información para otorgar roles.

Habilitar las API

Verifica la configuración del enrutamiento de registros

Los análisis de estadísticas de datos escriben registros con el nombre de registro dataplex.googleapis.com/data_scan. Las configuraciones del panel de este documento leen esos registros del bucket de registros _Default de tu proyecto. Verifica que el enrutamiento de registros de tu proyecto cumpla con las siguientes condiciones:

  • El receptor _Default está habilitado y enruta los registros al bucket de registros _Default.
  • El receptor _Default no tiene un filtro de exclusión que quite los registros dataplex.googleapis.com/data_scan o DATA_DOCUMENTATION.

Console

  1. En la Google Cloud consola de, ve a la página Logging > Enrutador de registros.

    Ir a Enrutador de registros

  2. Busca el receptor _Default y verifica que su estado sea Habilitado y que su destino sea el bucket _Default.

  3. Haz clic en el menú del receptor () y selecciona Ver detalles del receptor. Verifica que ningún filtro de exclusión coincida con dataplex.googleapis.com/data_scan o DATA_DOCUMENTATION.

gcloud

Describe el receptor _Default para inspeccionar su estado, destino y filtros de exclusión:

gcloud logging sinks describe _Default --project=PROJECT_ID

Reemplaza PROJECT_ID por el ID del Google Cloud proyecto.

Verifica que disabled no esté configurado como true, que destination termine con /buckets/_Default y que no haya ninguna entrada en exclusions que coincida con data_scan.

Habilita Estadísticas de observabilidad en el bucket _Default

Para ejecutar consultas en SQL en tus registros de análisis de estadísticas de datos y potenciar el panel personalizado de Estadísticas de observabilidad, actualiza el bucket de registros _Default de tu proyecto para usar Estadísticas de observabilidad.

Antes de habilitar Estadísticas de observabilidad en el bucket de registros _Default, revisa las siguientes consideraciones:

  • No se puede deshacer la actualización de un bucket a Estadísticas de observabilidad, y no genera cargos adicionales.
  • No es necesario crear un conjunto de datos vinculado de BigQuery.
  • Las consultas en SQL de Estadísticas de observabilidad solo muestran los registros que llegan después de que se completa la actualización. Los registros más antiguos siguen disponibles en el Explorador de registros, pero no aparecen en los resultados de las consulta en SQL. Después de actualizar el bucket, ejecuta al menos un análisis de estadísticas de datos para que tu panel tenga datos para mostrar.

Console

  1. En la Google Cloud consola de, ve a la página Logging > Almacenamiento de registros :

    Ir a Almacenamiento de registros

  2. Busca la fila del bucket _Default y verifica la columna Estadísticas de observabilidad disponibles:

    • Si la columna muestra Abrir, Estadísticas de observabilidad ya está habilitado.
    • Si la columna muestra Actualizar, haz clic en Actualizar y confirma la actualización.
  3. Espera unos minutos hasta que el estado de la columna cambie a Abrir.

gcloud

  1. Actualiza el bucket de registros _Default para habilitar Estadísticas de observabilidad:

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

    Reemplaza PROJECT_ID por el ID del Google Cloud proyecto de.

  2. Después de unos minutos, verifica que se haya completado la actualización:

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

    Confirma que el resultado incluya analyticsEnabled: true.

Visualiza el uso de tokens por trabajo en el Explorador de registros

Para inspeccionar el consumo de tokens de trabajos de análisis de estadísticas de datos individuales, usa el Explorador de registros o Google Cloud CLI. Para las agregaciones por hora o por día en tu proyecto, puedes crear un panel con Estadísticas de observabilidad.

Console

  1. En la Google Cloud consola, ve a la página Logging > Explorador de registros.

    Ir al Explorador de registros

  2. Si el editor de consultas no está visible, activa Mostrar consulta.

  3. Ingresa la siguiente consulta en el editor de consultas:

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

    Opcional: Para filtrar un análisis o una ejecución de trabajo específicos, agrega una de las siguientes líneas a la consulta:

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

    Reemplaza lo siguiente:

    • DATA_SCAN_ID: Es el ID del análisis de estadísticas de datos.
    • JOB_ID: Es el ID de una ejecución de trabajo de análisis específica.
  4. Selecciona un intervalo de tiempo (por ejemplo, Últimas 24 horas) y, luego, haz clic en Ejecutar consulta.

  5. Expande una entrada de registro y abre jsonPayload > dataDocumentation > billableTokenUsage para inspeccionar los recuentos de tokens de ese trabajo.

gcloud

Lee las entradas de registro de análisis de estadísticas de datos recientes y da formato a los campos de tokens como una tabla:

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

Reemplaza PROJECT_ID por el ID del Google Cloud proyecto.

Una columna vacía en la tabla de salida indica 0 tokens para ese campo. Para convertir estos campos en métricas, usa las fórmulas que se indican en Cómo funciona el registro del uso de tokens.

Consulta el uso de tokens con Estadísticas de observabilidad

También puedes ejecutar o personalizar las consultas en SQL de los widgets directamente en la página Análisis de registros de la Google Cloud consola.

Los gráficos diarios y por hora comparten la misma consulta de gráfico, que muestra una fila por trabajo de análisis. Cada widget de gráfico agrupa y suma las filas por día (timeBinSize: 86400s) o por hora (timeBinSize: 3600s). Si editas una consulta de gráfico y la vuelves a pegar en un widget del panel, conserva los alias de columna timestamp, total_non_cached_input_tokens, total_cached_input_tokens y total_output_tokens.

Para filtrar una consulta a un solo análisis, agrega la siguiente condición a la cláusula WHERE:

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

Reemplaza DATA_SCAN_ID por el ID de tu análisis de estadísticas de datos.

Consulta de gráfico de muestra (gráficos diarios y por hora)

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

Reemplaza PROJECT_ID por el ID del Google Cloud proyecto.

Consulta de muestra por trabajo de análisis

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

Reemplaza PROJECT_ID por el ID del Google Cloud proyecto.

Crea un panel con Estadísticas de observabilidad

Para visualizar y hacer un seguimiento del consumo de tokens del modelo a lo largo del tiempo, puedes crear un panel personalizado de Monitoring con Estadísticas de observabilidad.

Este enfoque ejecuta consultas en SQL directamente en tus registros de análisis de estadísticas de datos en el bucket de registros _Default. Ofrece varios beneficios:

  • Precisión: Las consultas calculan recuentos de tokens exactos directamente desde las cargas útiles de JSON de las entradas de registro en lugar de estimaciones de métricas agregadas.
  • Historial de trabajos detallado: Además de los gráficos agregados, puedes inspeccionar trabajos de análisis individuales en una vista tabular.
  • Sin costo adicional: La actualización del bucket de registros _Default a Estadísticas de observabilidad no genera cargos adicionales.

Esta opción crea un panel de Monitoring con tres widgets que ejecutan consultas en SQL en tus registros:

  • Uso diario de tokens (gráfico de barras apiladas)
  • Uso de tokens por hora (gráfico de líneas)
  • Uso de tokens por trabajo de análisis (tabla que muestra los 500 trabajos más recientes)

La siguiente configuración de JSON del panel usa la variable integrada @__project_id variable (@__project_id.global._Default._Default), que consulta automáticamente el proyecto en el que abres el panel. No es necesario editar ningún marcador de posición del proyecto en el JSON antes de importarlo.

Console

  1. En la Google Cloud consola, ve a la página Monitoring > Paneles.

    Ir a Paneles

  2. Haz clic en Crear panel de control.

  3. En la barra de herramientas, haz clic en Configuración, selecciona JSON y, luego, Editor de JSON.

  4. Reemplaza el contenido existente del editor por la definición de JSON del panel que se proporciona en la siguiente sección.

  5. Haz clic en Aplicar cambios. Con el guardado automático habilitado, Monitoring guarda el panel como Data Insights - Token Usage.

  6. La primera vez que abras el panel, cada widget te solicitará que confirmes la ejecución de la consulta en SQL en el motor de BigQuery para tu proyecto. Verifica que la solicitud muestre tu proyecto y, luego, haz clic en Continuar ejecución en cada widget.

  7. Selecciona un período en la barra de herramientas del panel (por ejemplo, Últimos 7 días).

gcloud

  1. Guarda la definición de JSON del panel en un archivo local llamado dashboard.json.
  2. Crea el panel en Monitoring:

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

    Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud .

  3. Abre la página Paneles en la Google Cloud consola de, selecciona Insights Scan - Token Usage y haz clic en Continuar ejecución en cada widget para autorizar la ejecución de la consulta en SQL.

Definición de JSON del panel

Para crear el panel, expande la siguiente sección y copia la definición de JSON:

Definición de 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"
          }
        }
      }
    ]
  }
}

Limitaciones

  • Las métricas de tokens se completan solo si los registros dataplex.googleapis.com/data_scan no se excluyen ni se enrutan fuera del bucket de registros _Default.
  • Solo se cuentan los trabajos correctos con metadatos de tokens. Las entradas de registro sin un bloque billableTokenUsage se excluyen de las consultas y las métricas.
  • Usa estos paneles para supervisar las tendencias de uso y estimar los costos, no para conciliar una factura oficial de Facturación de Cloud.
  • Cada Google Cloud proyecto requiere su propia configuración del panel.
  • Las consultas en SQL no muestran las entradas de registro escritas antes de que se habilitara Estadísticas de observabilidad en el bucket _Default.
  • El widget de tabla por trabajo muestra, como máximo, los 500 trabajos más recientes dentro del intervalo de tiempo seleccionado. Para inspeccionar trabajos más antiguos, consulta el Explorador de registros.

¿Qué sigue?