เอกสารนี้อธิบายวิธีกำหนดค่าการบันทึก Gemini Code Assist แบบ Standard และแบบ Enterprise สำหรับโปรเจ็กต์โดยใช้คอนโซล Google Cloud หรือ API
ข้อจำกัด
การบันทึกข้อมูลบันทึกของ Gemini Standard และ Enterprise ใน Google Cloud จะจำกัดอยู่เพียงการโต้ตอบของผู้ใช้กับ Gemini Code Assist ภายใน IDE
โดยค่าเริ่มต้น ระบบจะรวบรวมบันทึกของ Gemini สำหรับ 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 แบบมาตรฐานและแบบ Enterprise ใน Cloud Logging ซึ่งรวมถึง
บันทึกพรอมต์และคำตอบของ Gemini Code Assist แบบ Standard และแบบ Enterprise เช่น ข้อมูลจากผู้ใช้ ข้อมูลตามบริบท และคำตอบ
บันทึกข้อมูลเมตาของ Gemini Code Assist แบบมาตรฐานและแบบ Enterprise เช่น ข้อมูลเมตาการวัดและส่งข้อมูลทางไกลและจำนวนบรรทัดของโค้ดที่ผู้ใช้ยอมรับ
ดูรายละเอียดเพิ่มเติมเกี่ยวกับบันทึกทั้ง 2 ประเภทได้ที่ ดูบันทึกของ Gemini
เปิดใช้การบันทึกสำหรับ Gemini Code Assist ในโปรเจ็กต์
โปรดเลือกจากตัวเลือกต่อไปนี้
คอนโซล
ตรวจสอบว่าคุณได้เปิดใช้ API **Cloud Logging** ในโปรเจ็กต์แล้ว
ในคอนโซล Google Cloud ให้ไปที่หน้าผู้ดูแลระบบสำหรับ Gemini
ไปที่ Gemini สำหรับ Google Cloud
หน้า Gemini สำหรับ Google Cloud จะโหลดขึ้น
คลิกการตั้งค่า ในเมนูการนำทางด้านซ้าย
หน้าการตั้งค่า จะโหลดขึ้น
(ไม่บังคับ) คลิกการบันทึกข้อมูลเมตาของ Code Assist เพื่อบันทึกข้อมูลเมตาที่ผู้ใช้ Gemini Code Assist แบบมาตรฐานและแบบ Enterprise สร้างขึ้นในโปรเจ็กต์
(ไม่บังคับ) คลิกการบันทึกพรอมต์และคำตอบของ Code Assist เพื่อบันทึกพรอมต์และคำตอบที่ผู้ใช้ Gemini Code Assist แบบมาตรฐานและแบบ Enterprise สร้างขึ้นในโปรเจ็กต์
คลิกบันทึกการเปลี่ยนแปลง
API
หากต้องการเปิดใช้การบันทึกสำหรับ Gemini Code Assist แบบมาตรฐานและ
Enterprise ให้ใช้ทรัพยากร loggingSettings เพื่อกำหนดการตั้งค่าการบันทึก
ที่ต้องการ และใช้ทรัพยากร loggingSettings.settingBindings เพื่อ
ผูกการตั้งค่ากับโปรเจ็กต์
ตรวจสอบว่าคุณได้เปิดใช้ API Cloud Logging ในโปรเจ็กต์แล้ว
สร้างการตั้งค่าและค่าเฉพาะการตั้งค่า
รับโทเค็น
TOKEN=$(gcloud auth print-access-token)
เปิดใช้บันทึกของ 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 แบบมาตรฐานและแบบ 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 ให้ไปที่หน้าผู้ดูแลระบบสำหรับ Gemini
ไปที่ Gemini สำหรับ Google Cloud
หน้า Gemini สำหรับ Google Cloud จะโหลดขึ้น
คลิกการตั้งค่า ในเมนูการนำทางด้านซ้าย
หน้าการตั้งค่า จะโหลดขึ้น
คลิกการบันทึกข้อมูลเมตาของ Code Assist เพื่อปิดการบันทึกข้อมูลเมตาจากการใช้งาน Gemini Code Assist แบบมาตรฐานและแบบ Enterprise ในโปรเจ็กต์
คลิกบันทึกการเปลี่ยนแปลง
API
หากต้องการปิดใช้การบันทึกสำหรับ Gemini Code Assist แบบมาตรฐานและแบบ Enterprise ให้ใช้เมธอด loggingSetting
สร้างการตั้งค่าและค่าเฉพาะการตั้งค่า
รับโทเค็น
TOKEN=$(gcloud auth print-access-token)
เรียกใช้คำสั่งต่อไปนี้เพื่อปิดใช้การตั้งค่าบันทึกของ Gemini Code Assist แบบมาตรฐานและแบบ 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 เพื่อสร้างเมตริกและแดชบอร์ดสำหรับการตรวจสอบการใช้งานต่อโปรเจ็กต์ หากองค์กรมีหลายโปรเจ็กต์ คุณสามารถกำหนดค่าโปรเจ็กต์การบันทึกส่วนกลางเพื่อรวบรวมบันทึกจากหลายโปรเจ็กต์และสร้างแดชบอร์ดในโปรเจ็กต์เหล่านั้น
สร้างโปรเจ็กต์การบันทึกส่วนกลาง
โปรเจ็กต์นี้จะทำหน้าที่เป็นศูนย์กลางสำหรับบันทึกจากโปรเจ็กต์อื่นๆ
ในคอนโซล Google Cloud ให้ไปที่หน้าการสร้างโปรเจ็กต์
ในหน้าต่างโปรเจ็กต์ใหม่ ให้ป้อนค่าสำหรับช่องต่อไปนี้
- ชื่อโปรเจ็กต์: ชื่อสำหรับโปรเจ็กต์การบันทึกส่วนกลาง
- บัญชีสำหรับการเรียกเก็บเงิน: เลือกบัญชีสำหรับการเรียกเก็บเงิน
- องค์กร: เลือกองค์กร โปรเจ็กต์ส่วนกลางจะรวบรวมบันทึกจากโปรเจ็กต์ในองค์กรเดียวกันได้เท่านั้น
- ตำแหน่ง: เลือกตำแหน่ง
คลิกสร้าง
กำหนดค่าซิงก์บันทึก
หากต้องการส่งบันทึกไปยังโปรเจ็กต์ส่วนกลาง ให้กำหนดค่าซิงก์บันทึกในแต่ละโปรเจ็กต์ที่คุณต้องการรวบรวมบันทึก
หากต้องการกำหนดค่าซิงก์บันทึกสำหรับแต่ละโปรเจ็กต์ ให้ทำดังนี้
- ในคอนโซล Google Cloud ให้เปลี่ยนไปใช้โปรเจ็กต์ที่คุณต้องการรวบรวมบันทึก
ไปที่หน้า Log Router
คลิกสร้างซิงก์
สำหรับรายละเอียดซิงก์ ให้ป้อนชื่อและคำอธิบายสำหรับซิงก์ แล้ว คลิก ถัดไป
สำหรับปลายทางซิงก์ ให้ทำดังนี้
- ในเมนูเลือกบริการซิงก์ ให้เลือกBucket บันทึก
- ในเมนูBucket บันทึก ให้เลือกใช้ Bucket บันทึกในโปรเจ็กต์อื่น
ป้อนข้อมูลต่อไปนี้ในช่องปลายทางซิงก์
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_Defaultแทนที่
CENTRALIZED_PROJECT_IDด้วยรหัสโปรเจ็กต์ของโปรเจ็กต์การบันทึกส่วนกลางที่คุณสร้างขึ้นคลิกถัดไป
สำหรับเลือกบันทึกที่จะรวมไว้ในซิงก์ ให้สร้างตัวกรองการรวมโดยป้อนข้อมูลต่อไปนี้ในช่องตัวกรองการรวม
resource.type="cloudaicompanion.googleapis.com/Instance"คลิกถัดไป
สำหรับเลือกบันทึกที่จะกรองออกจากซิงก์ ให้ปล่อยตัวกรองการยกเว้นว่างไว้ แล้วคลิกสร้างซิงก์
หลังจากสร้างซิงก์แล้ว ให้ค้นหาซิงก์ที่คุณสร้างขึ้นในหน้า Log Router
คัดลอกอีเมลของบัญชีบริการแบบเต็มในคอลัมน์ข้อมูลประจำตัวของผู้เขียน
กำหนดค่าสิทธิ์เข้าถึง
หากต้องการให้สิทธิ์เข้าถึงซิงก์ในการเขียนบันทึกลงในโปรเจ็กต์ส่วนกลาง ให้ทำดังนี้
- ในคอนโซล Google Cloud ให้เปลี่ยนไปใช้โปรเจ็กต์ส่วนกลางที่คุณสร้างขึ้น
ไปที่หน้า IAM
คลิกให้สิทธิ์เข้าถึง
วางอีเมลบัญชีบริการที่คุณคัดลอกไว้ในส่วนก่อนหน้าลงในช่องผู้รับสิทธิ์รายใหม่
คลิกเพิ่มบทบาทอื่น
ค้นหาและเลือกบทบาทผู้เขียน Bucket บันทึก (
roles/logging.bucketWriter)คลิกบันทึก
สร้างแดชบอร์ดในโปรเจ็กต์ส่วนกลาง
หลังจากกำหนดค่าโปรเจ็กต์ส่วนกลางให้รับบันทึกแล้ว คุณจะสร้างแดชบอร์ดเพื่อดูเมตริกจากหลายโปรเจ็กต์ได้โดยทำดังนี้
ในคอนโซล Google Cloud ให้ไปที่การตรวจสอบ > แดชบอร์ด:
คลิกสร้างแดชบอร์ด
ในแถบเครื่องมือ ให้คลิก การตั้งค่า แล้วเลือก 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: รหัสโปรเจ็กต์ของโปรเจ็กต์ที่คุณต้องการรวบรวมบันทึก หากต้องการรวบรวมบันทึกจากโปรเจ็กต์มากกว่า 2 โปรเจ็กต์ คุณสามารถเพิ่มรหัสโปรเจ็กต์เพิ่มเติมลงในอนุประโยคinของการค้นหาได้
ปิดใช้การบันทึกหลายโปรเจ็กต์
หากกำหนดค่าการบันทึก Gemini Code Assist สำหรับหลายโปรเจ็กต์ คุณสามารถปิดใช้ได้โดยลบซิงก์บันทึกที่กำหนดเส้นทางบันทึกไปยังโปรเจ็กต์ส่วนกลาง หากต้องการหยุดส่งบันทึกจากโปรเจ็กต์แต่ละโปรเจ็กต์ไปยังโปรเจ็กต์ส่วนกลาง ให้ลบซิงก์บันทึกที่คุณสร้างขึ้นในโปรเจ็กต์นั้นโดยทำดังนี้
- ในคอนโซล Google Cloud ให้เปลี่ยนไปใช้โปรเจ็กต์ที่คุณต้องการหยุดรวบรวมบันทึก
ไปที่หน้า Log Router
ระบุซิงก์ที่กำหนดเส้นทางบันทึกไปยังโปรเจ็กต์ส่วนกลาง
ในแถวของซิงก์นั้น ให้คลิกการดำเนินการเพิ่มเติม แล้วเลือก ลบซิงก์
คลิกลบ ในกล่องโต้ตอบที่ปรากฏขึ้น
ทำตามขั้นตอนเหล่านี้ซ้ำสำหรับแต่ละโปรเจ็กต์ที่คุณต้องการหยุดส่งบันทึกลงในโปรเจ็กต์ส่วนกลาง