במאמר הזה מוסבר איך להגדיר רישום ביומן של Gemini Code Assist Standard ו-Gemini Code Assist Enterprise לפרויקט באמצעות Google Cloud המסוף או API.
מגבלות
הרישום של נתוני היומן ב-Gemini Standard וב-Gemini Enterprise מוגבל לאינטראקציות של המשתמשים עם Gemini Code Assist בסביבת פיתוח משולבת (IDE). Google Cloud
כברירת מחדל, יומני Gemini for Google Cloud נאספים על בסיס כל פרויקט. הוראות להגדרת פרויקט מרכזי לאיסוף יומנים מכמה פרויקטים זמינות במאמר הגדרת רישום ביומן של כמה פרויקטים.
Gemini Code Assist ב-GitHub לא תומך ברישום ביומן באמצעות Cloud Logging.
לפני שמתחילים
מוודאים ש Google Cloud הפרויקט מקושר לחשבון לחיוב.
אימות הרשאות IAM
כדי להגדיר את הרישום ביומן של Gemini Code Assist Standard ו-Enterprise, אפשר להעניק את התפקיד המוגדר מראש Gemini for Google Cloud Settings Admin (roles/cloudaicompanion.settingsAdmin) בניהול זהויות והרשאות גישה (IAM). התפקיד הזה כולל את כל ההרשאות הנדרשות לעבודה עם כל ההגדרות של Gemini for Google Cloudלאדמינים.
לחלופין, אפשר לעדכן תפקידי IAM בהתאמה אישית. אתם צריכים הרשאות ספציפיות ב-IAM, שמפורטות בקטעים הבאים.
הגדרת רישום ביומן של 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 בפרויקט.
מוודאים שיש לכם את הרשאות ה-IAM הבאות בפרויקט שבבעלותו המינוי:
instance.queryEffectiveSettinginstance.queryEffectiveSettingBindingsloggingSettings.createloggingSettings.listloggingSettings.updateloggingSettings.getcloudaicompanion.instances.loggingSettings.usecloudaicompanion.instances.queryEffectiveSettingsettingBindings.loggingSettingsListsettingBindings.loggingSettingsGetsettingBindings.loggingSettingsUpdatesettingBindings.loggingSettingsCreatecloudaicompanion.settingBindings.loggingSettingsUsecloudaicompanion.instances.queryEffectiveSettingBindings
נכנסים לדף Admin for Gemini במסוף Google Cloud .
הדף Gemini for Google Cloud נטען.
בתפריט הניווט הימני, לוחצים על הגדרות.
הדף הגדרות נטען.
(אופציונלי) לוחצים על Logging for Code Assist metadata (רישום ביומן של מטא-נתונים של Code Assist) כדי לתעד את המטא-נתונים שנוצרו על ידי משתמשים ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise בפרויקט.
(אופציונלי) לוחצים על Logging for Code Assist prompts and responses (רישום ביומן של הנחיות ותשובות של Code Assist) כדי לתעד את ההנחיות והתשובות שנוצרו על ידי משתמשים ב-Gemini Code Assist Standard ו-Enterprise בפרויקט.
לוחצים על שמירת השינויים.
API
כדי להפעיל את הרישום ביומן עבור Gemini Code Assist Standard ו-Gemini Code Assist Enterprise, צריך להשתמש במשאב loggingSettings כדי להגדיר את הגדרות הרישום ביומן הרצויות, ובמשאב loggingSettings.settingBindings כדי לקשר את ההגדרות לפרויקט:
בודקים שהפעלתם את Cloud Logging API בפרויקט.
מוודאים שיש לכם את הרשאות ה-IAM הבאות בפרויקט שבבעלותו המינוי:
instance.queryEffectiveSettinginstance.queryEffectiveSettingBindingsloggingSettings.createloggingSettings.listloggingSettings.updateloggingSettings.getcloudaicompanion.instances.loggingSettings.usecloudaicompanion.instances.queryEffectiveSettingsettingBindings.loggingSettingsListsettingBindings.loggingSettingsGetsettingBindings.loggingSettingsUpdatesettingBindings.loggingSettingsCreatecloudaicompanion.settingBindings.loggingSettingsUsecloudaicompanion.instances.queryEffectiveSettingBindings
יוצרים את ההגדרה ואת הערך הספציפי להגדרה:
מקבלים את הטוקן:
TOKEN=$(gcloud auth print-access-token)
מפעילים את היומנים של Gemini Code Assist Standard ו-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 בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
מוודאים שיש לכם את הרשאות ה-IAM הבאות בפרויקט שבבעלותו המינוי:
instance.queryEffectiveSettinginstance.queryEffectiveSettingBindingsloggingSettings.deleteloggingSettings.listloggingSettings.updateloggingSettings.getcloudaicompanion.instances.loggingSettings.usecloudaicompanion.instances.queryEffectiveSettingsettingBindings.loggingSettingsListsettingBindings.loggingSettingsGetsettingBindings.loggingSettingsUpdatesettingBindings.loggingSettingsDeletecloudaicompanion.settingBindings.loggingSettingsUsecloudaicompanion.instances.queryEffectiveSettingBindings
נכנסים לדף Admin for Gemini במסוף Google Cloud .
הדף Gemini for Google Cloud נטען.
בתפריט הניווט הימני, לוחצים על הגדרות.
הדף הגדרות נטען.
לוחצים על Logging for Code Assist metadata (רישום ביומן של מטא-נתונים של Code Assist) כדי להפסיק את הרישום של המטא-נתונים משימוש ב-Gemini Code Assist Standard וב-Enterprise בפרויקט.
לוחצים על שמירת השינויים.
API
כדי להשבית את הרישום ביומן עבור Gemini Code Assist Standard ו-Enterprise, משתמשים בשיטה loggingSetting.
מוודאים שיש לכם את הרשאות ה-IAM הבאות בפרויקט שבבעלותו המינוי:
instance.queryEffectiveSettinginstance.queryEffectiveSettingBindingsloggingSettings.createloggingSettings.listloggingSettings.updateloggingSettings.getcloudaicompanion.instances.loggingSettings.usecloudaicompanion.instances.queryEffectiveSettingsettingBindings.loggingSettingsListsettingBindings.loggingSettingsGetsettingBindings.loggingSettingsUpdatesettingBindings.loggingSettingsCreateserviceusage.services.enable
יוצרים את ההגדרה ואת הערך הספציפי להגדרה:
מקבלים את הטוקן:
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 ביומן בכל אחד מהפרויקטים שמהם רוצים לאסוף יומנים.
כדי להגדיר פריטי 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).לוחצים על Save.
יצירת לוח בקרה בפרויקט מרכזי
אחרי שמגדירים את הפרויקט המרכזי לקבלת יומנים, אפשר ליצור מרכז בקרה כדי להציג מדדים מכמה פרויקטים:
במסוף 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:
מזהים את יעד הטביעה שמנתב את היומנים לפרויקט המרכזי.
בשורה של יעד כזה, לוחצים על פעולות נוספות ואז בוחרים באפשרות מחיקת יעד.
בתיבת הדו-שיח שמופיעה, לוחצים על מחיקה.
חוזרים על השלבים האלה לכל פרויקט שרוצים להפסיק לשלוח ממנו יומנים לפרויקט המרכזי.