Logging Gemini Code Assist Standard dan Enterprise memungkinkan Anda melacak interaksi dan penggunaan developer di seluruh project Anda. Dokumen ini menjelaskan cara menggunakan konsol Google Cloud atau REST API guna mengonfigurasi logging untuk Gemini Code Assist.
Batasan
Perekaman 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 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.
Log Gemini Code Assist mencatat jumlah token gabungan (
totalTokenCount) untuk setiap permintaan chat dan agen (CompleteTask), dan Anda dapat mengatribusikannya kepada pengguna dengan labellabels.user_id. Jumlah ini muncul di kolomRequestLog.metadata.totalTokenCount,ResponseLog.metadata.totalTokenCount, danMetadataLog.apiRequest.totalTokenCount. Log untuk permintaan penyelesaian kode dan permintaan pembuatan kode (CompleteCodedanGenerateCode) serta log metadata yang mencatat peristiwa telemetri, seperti peristiwacodeExposure,codeAcceptance,chatExposure, danchatAcceptance, tidak menyertakan jumlah token. Log dan metrik Cloud Monitoring tidak mencatat jumlah token perintah dan respons yang terpisah. Untuk melihat penggunaan token gabungan untuk project Anda, lihat Metrik token dan kuota.
Sebelum memulai
Pastikan project Google Cloud Anda ditautkan 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 bagi 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 sebuah project
Pilih salah satu opsi berikut:
Konsol
Pastikan Anda telah mengaktifkan API Cloud Logging di project.
Di konsol Google Cloud , buka halaman Admin for Gemini.
Klik Setelan di menu navigasi kiri.
(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 bagi 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 API Cloud Logging di project.
Buat setelan dan nilai khusus setelan:
Dapatkan token:
TOKEN=$(gcloud auth print-access-token)
Mengaktifkan 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 dari project tempat resource binding disimpan. Ini adalah project induk binding.LOGS_SETTING_ID: Masukkan nama setelan yang 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 harus diikat dengan 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 berhasil, perintah ini 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 for Gemini.
Klik Setelan di menu navigasi kiri.
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 guna 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:
- Project name: nama untuk project pencatatan terpusat Anda.
- Billing account: pilih akun penagihan.
- Organization: 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, konfigurasikan sink log di setiap project 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 log-nya.
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 kode berikut:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultGanti
CENTRALIZED_PROJECT_IDdengan project ID dari project pencatatan terpusat yang Anda buat.Klik Berikutnya.
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 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 lengkap akun layanan.
Konfigurasi akses
Untuk memberikan akses bagi sink Anda untuk 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 Settings, 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 pencatatan terpusat yang Anda buat.SOURCE_PROJECT_ID_1danSOURCE_PROJECT_ID_2: Project ID dari project yang ingin Anda kumpulkan log-nya. 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 setiap project 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 More actions, lalu pilih Delete sink.
Pada dialog yang muncul, klik Hapus.
Ulangi langkah-langkah ini untuk setiap project yang ingin Anda hentikan pengiriman lognya ke project terpusat.