במאמר הזה מוסבר איך לעקוב אחרי צריכת הטוקנים בסריקות של תובנות מנתונים ב-Knowledge Catalog (לשעבר Dataplex Universal Catalog) באמצעות Cloud Logging ו-Cloud Monitoring. מעקב אחרי השימוש בטוקנים בכל סריקה ובכל משימה מאפשר לכם להבין את מגמות השימוש במודל ולהעריך את עלויות החיוב בפרויקט.
איך פועל רישום ביומן של השימוש בטוקנים
כשמשימת סריקה של תובנות מנתונים (jsonPayload.type="DATA_DOCUMENTATION") מסתיימת במצב SUCCEEDED, Knowledge Catalog כותב רשומת יומן ביומן dataplex.googleapis.com/data_scan. הרשומה הזו ביומן מכילה בלוק billableTokenUsage בקטע jsonPayload.dataDocumentation, שמתעד את פירוט הטוקנים של המשימה. רשומות אחרות ביומן של המשימה (כמו אירועים מסוג CREATED, STARTED, FAILED או CANCELLED) לא כוללות בלוק billableTokenUsage.
בבלוק billableTokenUsage אפשר לעקוב אחרי שלוש קטגוריות עיקריות של טוקנים כדי להעריך את החיוב:
| מדד | תיאור | נוסחה (באמצעות שדות של billableTokenUsage) |
|---|---|---|
| טוקנים של קלט שלא נשמרו במטמון | טוקנים של קלט שלא סופקו משמירת ההקשר במטמון, כולל טוקנים של הנחיות לשימוש בכלים. | max(promptTokenCount - cachedContentTokenCount, 0) + toolUsePromptTokenCount |
| טוקנים של קלט במטמון | טוקנים של קלט שסופקו משמירת ההקשר במטמון. הטוקנים במטמון נספרים בנפרד כי המחיר שלהם שונה מהמחיר הרגיל של טוקנים של קלט שלא נשמרו במטמון. | cachedContentTokenCount |
| טוקנים של פלט | טוקנים של תשובות שנוצרו וטוקנים של הסקת מסקנות (חשיבה). החיוב על טוקנים של חשיבה זהה לחיוב על טוקנים של פלט. | candidatesTokenCount + thoughtsTokenCount |
לפרטים על תמחור טוקנים, ראו תמחור של סוכני Data Cloud.
שדות של טוקנים ברשומה ביומן
כל רשומה ביומן של dataplex.googleapis.com/data_scan כוללת מזהים סטנדרטיים של משאבים ומשימות, כמו resource.labels.datascan_id, resource.labels.location, jsonPayload.jobId ו-jsonPayload.state. בסריקות מוצלחות של תובנות מנתונים, האובייקט jsonPayload.dataDocumentation.billableTokenUsage מכיל את השדות הבאים:
| שדה | תיאור |
|---|---|
promptTokenCount |
המספר הכולל של טוקנים בהנחיות שנשלחו למודל, כולל טוקנים שנשמרו במטמון. |
cachedContentTokenCount |
חלק מהטוקנים של ההנחיות שסופקו מ<b>שמירת הקשר במטמון</b>. |
toolUsePromptTokenCount |
טוקנים של הנחיות שנוספו על ידי קריאות לפונקציות (כמו סכימה, פרופיל או הקשר של היסטוריית שאילתות). |
candidatesTokenCount |
טוקנים של תשובות שנוצרו, לא כולל טוקנים של חשיבה. |
thoughtsTokenCount |
טוקנים של חשיבה שנוצרו על ידי המודל. |
בדוגמה הבאה מוצגת רשומה ביומן של dataplex.googleapis.com/data_scan למשימת סריקה מוצלחת של תובנות מנתונים:
{
"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"
}
}
}
}
בדוגמה הזו, המשימה לא השתמשה בשמירת הקשר במטמון, בטוקנים של חשיבה או בקריאות לפונקציות. כתוצאה מכך, טוקנים של קלט שלא נשמרו במטמון שווים ל-20,412, טוקנים של קלט שנשמרו במטמון שווים ל-0 וטוקנים של פלט שווים ל-7,053.
לפני שמתחילים
לפני ששולחים שאילתות ליומני האסימונים של תובנות מנתונים או יוצרים מרכז בקרה למעקב, צריך לבצע את הפעולות הבאות.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות למעקב אחרי השימוש בטוקנים של תובנות מנתונים, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
-
צפייה ביומני סריקת הנתונים והרצת שאילתות של Observability Analytics:
מציג היומנים (
roles/logging.viewer) -
יצירת לוחות בקרה בהתאמה אישית ב-Monitoring:
עריכת Monitoring (
roles/monitoring.editor) -
צפייה במרכזי בקרה בהתאמה אישית ב-Monitoring:
צפייה ב-Monitoring (
roles/monitoring.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הפעלת ממשקי ה-API
מפעילים את Dataplex, Logging ו-Monitoring APIs, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים
אימות ההגדרות של ניתוב היומנים
סריקות של תובנות מנתונים כותבות יומנים בשם היומן dataplex.googleapis.com/data_scan. הגדרות מרכז הבקרה במסמך הזה קוראות את היומנים האלה מקטגוריית היומנים _Default של הפרויקט. מוודאים שניתוב היומנים בפרויקט עומד בתנאים הבאים:
- הכיור
_Defaultמופעל ומנתב את היומנים לקטגוריית היומנים_Default. לכיור
_Defaultאין מסנן החרגה שמשמיט יומניdataplex.googleapis.com/data_scanאוDATA_DOCUMENTATION.
המסוף
במסוף Google Cloud , נכנסים לדף Logging > Log Router.
מאתרים את ה-sink של
_Defaultומוודאים שהסטטוס שלו הוא Enabled והיעד שלו הוא הקטגוריה של_Default.לוחצים על תפריט הכיור () ובוחרים באפשרות View sink details. מוודאים שאף מסנן החרגה לא תואם ל-
dataplex.googleapis.com/data_scanאו ל-DATA_DOCUMENTATION.
gcloud
מתארים את אובייקט ה-sink _Default כדי לבדוק את הסטטוס, היעד ומסנני ההחרגה שלו:
gcloud logging sinks describe _Default --project=PROJECT_ID
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.
מוודאים שהערך של disabled הוא לא true, שהערך של destination מסתיים ב-/buckets/_Default, ושאין רשומה ב-exclusions שתואמת ל-data_scan.
הפעלת Observability Analytics בקטגוריה _Default
כדי להריץ שאילתות SQL על יומני הסריקה של התובנות מהנתונים ולהפעיל את מרכז הבקרה בהתאמה אישית של Observability Analytics, שדרגו את מאגר היומנים _Default של הפרויקט כך שישתמש ב-Observability Analytics.
לפני שמפעילים את Observability Analytics בדלי היומנים _Default, חשוב לקרוא את השיקולים הבאים:
- אי אפשר לבטל את השדרוג של קטגוריה ל-Observability Analytics, ואין עלות נוספת.
- אתם לא צריכים ליצור קבוצת נתונים מקושרת ב-BigQuery.
שאילתות SQL של Observability Analytics מחזירות רק יומנים שמגיעים אחרי שהשדרוג מסתיים. יומנים ישנים יותר עדיין זמינים ב-Logs Explorer, אבל לא מופיעים בתוצאות של שאילתות SQL. אחרי שמשדרגים את הקטגוריה, מריצים לפחות סריקה אחת של תובנות מנתונים כדי שיהיו נתונים להצגה בלוח הבקרה.
המסוף
במסוף Google Cloud , נכנסים לדף Logging > Logs Storage.
מאתרים את השורה של הקטגוריה
_Defaultובודקים את העמודה Observability Analytics available:- אם בעמודה מופיע Open, סימן ש-Observability Analytics כבר מופעל.
- אם בעמודה מופיע Upgrade, לוחצים על Upgrade ומאשרים את השדרוג.
ממתינים כמה דקות עד שהסטטוס בעמודה משתנה לפתוח.
gcloud
כדי להפעיל את Observability Analytics, משדרגים את קטגוריית היומנים
_Default:gcloud logging buckets update _Default \ --location=global --enable-analytics --project=PROJECT_IDמחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud .
אחרי כמה דקות, מוודאים שהשדרוג הושלם:
gcloud logging buckets describe _Default \ --location=global --project=PROJECT_IDמוודאים שהפלט כולל את
analyticsEnabled: true.
צפייה בשימוש בטוקנים לכל משימה ב-Logs Explorer
כדי לבדוק את צריכת האסימונים של משימות סריקה ספציפיות של תובנות מנתונים, אתם יכולים להשתמש ב-Logs Explorer או ב-Google Cloud CLI. כדי לצבור נתונים לפי שעה או לפי יום בפרויקט, אתם יכולים ליצור מרכז בקרה באמצעות Observability Analytics.
המסוף
במסוף Google Cloud , נכנסים לדף Logging > Logs Explorer.
אם עורך השאילתות לא מוצג, מפעילים את האפשרות Show query.
מזינים את השאילתה הבאה בעורך השאילתות:
log_id("dataplex.googleapis.com/data_scan") jsonPayload.type="DATA_DOCUMENTATION" jsonPayload.dataDocumentation.billableTokenUsage.promptTokenCount:*אופציונלי: כדי לסנן לפי סריקה או הפעלת משימה ספציפית, מוסיפים את אחת מהשורות הבאות לשאילתה:
resource.labels.datascan_id="DATA_SCAN_ID" jsonPayload.jobId="JOB_ID"מחליפים את מה שכתוב בשדות הבאים:
- DATA_SCAN_ID: המזהה של סריקת התובנות מהנתונים.
- JOB_ID: המזהה של הרצה ספציפית של משימת סריקה.
בוחרים טווח תאריכים (לדוגמה, Last 24 hours) ולוחצים על Run query.
מרחיבים רשומה ביומן ופותחים את
jsonPayload>dataDocumentation>billableTokenUsageכדי לבדוק את מספר האסימונים של המשימה הזו.
gcloud
קוראים את הרשומות האחרונות ביומן הסריקה של התובנות מהנתונים ומעצבים את שדות הטוקנים כטבלה:
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)'
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.
עמודה ריקה בטבלת הפלט מציינת 0 טוקנים בשדה הזה.
כדי להפוך את השדות האלה למדדים, משתמשים בנוסחאות שמפורטות בקטע איך פועל רישום ביומן של השימוש באסימונים.
שאילתה על השימוש בטוקנים באמצעות Observability Analytics
אפשר גם להריץ או להתאים אישית את שאילתות ה-SQL של הווידג'ט ישירות בדף Log Analytics במסוףGoogle Cloud .
התרשימים היומיים והשעתיים משתפים את אותה שאילתת תרשים, שמחזירה שורה אחת לכל משימת סריקה. כל ווידג'ט של תרשים מקבץ ומסכם את השורות לפי יום (timeBinSize: 86400s) או לפי שעה (timeBinSize: 3600s). אם אתם עורכים שאילתה של תרשים ומדביקים אותה בחזרה בווידג'ט של מרכז הבקרה, חשוב לשמור על הכינויים של העמודות timestamp, total_non_cached_input_tokens, total_cached_input_tokens ו-total_output_tokens.
כדי לסנן שאילתה לסריקה אחת, מוסיפים את התנאי הבא לסעיף WHERE:
AND JSON_VALUE(resource.labels, '$.datascan_id') = 'DATA_SCAN_ID'
מחליפים את DATA_SCAN_ID במזהה של סריקת התובנות מהנתונים.
שאילתה לדוגמה של תרשים (תרשימים יומיים ושעתיים)
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
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.
שאילתה לדוגמה לכל משימת סריקה
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
מחליפים את PROJECT_ID במזהה הפרויקט ב- Google Cloud.
יצירת מרכז בקרה באמצעות Observability Analytics
כדי להציג באופן חזותי ולעקוב אחרי צריכת הטוקנים של המודל לאורך זמן, אתם יכולים ליצור לוח בקרה מותאם אישית ב-Monitoring באמצעות Observability Analytics.
בגישה הזו, מריצים שאילתות SQL ישירות על יומני הסריקה של תובנות הנתונים בקטגוריית היומנים _Default. יש לה כמה יתרונות:
- דיוק: השאילתות מחשבות את מספר הטוקנים המדויק ישירות ממטעני הייעודי (payload) של JSON ברשומת היומן, ולא מהערכות של מדדים נצברים.
- היסטוריית משימות מפורטת: בנוסף לתרשימים המצטברים, אתם יכולים לבדוק משימות סריקה ספציפיות בתצוגת טבלה.
- ללא עלות נוספת: שדרוג של קטגוריית היומנים
_Defaultל-Observability Analytics לא כרוך בחיובים נוספים.
באפשרות הזו נוצר לוח בקרה של Monitoring עם שלושה ווידג'טים שמריצים שאילתות SQL ביומנים:
- שימוש יומי בטוקנים (תרשים עמודות אופקי מוערם)
- שימוש שעתי בטוקנים (תרשים קו)
- השימוש בטוקנים לכל משימת סריקה (טבלה שבה מוצגות 500 המשימות האחרונות)
בהגדרות ה-JSON הבאות של מרכז הבקרה נעשה שימוש במשתנה המובנה @__project_id (@__project_id.global._Default._Default), שבאמצעותו מתבצעת באופן אוטומטי שאילתה לפרויקט שבו פותחים את מרכז הבקרה. לא צריך לערוך את הפלייסהולדרים של הפרויקט בקובץ ה-JSON לפני הייבוא.
המסוף
במסוף Google Cloud , נכנסים לדף Monitoring > Dashboards.
לוחצים על Create dashboard.
בסרגל הכלים, לוחצים על Settings, בוחרים באפשרות JSON ואז באפשרות JSON Editor.
מחליפים את התוכן הקיים של העורך בהגדרת ה-JSON של מרכז הבקרה שמפורטת בקטע הבא.
לוחצים על החלת השינויים. כשהשמירה האוטומטית מופעלת, לוח הבקרה נשמר ב-Monitoring בשם
Data Insights - Token Usage.בפעם הראשונה שפותחים את לוח הבקרה, כל ווידג'ט מבקש לאשר את הרצת שאילתת ה-SQL במנוע BigQuery של הפרויקט. מוודאים שהפרויקט מופיע בהודעה, ולוחצים על Continue execution בכל ווידג'ט.
בסרגל הכלים של לוח הבקרה, בוחרים טווח תאריכים (לדוגמה, Last 7 days).
gcloud
- שומרים את הגדרת ה-JSON של מרכז הבקרה בקובץ מקומי בשם
dashboard.json. יוצרים את לוח הבקרה ב-Monitoring:
gcloud monitoring dashboards create \ --project=PROJECT_ID \ --config-from-file=dashboard.jsonמחליפים את PROJECT_ID במזהה הפרויקט ב-Google Cloud .
פותחים את הדף Dashboards במסוף Google Cloud , בוחרים באפשרות Insights Scan - Token Usage ולוחצים על Continue execution בכל ווידג'ט כדי לאשר את הרצת שאילתת ה-SQL.
הגדרת JSON של מרכז הבקרה
כדי ליצור את לוח הבקרה, מרחיבים את הקטע הבא ומעתיקים את הגדרת ה-JSON:
הגדרה של 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"
}
}
}
]
}
}
מגבלות
- מדדי הטוקנים מלאים רק אם היומנים של
dataplex.googleapis.com/data_scanלא מוחרגים או מנותבים מחוץ למאגר היומנים של_Default. - רק משימות שהושלמו בהצלחה עם מטא-נתונים של טוקנים נספרות. רשומות ביומן בלי בלוק
billableTokenUsageלא נכללות בשאילתות ובמדדים. - השתמשו במרכזי הבקרה האלה כדי לעקוב אחרי מגמות השימוש ולהעריך את העלויות, ולא כדי להתאים חשבונית רשמית של חיוב ב-Cloud.
- לכל פרויקט ב- Google Cloud צריך להגדיר לוח בקרה משלו.
- שאילתות SQL לא מחזירות רשומות ביומן שנכתבו לפני שהופעל Observability Analytics בקטגוריה
_Default. - בווידג'ט הטבלה של כל משימה מוצגות עד 500 המשימות האחרונות בטווח התאריכים שנבחר. כדי לבדוק משימות ישנות יותר, אפשר לשלוח שאילתה ל-Logs Explorer.
המאמרים הבאים
- מידע נוסף על תובנות מנתונים מובְנים
- איך משתמשים בתובנות מנתונים מובְנים
- איך עוקבים אחרי יומני Knowledge Catalog
- איך עוקבים אחרי המדדים של Knowledge Catalog