Dokumen ini menjelaskan cara mengonfigurasi logging Gemini Code Assist Standard dan Enterprise untuk project menggunakan konsol Google Cloud atau API.
Batasan
Pencatatan data log Gemini Standard dan Enterprise terbatas pada interaksi pengguna dengan Gemini Code Assist dalam IDE. Google Cloud
Secara default, log Gemini untuk Google Cloud dikumpulkan berdasarkan per project. Untuk mengetahui petunjuk tentang cara mengonfigurasi project terpusat untuk mengumpulkan log dari beberapa project, lihat Menyiapkan logging multi-project.
Gemini Code Assist di GitHub tidak mendukung logging dengan Cloud Logging.
Sebelum memulai
Pastikan Google Cloud project Anda dilampirkan ke akun penagihan.
Memverifikasi izin IAM
Untuk mengonfigurasi logging Gemini Code Assist, Anda memerlukan izin IAM tertentu. Untuk mengikuti prinsip hak istimewa terendah, berikan peran khusus yang hanya berisi izin yang diperlukan.
Minta administrator Anda untuk membuat peran khusus yang mencakup izin berikut:
serviceusage.services.enable—untuk mengaktifkan API untuk project Anda.cloudaicompanion.loggingSettings.create—untuk membuat setelan logging.cloudaicompanion.loggingSettings.get—untuk melihat setelan logging.cloudaicompanion.loggingSettings.list—untuk mencantumkan setelan logging.cloudaicompanion.loggingSettings.update—untuk memperbarui setelan logging.cloudaicompanion.loggingSettingBindings.create—untuk mengikat setelan logging ke project.cloudaicompanion.loggingSettingBindings.get—untuk melihat binding setelan logging.cloudaicompanion.loggingSettingBindings.list—untuk mencantumkan binding setelan logging.
Atau, Anda dapat memberikan peran bawaan
Admin Setelan Gemini untuk Google Cloud (roles/cloudaicompanion.settingsAdmin) dan
Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin).
Namun, peran ini mencakup izin untuk mengonfigurasi semua setelan admin Gemini untuk Google Cloud dan mengelola penggunaan layanan, yang mungkin lebih dari yang diperlukan untuk mengonfigurasi setelan logging. Google Cloud
Mengonfigurasi logging Gemini Code Assist
Bagian berikut memberikan langkah-langkah yang diperlukan untuk mengaktifkan pengumpulan dan penyimpanan aktivitas Gemini Code Assist Standard dan Enterprise di Cloud Logging, termasuk:
Log perintah dan respons Gemini Code Assist Standard dan Enterprise, seperti input pengguna, informasi kontekstual, dan respons.
Log metadata Gemini Code Assist Standard dan Enterprise, seperti metadata telemetri dan baris kode yang diterima oleh pengguna.
Untuk mengetahui detail selengkapnya tentang kedua jenis log, lihat Melihat log Gemini.
Mengaktifkan logging untuk Gemini Code Assist di sebuah project
Pilih salah satu opsi berikut:
Konsol
Pastikan Anda telah mengaktifkan Cloud Logging API di project.
Di konsol Google Cloud , buka halaman Admin untuk Gemini.
Buka Gemini untuk Google Cloud
Halaman Gemini untuk Google Cloud akan dimuat.
Klik Setelan di menu navigasi kiri.
Halaman Setelan akan dimuat.
(Opsional) Klik Logging for Code Assist metadata untuk mencatat metadata yang dihasilkan oleh pengguna Gemini Code Assist Standard dan Enterprise dalam project.
(Opsional) Klik Logging for Code Assist prompts and responses untuk mencatat perintah dan respons yang dihasilkan oleh pengguna Gemini Code Assist Standard dan Enterprise dalam project.
Klik Simpan Perubahan.
API
Untuk mengaktifkan logging untuk Gemini Code Assist Standard dan Enterprise, gunakan resource loggingSettings untuk menentukan setelan logging yang Anda inginkan, dan gunakan resource loggingSettings.settingBindings untuk mengikat setelan ke project:
Pastikan Anda telah mengaktifkan Cloud Logging API di project.
Buat setelan dan nilai khusus setelan:
Dapatkan token:
TOKEN=$(gcloud auth print-access-token)
Aktifkan log Gemini Code Assist Standard dan Enterprise. Log pengguna dan log metadata diaktifkan dengan kolom
log_prompts_and_responsesdanlog_metadata. Jika Anda tidak ingin mengaktifkan salah satu kolom, kecualikan kolom tersebut dari permintaan.Jalankan perintah berikut untuk membuat setelan:
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"Ganti kode berikut:
CONTAINER_PROJECT_NAME: Masukkan project ID project tempat resource binding disimpan. Ini adalah project induk binding.LOGS_SETTING_ID: Masukkan nama setelan unik, sepertigcalm.
Jika berhasil, perintah akan menampilkan isi respons yang menunjukkan
log_prompts_and_responsesdanlog_metadataditetapkan ketrue:{ "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 }Jalankan perintah berikut untuk membuat binding setelan log Gemini Code Assist Standard dan 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"
Ganti kode berikut:
TARGET_PROJECT_NAME: Masukkan project target yang akan mengikat binding. Project ini sering kali sama dengan project penampung. Namun, Anda dapat mengikat setelan ke beberapa project sehingga resource setelan tidak perlu diduplikasi.LOGS_BINDING_ID: Gunakan LOGS_SETTING_ID yang sama saat Anda membuat setelan, tetapi tambahkanb1. Misalnya, gunakangcalmb1.
Jika berhasil, perintah akan menampilkan metadata operasi dalam format berikut:
{ "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 }
Menonaktifkan logging untuk Gemini Code Assist dalam sebuah project
Pilih salah satu opsi berikut:
Konsol
Di konsol Google Cloud , buka halaman Admin untuk Gemini.
Buka Gemini untuk Google Cloud
Halaman Gemini untuk Google Cloud akan dimuat.
Klik Setelan di menu navigasi kiri.
Halaman Setelan akan dimuat.
Klik Logging for Code Assist metadata untuk menonaktifkan perekaman metadata dari penggunaan Gemini Code Assist Standard dan Enterprise dalam project.
Klik Simpan Perubahan.
API
Untuk menonaktifkan logging untuk Gemini Code Assist Standard dan Enterprise, gunakan metode loggingSetting.
Buat setelan dan nilai khusus setelan:
Dapatkan token:
TOKEN=$(gcloud auth print-access-token)
Jalankan perintah berikut untuk menonaktifkan setelan log Gemini Code Assist Standard dan 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"Ganti kode berikut:
CONTAINER_PROJECT_NAME: Masukkan project ID induk.LOGS_SETTING_ID: Masukkan nama setelan yang ada, sepertigcalm.Jika berhasil, perintah akan menampilkan isi respons yang menunjukkan
log_prompts_and_responsesdanlog_metadataditetapkan kefalse:{ "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 }
Menyiapkan logging multi-project
Anda dapat menggunakan log dari Gemini Code Assist untuk membuat metrik dan dasbor untuk memantau penggunaan per project. Jika organisasi Anda memiliki beberapa project, Anda dapat mengonfigurasi project logging terpusat untuk mengumpulkan log dari beberapa project dan membuat dasbor di seluruh project tersebut.
Membuat project logging terpusat
Project ini akan berfungsi sebagai hub untuk log dari project Anda yang lain.
Di konsol Google Cloud , buka halaman Project creation.
Di jendela New Project, masukkan nilai untuk kolom berikut:
- Nama project: nama untuk project logging terpusat Anda.
- Akun penagihan: pilih akun penagihan.
- Organisasi: pilih organisasi Anda. Project terpusat hanya dapat mengumpulkan log dari project dalam organisasi yang sama.
- Lokasi: pilih lokasi.
Klik Create.
Mengonfigurasi sink log
Untuk mengarahkan log ke project terpusat, konfigurasi sink log di setiap project individual yang ingin Anda kumpulkan lognya.
Untuk mengonfigurasi sink log untuk setiap project, lakukan hal berikut:
- Di konsol Google Cloud , beralihlah ke project yang ingin Anda kumpulkan lognya.
Buka halaman Log Router:
Klik Create sink.
Untuk Sink details, masukkan nama dan deskripsi untuk sink, lalu klik Next.
Untuk Sink destination, lakukan hal berikut:
- Di menu Select sink service, pilih Logging bucket.
- Di menu Bucket log, pilih Gunakan bucket log di project lain.
Di kolom Sink destination, masukkan berikut ini:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultGanti
CENTRALIZED_PROJECT_IDdengan project ID project logging terpusat yang Anda buat.Klik Berikutnya.
Untuk Pilih log untuk disertakan dalam sink, buat filter penyertaan dengan memasukkan perintah berikut di kolom Filter penyertaan:
resource.type="cloudaicompanion.googleapis.com/Instance"Klik Berikutnya.
Untuk Choose logs to filter out of sink, biarkan filter pengecualian kosong, lalu klik Create sink.
Setelah sink dibuat, di halaman Log Router, temukan sink yang Anda buat.
Di kolom Writer Identity, salin alamat email akun layanan lengkap.
Konfigurasi akses
Untuk memberikan akses bagi sink Anda agar dapat menulis log ke project terpusat, lakukan hal berikut:
- Di konsol Google Cloud , beralihlah ke project terpusat yang Anda buat.
Buka halaman IAM:
Klik Grant access.
Di kolom New principals, tempel alamat email akun layanan yang Anda salin di bagian sebelumnya.
Klik Add another role.
Telusuri dan pilih peran Logs Bucket Writer (
roles/logging.bucketWriter).Klik Simpan.
Membuat dasbor di project terpusat
Setelah mengonfigurasi project terpusat untuk menerima log, Anda dapat membuat dasbor untuk melihat metrik dari beberapa project:
Di konsol Google Cloud , buka Monitoring > Dashboards:
Klik Buat Dasbor.
Di toolbar, klik Setelan, lalu pilih JSON > JSON Editor.
Di JSON Editor, tempel kode berikut:
{ "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" } } } } ] } }Ganti kode berikut:
CENTRALIZED_PROJECT_ID: Project ID dari project logging terpusat yang Anda buat.SOURCE_PROJECT_ID_1danSOURCE_PROJECT_ID_2: Project ID project yang ingin Anda kumpulkan lognya. Jika ingin mengumpulkan log dari lebih dari dua project, Anda dapat menambahkan lebih banyak ID project ke klausainkueri.
Menonaktifkan logging multi-project
Jika Anda mengonfigurasi logging Gemini Code Assist untuk beberapa project, Anda dapat menonaktifkannya dengan menghapus sink log yang merutekan log ke project terpusat. Untuk berhenti mengirim log dari project individual ke project terpusat, hapus sink log yang Anda buat di project tersebut:
- Di konsol Google Cloud , beralihlah ke project yang ingin Anda hentikan pengumpulan lognya.
Buka halaman Log Router:
Identifikasi sink yang merutekan log ke project terpusat Anda.
Di baris untuk sink tersebut, klik Tindakan lainnya, lalu pilih Hapus sink.
Pada dialog yang muncul, klik Hapus.
Ulangi langkah-langkah ini untuk setiap project yang ingin Anda hentikan pengiriman lognya ke project terpusat.