בעזרת הרישום ביומן של 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.
לפני שמתחילים
מוודאים שהפרויקט ב- 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 (רישום ביומן של פרומפטים ותשובות של Code Assist) כדי לתעד את הפרומפטים והתשובות שנוצרו על ידי משתמשים ב-Gemini Code Assist Standard וב-Gemini Code Assist Enterprise בפרויקט.
לוחצים על שמירת השינויים.
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 בפרויקט
בוחרים באחת מהאפשרויות הבאות:
המסוף
נכנסים לדף 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 מזינים ערכים בשדות הבאים:
- שם הפרויקט: שם לפרויקט הריכוז של היומנים.
- חשבון לחיוב: בוחרים חשבון לחיוב.
- 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, מדביקים את כתובת האימייל של חשבון השירות שהעתקתם בקטע הקודם.
לוחצים על הוספת תפקיד נוסף.
מחפשים ובוחרים את התפקיד כתיבה בקטגוריית יומנים (
roles/logging.bucketWriter).לוחצים על Save.
יצירת מרכז בקרה בפרויקט מרכזי
אחרי שמגדירים את הפרויקט המרכזי לקבלת יומנים, אפשר ליצור מרכז בקרה כדי להציג מדדים מכמה פרויקטים:
במסוף Google Cloud , עוברים אל Monitoring > Dashboards:
לוחצים על Create dashboard.
בסרגל הכלים, לוחצים על הגדרות ואז בוחרים באפשרות 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 ביומן שמנתב את היומנים לפרויקט המרכזי. כדי להפסיק לשלוח יומנים מפרויקט מסוים לפרויקט המרכזי, צריך למחוק את ה-sink ביומן שיצרתם בפרויקט הזה:
- במסוף Google Cloud , עוברים לפרויקט שרוצים להפסיק לאסוף ממנו יומנים.
נכנסים לדף Log Router:
מזהים את המאגר שמנתב את היומנים לפרויקט המרוכז.
בשורה של אותו כיור, לוחצים על More actions ובוחרים באפשרות Delete sink.
בתיבת הדו-שיח שמופיעה, לוחצים על מחיקה.
חוזרים על השלבים האלה לכל פרויקט שרוצים להפסיק לשלוח ממנו יומנים לפרויקט המרכזי.