Tài liệu này mô tả cách định cấu hình tính năng ghi nhật ký Gemini Code Assist Standard và Enterprise cho một dự án bằng cách sử dụng bảng điều khiển Cloud hoặc một API.
Các điểm hạn chế
Việc ghi lại dữ liệu nhật ký của Gemini Standard và Enterprise trong Google Cloud chỉ giới hạn ở những lượt tương tác của người dùng với Gemini Code Assist trong một IDE.
Theo mặc định, nhật ký của Gemini cho Google Cloud được thu thập theo từng dự án. Để biết hướng dẫn về cách định cấu hình một dự án tập trung để thu thập nhật ký từ nhiều dự án, hãy xem bài viết Thiết lập tính năng ghi nhật ký cho nhiều dự án.
Gemini Code Assist trên GitHub không hỗ trợ ghi nhật ký bằng Cloud Logging.
Trước khi bắt đầu
Xác minh rằng dự án trên đám mây của bạn trên Google Cloud được liên kết với một tài khoản thanh toán.
Xác minh quyền IAM
Để định cấu hình nhật ký Gemini Code Assist, bạn cần có các quyền IAM cụ thể. Để tuân theo nguyên tắc về đặc quyền tối thiểu, hãy cấp một vai trò tùy chỉnh chỉ chứa các quyền cần thiết.
Yêu cầu quản trị viên tạo một vai trò tùy chỉnh có các quyền sau:
serviceusage.services.enable– để bật API cho dự án của bạn.cloudaicompanion.loggingSettings.create– để tạo chế độ cài đặt ghi nhật ký.cloudaicompanion.loggingSettings.get– để xem chế độ cài đặt ghi nhật ký.cloudaicompanion.loggingSettings.list– để liệt kê các chế độ cài đặt ghi nhật ký.cloudaicompanion.loggingSettings.update– để cập nhật chế độ cài đặt ghi nhật ký.cloudaicompanion.loggingSettingBindings.create– để liên kết chế độ cài đặt ghi nhật ký với một dự án.cloudaicompanion.loggingSettingBindings.get– để xem các liên kết cài đặt ghi nhật ký.cloudaicompanion.loggingSettingBindings.list– để liệt kê các liên kết cài đặt ghi nhật ký.
Ngoài ra, bạn có thể cấp các vai trò được xác định trước Quản trị viên chế độ cài đặt Gemini cho Google Cloud (roles/cloudaicompanion.settingsAdmin) và Quản trị viên sử dụng dịch vụ (roles/serviceusage.serviceUsageAdmin). Tuy nhiên, các vai trò này bao gồm quyền định cấu hình tất cả chế độ cài đặt quản trị viên Gemini cho Google Cloud và quản lý việc sử dụng dịch vụ. Điều này có thể nhiều hơn mức cần thiết để định cấu hình chế độ cài đặt ghi nhật ký.
Định cấu hình tính năng ghi nhật ký của Gemini Code Assist
Các phần sau đây cung cấp các bước cần thiết để bật tính năng thu thập và lưu trữ hoạt động của Gemini Code Assist Standard và Enterprise trong Cloud Logging, bao gồm:
Nhật ký câu lệnh và câu trả lời của Gemini Code Assist Standard và Enterprise, chẳng hạn như hoạt động đầu vào của người dùng, thông tin theo bối cảnh và câu trả lời.
Nhật ký siêu dữ liệu của Gemini Code Assist Tiêu chuẩn và Doanh nghiệp, chẳng hạn như siêu dữ liệu đo từ xa và số dòng mã mà người dùng chấp nhận.
Để biết thêm thông tin về cả hai loại nhật ký này, hãy xem bài viết Xem nhật ký của Gemini.
Bật tính năng ghi nhật ký cho Gemini Code Assist trong một dự án
Chọn một trong các tùy chọn sau:
Giao diện dòng lệnh
Xác minh rằng bạn đã bật API Cloud Logging trong dự án.
Trong bảng điều khiển Cloud, hãy chuyển đến trang Quản trị viên cho Gemini.
Chuyển đến Gemini cho Google Cloud
Trang Gemini cho Google Cloud sẽ tải.
Nhấp vào Cài đặt trong trình đơn điều hướng bên trái.
Trang Cài đặt sẽ tải.
(Không bắt buộc) Nhấp vào Ghi nhật ký siêu dữ liệu của Code Assist để ghi lại siêu dữ liệu do người dùng Gemini Code Assist Tiêu chuẩn và Enterprise tạo trong dự án.
(Không bắt buộc) Nhấp vào Ghi nhật ký cho câu lệnh và câu trả lời của Trợ lý lập trình để ghi lại các câu lệnh và câu trả lời do người dùng Gemini Code Assist Standard và Enterprise tạo trong dự án.
Nhấp vào Save Changes (Lưu thay đổi).
API
Để bật tính năng ghi nhật ký cho Gemini Code Assist Tiêu chuẩn và Gemini Code Assist Doanh nghiệp, hãy sử dụng tài nguyên loggingSettings để xác định chế độ cài đặt ghi nhật ký mà bạn muốn và sử dụng tài nguyên loggingSettings.settingBindings để liên kết chế độ cài đặt với một dự án:
Xác minh rằng bạn đã bật API Cloud Logging trong dự án.
Tạo chế độ cài đặt và giá trị dành riêng cho chế độ cài đặt:
Lấy mã thông báo:
TOKEN=$(gcloud auth print-access-token)
Bật nhật ký Gemini Code Assist Tiêu chuẩn và Doanh nghiệp. Nhật ký người dùng và nhật ký siêu dữ liệu được bật tương ứng với các trường
log_prompts_and_responsesvàlog_metadata. Nếu bạn không muốn bật một trong các trường, hãy loại trừ trường đó khỏi yêu cầu.Chạy lệnh sau để tạo chế độ cài đặt:
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"Thay thế nội dung sau:
CONTAINER_PROJECT_NAME: Nhập mã dự án của dự án nơi lưu trữ tài nguyên liên kết. Đây là dự án mẹ của hoạt động liên kết.LOGS_SETTING_ID: Nhập một tên chế độ cài đặt riêng biệt, chẳng hạn nhưgcalm.
Nếu thành công, lệnh này sẽ trả về một nội dung phản hồi cho biết
log_prompts_and_responsesvàlog_metadatađược đặt thànhtrue:{ "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 }Chạy lệnh sau để tạo chế độ cài đặt liên kết nhật ký Gemini Code Assist Standard và 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"
Thay thế nội dung sau:
TARGET_PROJECT_NAME: Nhập dự án đích mà bạn muốn liên kết. Thường thì dự án này cũng giống như dự án vùng chứa. Tuy nhiên, bạn có thể liên kết một chế độ cài đặt với nhiều dự án để không phải sao chép tài nguyên chế độ cài đặt.LOGS_BINDING_ID: Sử dụng cùng một LOGS_SETTING_ID khi bạn tạo chế độ cài đặt, nhưng hãy thêmb1vào cuối. Ví dụ: sử dụnggcalmb1.
Nếu thành công, lệnh này sẽ trả về siêu dữ liệu của thao tác ở định dạng sau:
{ "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 }
Tắt tính năng ghi nhật ký cho Gemini Code Assist trong một dự án
Chọn một trong các tùy chọn sau:
Giao diện dòng lệnh
Trong bảng điều khiển Cloud, hãy chuyển đến trang Quản trị viên cho Gemini.
Chuyển đến Gemini cho Google Cloud
Trang Gemini cho Google Cloud sẽ tải.
Nhấp vào Cài đặt trong trình đơn điều hướng bên trái.
Trang Cài đặt sẽ tải.
Nhấp vào Ghi nhật ký siêu dữ liệu cho Code Assist để tắt tính năng ghi siêu dữ liệu từ việc sử dụng Gemini Code Assist Tiêu chuẩn và Doanh nghiệp trong dự án.
Nhấp vào Save Changes (Lưu thay đổi).
API
Để tắt tính năng ghi nhật ký cho Gemini Code Assist Tiêu chuẩn và Doanh nghiệp, hãy sử dụng phương thức loggingSetting.
Tạo chế độ cài đặt và giá trị dành riêng cho chế độ cài đặt:
Lấy mã thông báo:
TOKEN=$(gcloud auth print-access-token)
Chạy lệnh sau để tắt chế độ cài đặt nhật ký Gemini Code Assist Tiêu chuẩn và Doanh nghiệp:
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"Thay thế nội dung sau:
CONTAINER_PROJECT_NAME: Nhập mã dự án mẹ.LOGS_SETTING_ID: Nhập tên chế độ cài đặt hiện có, chẳng hạn nhưgcalm.Nếu thành công, lệnh này sẽ trả về một nội dung phản hồi cho biết
log_prompts_and_responsesvàlog_metadatađược đặt thànhfalse:{ "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 }
Thiết lập tính năng ghi nhật ký nhiều dự án
Bạn có thể sử dụng nhật ký từ Gemini Code Assist để tạo chỉ số và trang tổng quan nhằm giám sát mức sử dụng theo từng dự án. Nếu tổ chức của bạn có nhiều dự án, bạn có thể định cấu hình một dự án ghi nhật ký tập trung để thu thập nhật ký từ nhiều dự án và tạo trang tổng quan trên các dự án đó.
Tạo một dự án ghi nhật ký tập trung
Dự án này sẽ đóng vai trò là một trung tâm cho nhật ký của các dự án khác.
Trong Bảng điều khiển Google Cloud, hãy chuyển đến trang Tạo dự án.
Trong cửa sổ Dự án mới, hãy nhập giá trị cho các trường sau:
- Tên dự án: tên cho dự án ghi nhật ký tập trung.
- Tài khoản thanh toán: chọn một tài khoản thanh toán.
- Tổ chức: chọn tổ chức của bạn. Một dự án tập trung chỉ có thể thu thập nhật ký từ các dự án trong cùng một tổ chức.
- Vị trí: chọn một vị trí.
Nhấp vào Tạo.
Định cấu hình các đích ghi nhật ký
Để chuyển nhật ký đến dự án tập trung, hãy định cấu hình bồn lưu trữ nhật ký trong từng dự án riêng lẻ mà bạn muốn thu thập nhật ký.
Để định cấu hình bồn lưu trữ nhật ký cho từng dự án, hãy làm như sau:
- Trong Google Cloud Console, hãy chuyển sang dự án mà bạn muốn thu thập nhật ký.
Chuyển đến trang Log Router (Bộ định tuyến nhật ký):
Nhấp vào Tạo đích nhận.
Đối với Sink details (Thông tin chi tiết về đích nhận), hãy nhập tên và nội dung mô tả cho đích nhận, rồi nhấp vào Next (Tiếp theo).
Đối với Đích đến Sink, hãy làm như sau:
- Trong trình đơn Chọn dịch vụ đích, hãy chọn Thùng ghi nhật ký.
- Trong trình đơn Log bucket (Nhóm nhật ký), hãy chọn Use log bucket in another project (Sử dụng nhóm nhật ký trong một dự án khác).
Trong trường Đích nhận, hãy nhập nội dung sau:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultThay
CENTRALIZED_PROJECT_IDbằng mã dự án của dự án ghi nhật ký tập trung mà bạn đã tạo.Nhấp vào Tiếp theo.
Đối với Chọn nhật ký để đưa vào đích nhận, hãy tạo bộ lọc bao gồm bằng cách nhập nội dung sau vào trường Bộ lọc bao gồm:
resource.type="cloudaicompanion.googleapis.com/Instance"Nhấp vào Tiếp theo.
Đối với Chọn nhật ký để lọc ra khỏi đích, hãy để trống bộ lọc loại trừ rồi nhấp vào Tạo đích.
Sau khi tạo đích nhận, trong trang Log Router (Bộ định tuyến nhật ký), hãy tìm đích nhận mà bạn đã tạo.
Trong cột Danh tính người viết, hãy sao chép toàn bộ địa chỉ email của tài khoản dịch vụ.
Định cấu hình quyền truy cập
Để cấp quyền truy cập cho bồn lưu trữ dữ liệu ghi nhật ký vào dự án tập trung, hãy làm như sau:
- Trong Bảng điều khiển Google Cloud, hãy chuyển sang dự án tập trung mà bạn đã tạo.
Chuyển đến trang IAM:
Nhấp vào Cấp quyền truy cập.
Trong trường Bên giao đại lý mới, hãy dán địa chỉ email tài khoản dịch vụ mà bạn đã sao chép ở phần trước.
Nhấp vào Thêm vai trò khác.
Tìm và chọn vai trò Người ghi bộ chứa nhật ký (
roles/logging.bucketWriter).Nhấp vào Lưu.
Tạo trang tổng quan trong dự án tập trung
Sau khi định cấu hình dự án tập trung để nhận nhật ký, bạn có thể tạo một trang tổng quan để xem các chỉ số từ nhiều dự án:
Trong bảng điều khiển Google Cloud, hãy chuyển đến Giám sát > Trang tổng quan:
Nhấp vào Tạo trang tổng quan.
Trong thanh công cụ, hãy nhấp vào Settings (Cài đặt), rồi chọn JSON > JSON Editor (Trình chỉnh sửa JSON).
Trong Trình chỉnh sửa JSON, hãy dán đoạn mã sau:
{ "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" } } } } ] } }Thay thế nội dung sau:
CENTRALIZED_PROJECT_ID: Mã dự án của dự án ghi nhật ký tập trung mà bạn đã tạo.SOURCE_PROJECT_ID_1vàSOURCE_PROJECT_ID_2: Mã dự án của những dự án mà bạn muốn thu thập nhật ký. Nếu muốn thu thập nhật ký từ nhiều hơn 2 dự án, bạn có thể thêm nhiều mã dự án hơn vào các mệnh đềincủa truy vấn.
Tắt tính năng ghi nhật ký nhiều dự án
Nếu đã định cấu hình tính năng ghi nhật ký Gemini Code Assist cho nhiều dự án, bạn có thể tắt tính năng này bằng cách xoá các đích ghi nhật ký định tuyến nhật ký đến dự án tập trung. Để ngừng gửi nhật ký từ một dự án riêng lẻ đến dự án tập trung, hãy xoá đích nhận nhật ký mà bạn đã tạo trong dự án đó:
- Trong Google Cloud Console, hãy chuyển sang dự án mà bạn muốn ngừng thu thập nhật ký.
Chuyển đến trang Log Router (Bộ định tuyến nhật ký):
Xác định đích nhận định tuyến nhật ký đến dự án tập trung của bạn.
Trong hàng của nguồn nhận đó, hãy nhấp vào Tuỳ chọn khác, rồi chọn Xoá nguồn nhận.
Trong hộp thoại xuất hiện, hãy nhấp vào Xoá.
Lặp lại các bước này cho từng dự án mà bạn muốn ngừng gửi nhật ký đến dự án tập trung.