בעזרת הרישום ביומן של Gemini Code Assist Standard ו-Enterprise, אתם יכולים לעקוב אחרי האינטראקציות של המפתחים והשימוש שלהם בפרויקטים. במאמר הזה מוסבר איך להגדיר את הרישום ביומן של Gemini Code Assist באמצעות מסוף Google Cloud או ה-API בארכיטקטורת REST.
מגבלות
התיעוד של נתוני היומן ב-Gemini Code Assist Standard ו-Enterprise מוגבל לאינטראקציות של המשתמשים עם Gemini Code Assist בתוך סביבת פיתוח משולבת (IDE).
כברירת מחדל, היומנים של Gemini Code Assist נאספים לכל פרויקט בנפרד. במאמר הגדרת רישום ביומן של כמה פרויקטים מוסבר איך להגדיר פרויקט מרכזי לאיסוף יומנים מכמה פרויקטים.
ב-Gemini Code Assist ב-GitHub אי אפשר לתעד ביומן באמצעות Cloud Logging.
ביומנים של Gemini Code Assist מתועד מספר משולב של טוקנים (
totalTokenCount) לכל בקשה לצ'אט ולסוכן (CompleteTask), ואפשר לשייך אותו למשתמש באמצעות התוויתlabels.user_id. המספר הזה מופיע בשדותRequestLog.metadata.totalTokenCount,ResponseLog.metadata.totalTokenCountו-MetadataLog.apiRequest.totalTokenCount. יומנים של בקשות להשלמת קוד ובקשות ליצירת קוד (CompleteCodeו-GenerateCode) ויומני מטא-נתונים שמתעדים אירועי טלמטריה, כמו אירועיcodeExposure,codeAcceptance,chatExposureו-chatAcceptance, לא כוללים ספירות של טוקנים. ביומנים ובמדדים של Cloud Monitoring לא מתועדים בנפרד מספר הטוקנים של ההנחיה ומספר הטוקנים של התשובה. כדי לראות את השימוש המצטבר בטוקנים בפרויקט, עיינו במאמר מדדי טוקנים ומכסות.
לפני שמתחילים
מוודאים שהפרויקט ב- 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 ולניהול השימוש בשירות ב- Google Cloud, וייתכן שהן חורגות מההרשאות שנדרשות לקביעת הגדרות הרישום ביומן.
הגדרת רישום ביומן של Gemini Code Assist
בקטעים הבאים מוסבר איך להפעיל את האיסוף והאחסון של נתוני הפעילות ב-Gemini Code Assist Standard ו-Enterprise ב-Cloud Logging, כולל:
יומני ההנחיות והתשובות של Gemini Code Assist Standard ו-Enterprise, כמו קלט של משתמשים, מידע לפי הקשר ותשובות.
יומני מטא-נתונים של Gemini Code Assist Standard ו-Enterprise, כמו מטא-נתונים של נתוני טלמטריה ושורות קוד שהמשתמש אישר.
לפרטים נוספים על שני סוגי היומנים, קראו את המאמר הצגת יומני Gemini Code Assist.
הפעלת רישום ביומן של Gemini Code Assist בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
מוודאים שהפעלתם את Cloud Logging API בפרויקט.
נכנסים לדף Admin for Gemini במסוף Google Cloud .
בתפריט הניווט הימני, לוחצים על הגדרות.
(אופציונלי) לוחצים על Logging for Code Assist metadata כדי לתעד את המטא-נתונים שנוצרו על ידי משתמשי Gemini Code Assist Standard ו-Enterprise בפרויקט.
(אופציונלי) לוחצים על Logging for Code Assist prompts and responses כדי לתעד את ההנחיות והתשובות שנוצרו על ידי משתמשי Gemini Code Assist Standard ו-Enterprise בפרויקט.
לוחצים על שמירת השינויים.
API
כדי להפעיל את הרישום ביומן ב-Gemini Code Assist Standard וב-Enterprise, משתמשים במשאב loggingSettings כדי להגדיר את הגדרות הרישום ביומן שרוצים, ובמשאב loggingSettings.settingBindings כדי לקשר את ההגדרות לפרויקט:
מוודאים שהפעלתם את Cloud Logging API בפרויקט.
יוצרים את ההגדרה ואת הערך הספציפי להגדרה:
מקבלים את הטוקן:
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 בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
נכנסים לדף Admin for Gemini במסוף Google Cloud .
בתפריט הניווט הימני, לוחצים על הגדרות.
לוחצים על Logging for Code Assist metadata כדי להשבית את תיעוד המטא-נתונים מהשימוש ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise בפרויקט.
לוחצים על שמירת השינויים.
API
כדי להשבית את הרישום ביומן ב-Gemini Code Assist Standard וב-Enterprise, משתמשים ב-method 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, מזינים ערכים בשדות הבאים:
- שם הפרויקט: שם לפרויקט הרישום המרכזי ביומן.
- Billing account: בוחרים חשבון לחיוב.
- Organization: בוחרים את הארגון. בפרויקט מרכזי אפשר לאסוף יומנים רק מפרויקטים באותו ארגון.
- מיקום: בוחרים מיקום.
לוחצים על יצירה.
הגדרת sink ביומן
כדי להפנות יומנים לפרויקט המרוכז, מגדירים sink ביומן בכל אחד מהפרויקטים שמהם רוצים לאסוף יומנים.
כדי להגדיר sink ביומן לכל פרויקט:
- במסוף Google Cloud , עוברים לפרויקט שרוצים לאסוף ממנו יומנים.
נכנסים לדף Log Router:
לוחצים על Create sink.
בקטע Sink details, מזינים שם ותיאור לכיור ולוחצים על Next.
בקטע Sink destination:
- בתפריט Select sink service, בוחרים באפשרות Logging bucket.
- בתפריט Log 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, יוצרים מסנן הכללה על ידי הזנת הערך הבא בשדה Inclusion filter:
resource.type="cloudaicompanion.googleapis.com/Instance"לוחצים על הבא.
בשדה Choose logs to filter out of sink, משאירים את מסנן ההחרגה ריק ולוחצים על Create sink.
אחרי שיוצרים את הכיור, בדף Log Router מאתרים את הכיור שיצרתם.
בעמודה Writer Identity, מעתיקים את כתובת האימייל המלאה של חשבון השירות.
הגדרת הרשאות הגישה
כדי לתת לכיור הרשאות לכתיבת יומנים בפרויקט המרוכז:
- במסוף Google Cloud , עוברים לפרויקט המרוכז שיצרתם.
נכנסים לדף IAM:
לוחצים על הענקת גישה.
בשדה New principals, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם בקטע הקודם.
לוחצים על הוספת תפקיד.
מחפשים את התפקיד Logs Bucket Writer (
roles/logging.bucketWriter) ובוחרים אותו.לוחצים על Save.
יצירת מרכז בקרה בפרויקט מרכזי
אחרי שמגדירים את הפרויקט המרכזי לקבלת יומנים, אפשר ליצור מרכז בקרה כדי להציג מדדים מכמה פרויקטים:
במסוף Google Cloud , נכנסים לדף Monitoring > Dashboards:
לוחצים על Create dashboard.
בסרגל הכלים, לוחצים על הגדרות ואז על JSON > עורך JSON.
ב-JSON Editor, מדביקים את הקוד הבא:
{ "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 בכמה פרויקטים, אתם יכולים להשבית אותו על ידי מחיקת ה-sinks ביומן שמנתבים את היומנים לפרויקט המרכזי. כדי להפסיק לשלוח יומנים מפרויקט מסוים לפרויקט המרכזי, צריך למחוק את ה-sink ביומן שיצרתם באותו פרויקט:
- במסוף Google Cloud , עוברים לפרויקט שרוצים להפסיק לאסוף ממנו יומנים.
נכנסים לדף Log Router:
מזהים את הכיור שמנתב את היומנים לפרויקט המרוכז.
בשורה של אותו כיור, לוחצים על More actions ובוחרים באפשרות Delete sink.
בתיבת הדו-שיח שמופיעה, לוחצים על מחיקה.
חוזרים על השלבים האלה בכל פרויקט שרוצים להפסיק לשלוח ממנו יומנים לפרויקט המרוכז.