Logging Gemini Code Assist Standard dan Enterprise memungkinkan Anda melacak interaksi dan penggunaan developer di seluruh project Anda. Dokumen ini menjelaskan cara menggunakan Google Cloud konsol atau REST API untuk mengonfigurasi logging untuk Gemini Code Assist.
Batasan
Pencatatan data log Gemini Code Assist Standard dan Enterprise terbatas pada interaksi pengguna dengan Gemini Code Assist dalam IDE.
Secara default, log Gemini Code Assist dikumpulkan per project. Untuk mengetahui petunjuk 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 project Google Cloud 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 menyertakan 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
Gemini for Google Cloud Settings Admin
(roles/cloudaicompanion.settingsAdmin) dan
Service Usage Admin
(roles/serviceusage.serviceUsageAdmin). Namun, peran ini mencakup
izin untuk mengonfigurasi setelan administrator Gemini lainnya di
Google Cloud dan mengelola penggunaan layanan di Google Cloud, yang mungkin
lebih dari yang diperlukan untuk mengonfigurasi setelan logging.
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 Code Assist.
Mengaktifkan logging untuk Gemini Code Assist di project
Pilih salah satu opsi berikut:
Konsol
Pastikan Anda telah mengaktifkan Cloud Logging API di project.
Di Google Cloud konsol, buka halaman Admin for Gemini.
Klik Settings di menu navigasi kiri.
(Opsional) Klik Logging for Code Assist metadata untuk mencatat metadata yang dihasilkan oleh pengguna Gemini Code Assist Standard dan Enterprise di 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 Save Changes.
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, masing-masing. 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 perintah 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 diikat oleh binding. Nama 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 perintah 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 di project
Pilih salah satu opsi berikut:
Konsol
Di Google Cloud konsol, buka halaman Admin for Gemini.
Klik Settings di menu navigasi kiri.
Klik Logging for Code Assist metadata untuk menonaktifkan pencatatan metadata dari penggunaan Gemini Code Assist Standard dan Enterprise di project.
Klik Save Changes.
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 perintah 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 Google Cloud konsol, buka halaman Project creation.
Di jendela New Project, masukkan nilai untuk kolom berikut:
- Nama project: nama untuk project pencatatan terpusat Anda.
- Akun penagihan: pilih akun penagihan.
- Organisasi: pilih organisasi Anda. Project terpusat hanya dapat mengumpulkan log dari project di organisasi yang sama.
- Lokasi: pilih lokasi.
Klik Create.
Mengonfigurasi sink log
Untuk mengarahkan log ke project terpusat, konfigurasikan sink log di setiap project individual yang lognya ingin Anda kumpulkan.
Untuk mengonfigurasi sink log untuk setiap project, lakukan hal berikut:
- Di Google Cloud konsol, beralihlah ke project yang lognya ingin Anda kumpulkan.
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 Log bucket, pilih Use log bucket in another project.
Di kolom Sink destination, masukkan hal berikut:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultGanti
CENTRALIZED_PROJECT_IDdengan project ID project pencatatan terpusat yang Anda buat.Klik Next.
Untuk Choose logs to include in sink, buat filter penyertaan dengan memasukkan hal berikut di kolom Inclusion filter:
resource.type="cloudaicompanion.googleapis.com/Instance"Klik Next.
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 untuk menulis log ke project terpusat, lakukan hal berikut:
- Di Google Cloud konsol, beralihlah ke project terpusat yang Anda buat.
Buka halaman IAM:
Klik Grant access.
Di kolom New principals, tempelkan alamat email akun layanan yang Anda salin di bagian sebelumnya.
Klik Add another role.
Cari dan pilih peran Logs Bucket Writer (
roles/logging.bucketWriter).Klik Save.
Membuat dasbor di project terpusat
Setelah mengonfigurasi project terpusat untuk menerima log, Anda dapat membuat dasbor untuk melihat metrik dari beberapa project:
Di Google Cloud konsol, buka Monitoring > Dashboards:
Klik Create dashboard.
Di toolbar, klik Settings, lalu pilih JSON > JSON Editor.
Di JSON Editor, tempelkan 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 project pencatatan terpusat yang Anda buat.SOURCE_PROJECT_ID_1danSOURCE_PROJECT_ID_2: Project ID project yang lognya ingin Anda kumpulkan. Jika ingin mengumpulkan log dari lebih dari dua project, Anda dapat menambahkan lebih banyak project ID 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 Google Cloud konsol, beralihlah ke project yang lognya tidak ingin Anda kumpulkan lagi.
Buka halaman Log Router:
Identifikasi sink yang merutekan log ke project terpusat Anda.
Di baris untuk sink tersebut, klik More actions, lalu pilih Delete sink.
Di dialog yang muncul, klik Delete.
Ulangi langkah-langkah ini untuk setiap project yang lognya tidak ingin Anda kirim lagi ke project terpusat.