במאמר הזה מוסבר איך להגדיר רישום ביומן של Gemini Code Assist Standard ו-Gemini Code Assist Enterprise בפרויקט באמצעות מסוף Google Cloud או API.
מגבלות
התיעוד של נתוני יומן ב-Gemini Standard וב-Gemini Enterprise ב-Google Cloud מוגבל לאינטראקציות של משתמשים עם Gemini Code Assist בתוך IDE.
כברירת מחדל, יומני Gemini for Google Cloud נאספים על בסיס כל פרויקט. הוראות להגדרת פרויקט מרכזי לאיסוף יומנים מכמה פרויקטים זמינות במאמר הגדרת רישום ביומן של כמה פרויקטים.
Gemini Code Assist ב-GitHub לא תומך ברישום ביומן באמצעות Cloud Logging.
לפני שמתחילים
מוודאים שהפרויקט בענן ב-Google Cloud משויך לחשבון לחיוב.
אימות הרשאות IAM
כדי להגדיר את הרישום ביומן של Gemini Code Assist, צריך הרשאות IAM ספציפיות. כדי לפעול בהתאם לעיקרון של הרשאות מינימליות, כדאי להקצות תפקיד בהתאמה אישית שכולל רק את ההרשאות הנדרשות.
אתם צריכים לבקש מהאדמין ליצור תפקיד בהתאמה אישית שכולל את ההרשאות הבאות:
serviceusage.services.enable—כדי להפעיל ממשקי API בפרויקט.cloudaicompanion.loggingSettings.create—כדי ליצור הגדרות רישום ביומן.cloudaicompanion.loggingSettings.get– כדי לראות את הגדרות הרישום ביומן.-
cloudaicompanion.loggingSettings.list– כדי להציג את הגדרות הרישום ביומן. cloudaicompanion.loggingSettings.update—כדי לעדכן את הגדרות הרישום ביומן.-
cloudaicompanion.loggingSettingBindings.create—כדי לקשר הגדרות רישום ביומן לפרויקט. -
cloudaicompanion.loggingSettingBindings.get—כדי לראות את ההתאמות של הגדרות הרישום ביומן. -
cloudaicompanion.loggingSettingBindings.list—כדי להציג את ההתאמות של הגדרות הרישום ביומן.
לחלופין, אפשר להקצות את התפקידים המוגדרים מראש אדמין של הגדרות Gemini ל-Google Cloud (roles/cloudaicompanion.settingsAdmin) ואדמין בממשק 'שימוש בשירות' (roles/serviceusage.serviceUsageAdmin). עם זאת, התפקידים האלה כוללים הרשאות להגדרת כל ההגדרות של אדמין ב-Gemini ל-Google Cloud ולניהול השימוש בשירות, וזה עשוי להיות יותר ממה שצריך כדי להגדיר את הגדרות הרישום ביומן.
הגדרת רישום ביומן של Gemini Code Assist
בקטעים הבאים מפורטים השלבים שנדרשים כדי להפעיל את האיסוף והאחסון של הפעילות ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise ב-Cloud Logging, כולל:
יומני הנחיות ותשובות של Gemini Code Assist Standard ו-Enterprise, כמו קלט של משתמשים, מידע הקשרי ותשובות.
יומני מטא נתונים של Gemini Code Assist Standard ו-Gemini Code Assist Enterprise, כמו מטא נתונים של טלמטריה ושורות קוד שאושרו על ידי המשתמש.
פרטים נוספים על שני סוגי היומנים זמינים במאמר צפייה ביומני Gemini.
הפעלת רישום ביומן ל-Gemini Code Assist בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
מוודאים שהפעלתם את Cloud Logging API בפרויקט.
במסוף Google Cloud, עוברים לדף Admin for Gemini.
כניסה לדף Gemini for Google Cloud
הדף Gemini for Google Cloud נטען.
בתפריט הניווט הימני, לוחצים על הגדרות.
הדף הגדרות נטען.
(אופציונלי) לוחצים על Logging for Code Assist metadata (רישום ביומן של מטא-נתונים של Code Assist) כדי לתעד את המטא-נתונים שנוצרו על ידי משתמשים ב-Gemini Code Assist Standard וב-Enterprise בפרויקט.
(אופציונלי) לוחצים על Logging for Code Assist prompts and responses (רישום ביומן של הנחיות ותשובות ב-Code Assist) כדי לרשום ביומן את ההנחיות והתשובות שנוצרו על ידי משתמשים ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise בפרויקט.
לוחצים על Save Changes.
API
כדי להפעיל את הרישום ביומן עבור Gemini Code Assist Standard ו-Enterprise, צריך להשתמש במשאב loggingSettings כדי להגדיר את הגדרות הרישום ביומן הרצויות, ובמשאב loggingSettings.settingBindings כדי לקשר את ההגדרות לפרויקט:
בודקים שהפעלתם את ה-API של Cloud Logging בפרויקט.
יוצרים את ההגדרה ואת הערך הספציפי להגדרה:
מקבלים את הטוקן:
TOKEN=$(gcloud auth print-access-token)
מפעילים את היומנים של Gemini Code Assist Standard ו-Gemini Code Assist Enterprise. יומני המשתמשים ויומני המטא-נתונים מופעלים באמצעות השדות
log_prompts_and_responsesו-log_metadata, בהתאמה. אם לא רוצים להפעיל אחד מהשדות, לא כוללים אותו בבקשה.מריצים את הפקודה הבאה כדי ליצור את ההגדרה:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "log_prompts_and_responses": true, "log_metadata": true, } ' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings?logging_setting_id=LOGS_SETTING_ID"מחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_PROJECT_NAME: מזינים את מזהה הפרויקט שבו מאוחסן משאב הקישור. זהו פרויקט האב של הקישור. -
LOGS_SETTING_ID: מזינים שם ייחודי להגדרה, למשלgcalm.
אם הפקודה מצליחה, היא מחזירה גוף תגובה שבו הערכים של
log_prompts_and_responsesו-log_metadataמוגדרים ל-true:{ "name": "projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID", "createTime": "2025-01-23T15:22:49.717166932Z", "updateTime": "2025-01-23T15:22:49.717166932Z", "log_prompts_and_responses": true, "log_metadata": true }-
מריצים את הפקודה הבאה כדי ליצור את הגדרת הקישור של יומני Gemini Code Assist Standard ו-Enterprise:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "target": "projects/TARGET_PROJECT_NAME" }' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID/settingBindings?setting_binding_id=LOGS_BINDING_ID"
מחליפים את מה שכתוב בשדות הבאים:
-
TARGET_PROJECT_NAME: מזינים את פרויקט היעד שאליו צריך לקשר את הקישור. לרוב, זה אותו פרויקט כמו פרויקט המאגר. עם זאת, אפשר לקשר הגדרה לכמה פרויקטים כדי שלא יהיה צורך לשכפל את משאב ההגדרה. -
LOGS_BINDING_ID: משתמשים באותו LOGS_SETTING_ID כשיוצרים את ההגדרה, אבל מוסיפים לו אתb1. לדוגמה, משתמשים ב-gcalmb1.
אם הפקודה מסתיימת בלי שגיאות, היא מחזירה את המטא-נתונים של הפעולה בפורמט הבא:
{ "name": "projects/<var>CONTAINER_PROJECT_NAME</var>/locations/global/operations/operation-1737646069712-62c6140bb04bb-49261230-43701daf", "metadata": { "@type": "type.googleapis.com/google.cloud.cloudaicompanion.v1.OperationMetadata", "createTime": "2025-01-23T15:27:50.076075570Z", "target": "projects/<var>TARGET_PROJECT_NAME</var>/locations/global/loggingSettings/<var>LOGS_SETTING_ID</var>/settingBindings/<var>LOGS_BINDING_ID</var>", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
השבתת הרישום ביומן של Gemini Code Assist בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
במסוף Google Cloud, עוברים לדף Admin for Gemini.
כניסה לדף Gemini for Google Cloud
הדף Gemini for Google Cloud נטען.
בתפריט הניווט הימני, לוחצים על הגדרות.
הדף הגדרות נטען.
לוחצים על Logging for Code Assist metadata (רישום ביומן של מטא-נתונים של Code Assist) כדי להפסיק את התיעוד של המטא-נתונים משימוש ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise בפרויקט.
לוחצים על Save Changes.
API
כדי להשבית את הרישום ביומן עבור Gemini Code Assist Standard ו-Enterprise, משתמשים בשיטה loggingSetting.
יוצרים את ההגדרה ואת הערך הספציפי להגדרה:
מקבלים את הטוקן:
TOKEN=$(gcloud auth print-access-token)
מריצים את הפקודה הבאה כדי להשבית את ההגדרות של יומני Gemini Code Assist Standard ו-Enterprise:
curl -X POST \ -H "Authorization: Bearer $TOKEN" \ -H 'Content-Type: application/json' \ -d '{ "log_prompts_and_responses": false, "log_metadata": false, } ' \ "https://cloudaicompanion.googleapis.com/v1/projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings?logging_metadata_id=LOGS_SETTING_ID"מחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_PROJECT_NAME: מזינים את מזהה פרויקט האב.
LOGS_SETTING_ID: מזינים את השם של ההגדרה הקיימת, למשלgcalm.אם הפקודה מצליחה, היא מחזירה גוף תגובה שבו הערכים של
log_prompts_and_responsesו-log_metadataמוגדרים ל-false:{ "name": "projects/CONTAINER_PROJECT_NAME/locations/global/loggingSettings/LOGS_SETTING_ID", "createTime": "2025-01-23T15:22:49.717166932Z", "updateTime": "2025-01-23T15:22:49.717166932Z", "log_prompts_and_responses": false, "log_metadata": false }
-
הגדרה של רישום ביומן בכמה פרויקטים
אתם יכולים להשתמש ביומנים מ-Gemini Code Assist כדי ליצור מדדים ולוחות בקרה למעקב אחר השימוש בכל פרויקט. אם לארגון שלכם יש כמה פרויקטים, אתם יכולים להגדיר פרויקט רישום מרכזי ביומן כדי לאסוף יומנים מכמה פרויקטים וליצור לוחות בקרה על סמך הנתונים האלה.
יצירת פרויקט רישום מרכזי ביומן
הפרויקט הזה ישמש כמרכז ליומנים מהפרויקטים האחרים שלכם.
נכנסים לדף Project creation במסוף Google Cloud.
בחלון New Project (פרויקט חדש), מזינים ערכים בשדות הבאים:
- שם הפרויקט: שם לפרויקט של רישום מרכזי ביומן.
- חשבון לחיוב: בוחרים חשבון לחיוב.
- ארגון: בוחרים את הארגון. פרויקט מרכזי יכול לאסוף יומנים רק מפרויקטים באותו ארגון.
- מיקום: בוחרים מיקום.
לוחצים על יצירה.
הגדרת יעד ליומנים
כדי להפנות יומנים לפרויקט המרכזי, צריך להגדיר פריטי sink ביומן בכל אחד מהפרויקטים שמהם רוצים לאסוף יומנים.
כדי להגדיר פריטי sink ביומן לכל פרויקט:
- במסוף Google Cloud, עוברים לפרויקט שממנו רוצים לאסוף יומנים.
עוברים לדף Log Router:
לוחצים על Create sink (יצירת יעד).
בקטע פרטי יעד, מזינים שם ותיאור ליעד ולוחצים על הבא.
בקטע Sink destination (יעד העברה), מבצעים את הפעולות הבאות:
- בתפריט Select sink service בוחרים באפשרות Logging bucket.
- בתפריט קטגוריה ביומן, בוחרים באפשרות Use log bucket in another project.
בשדה Sink destination, מזינים את הפרטים הבאים:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_Defaultמחליפים את
CENTRALIZED_PROJECT_IDבמזהה הפרויקט של רישום הפעולות ביומן המרכזי שיצרתם.לוחצים על הבא.
בקטע Choose logs to include in sink (בחירת יומנים להכללה ב-sink), יוצרים מסנן הכללה על ידי הזנת הערכים הבאים בשדה Inclusion filter (מסנן הכללה):
resource.type="cloudaicompanion.googleapis.com/Instance"לוחצים על הבא.
בקטע Choose logs to filter out of sink (בחירת יומנים לסינון מתוך מאגר), משאירים את מסנן ההחרגה ריק ולוחצים על Create sink (יצירת מאגר).
אחרי שיוצרים את יעד הנתונים, בדף Log Router, מוצאים את יעד הנתונים שיצרתם.
בעמודה Writer Identity (זהות הכתיבה), מעתיקים את כתובת האימייל המלאה של חשבון השירות.
הגדרת הגישה
כדי להעניק ל-sink הרשאת גישה לכתיבת יומנים לפרויקט המרכזי, מבצעים את הפעולות הבאות:
- במסוף Google Cloud, עוברים לפרויקט המרכזי שיצרתם.
נכנסים לדף IAM:
לוחצים על הענקת גישה.
בשדה New principals, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם בסעיף הקודם.
לוחצים על הוספת תפקיד נוסף.
מחפשים את התפקיד Logs Bucket Writer (בעל הרשאת כתיבה של קטגוריות יומנים) ובוחרים אותו (
roles/logging.bucketWriter).לוחצים על שמירה.
יצירת לוח בקרה בפרויקט מרכזי
אחרי שמגדירים את הפרויקט המרכזי לקבלת יומנים, אפשר ליצור מרכז בקרה כדי להציג מדדים מכמה פרויקטים:
במסוף Google Cloud, עוברים אל Monitoring > Dashboards:
לוחצים על יצירת מרכז בקרה.
בסרגל הכלים, לוחצים על הגדרות ואז בוחרים באפשרות JSON > עורך JSON.
בעורך ה-JSON, מדביקים את הקוד הבא:
{ "displayName": "Multi-Project Gemini Code Assist Overview from Metadata Logs", "dashboardFilters": [], "labels": {}, "mosaicLayout": { "columns": 48, "tiles": [ { "height": 16, "width": 24, "widget": { "title": "Active Users by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "event_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "event_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "DAU" } ], "plotType": "LINE", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(labels, '$.user_id')) as DAU, CAST(timestamp AS DATE) AS event_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(labels, '$.user_id') is not NULL\n AND (\n JSON_VALUE(json_payload, '$.chatExposure.originalRequestId') is not NULL\n OR JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n OR JSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\n )\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nevent_date\nORDER BY\nevent_date\n" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Acceptance Rate by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "acceptance_rate" } ], "plotType": "LINE", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\nexposures_date,\nacceptances_count / exposures_count as acceptance_rate\nFROM\n(\nSELECT\nCOUNT (DISTINCT JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId')) as acceptances_count, CAST(timestamp AS DATE) AS acceptances_date\nFROM\n`CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\nJSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\nAND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\nAND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nacceptances_date\n) as acceptances\nJOIN\n(\nSELECT\nCOUNT (DISTINCT JSON_VALUE(json_payload, '$.codeExposure.originalRequestId')) as exposures_count, CAST(timestamp AS DATE) AS exposures_date\nFROM\n`CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\nJSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\nAND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\nAND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\nexposures_date\n) as exposures\nON\nexposures.exposures_date = acceptances.acceptances_date\nORDER BY\nexposures_date ASC" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 16, "height": 16, "width": 24, "widget": { "title": "Code Suggestions by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "exposures_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.codeExposure.originalRequestId')) as exposures_count, CAST(timestamp AS DATE) AS exposures_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.codeExposure.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n exposures_date\nORDER BY\n exposures_date" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 16, "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Code Acceptances by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "acceptances_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "acceptances_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "acceptances_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId')) as acceptances_count, CAST(timestamp AS DATE) AS acceptances_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n acceptances_date\nORDER BY\n acceptances_date\n" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 32, "height": 16, "width": 24, "widget": { "title": "Lines of Code Accepted by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "line_count_day", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "line_count_day", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "lines_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n SUM(lines) as lines_count,\n CAST(max_timestamp AS DATE) AS line_count_day\nFROM\n(\n SELECT\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') as request_id,\n MAX(CAST(JSON_VALUE(json_payload, '$.codeAcceptance.linesCount') AS INT)) as lines,\n MAX(timestamp) as max_timestamp\n FROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\n WHERE\n JSON_VALUE(json_payload, '$.codeAcceptance.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\n GROUP BY\n request_id\n )\nGROUP BY\n line_count_day\nORDER BY\n line_count_day" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } }, { "yPos": 32, "xPos": 24, "height": 16, "width": 24, "widget": { "title": "Chat Exposures by Day", "id": "", "xyChart": { "chartOptions": { "displayHorizontal": false, "mode": "COLOR", "showLegend": false }, "dataSets": [ { "breakdowns": [], "dimensions": [ { "column": "chat_exposures_date", "columnType": "DATE", "maxBinCount": 0, "sortColumn": "chat_exposures_date", "sortOrder": "SORT_ORDER_ASCENDING", "timeBinSize": "0s", "xMax": 0, "xMin": 0 } ], "legendTemplate": "", "measures": [ { "aggregationFunction": { "parameters": [], "type": "average" }, "column": "chat_exposures_count" } ], "plotType": "STACKED_BAR", "targetAxis": "Y1", "timeSeriesQuery": { "opsAnalyticsQuery": { "queryExecutionRules": { "useReservedSlots": false }, "queryHandle": "", "savedQueryId": "", "sql": "SELECT\n COUNT (DISTINCT JSON_VALUE(json_payload, '$.chatExposure.originalRequestId')) as chat_exposures_count, CAST(timestamp AS DATE) AS chat_exposures_date\nFROM\n `CENTRALIZED_PROJECT_ID.global._Default._Default`\nWHERE\n JSON_VALUE(json_payload, '$.chatExposure.originalRequestId') is not NULL\n AND resource.type = \"cloudaicompanion.googleapis.com/Instance\"\n AND (JSON_VALUE(resource.labels, '$.resource_container') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2') or JSON_VALUE(resource.labels, '$.project_id') in ('SOURCE_PROJECT_ID_1', 'SOURCE_PROJECT_ID_2'))\nGROUP BY\n chat_exposures_date\nORDER BY\n chat_exposures_date" }, "outputFullDuration": false, "unitOverride": "" } } ], "thresholds": [], "yAxis": { "label": "", "scale": "LINEAR" } } } } ] } }מחליפים את מה שכתוב בשדות הבאים:
-
CENTRALIZED_PROJECT_ID: מזהה הפרויקט של פרויקט הרישום המרכזי שיצרתם. -
SOURCE_PROJECT_ID_1ו-SOURCE_PROJECT_ID_2: מזהי הפרויקטים שמהם רוצים לאסוף יומנים. אם רוצים לאסוף יומנים מיותר משני פרויקטים, אפשר להוסיף עוד מזהי פרויקטים לסעיפיםinשל השאילתה.
-
השבתת רישום ביומן של כמה פרויקטים
אם הגדרתם רישום ביומן של Gemini Code Assist לכמה פרויקטים, תוכלו להשבית אותו על ידי מחיקת יעד היומן שמנתב את היומנים לפרויקט המרכזי. כדי להפסיק לשלוח יומנים מפרויקט ספציפי לפרויקט המרכזי, צריך למחוק את sink ביומן שיצרתם בפרויקט הזה:
- במסוף Google Cloud, עוברים לפרויקט שרוצים להפסיק את איסוף היומנים ממנו.
עוברים לדף Log Router:
מזהים את יעד הטביעה שמנתב את היומנים לפרויקט המרכזי.
בשורה של יעד כזה, לוחצים על פעולות נוספות ואז בוחרים באפשרות מחיקת יעד.
בתיבת הדו-שיח שמופיעה, לוחצים על מחיקה.
חוזרים על השלבים האלה לכל פרויקט שרוצים להפסיק לשלוח ממנו יומנים לפרויקט המרכזי.