In diesem Dokument wird beschrieben, wie Sie die Protokollierung für Gemini Code Assist Standard und Enterprise für ein Projekt über die Google Cloud Console oder eine API konfigurieren.
Beschränkungen
Die Aufzeichnung von Logdaten für Gemini Standard und Enterprise in Google Cloud ist auf Nutzerinteraktionen mit Gemini Code Assist in einer IDE beschränkt.
Standardmäßig werden Gemini for Google Cloud-Logs pro Projekt erfasst. Eine Anleitung zum Konfigurieren eines zentralisierten Projekts zum Erfassen von Logs aus mehreren Projekten finden Sie unter Logging für mehrere Projekte einrichten.
Gemini Code Assist in GitHub unterstützt kein Logging mit Cloud Logging.
Hinweis
Prüfen Sie, ob Ihr Google Cloud-Projekt mit einem Rechnungskonto verknüpft ist.
IAM-Berechtigungen überprüfen
Zum Konfigurieren des Loggings für Gemini Code Assist benötigen Sie bestimmte IAM-Berechtigungen. Um das Prinzip der geringsten Berechtigung zu befolgen, weisen Sie eine benutzerdefinierte Rolle zu, die nur die erforderlichen Berechtigungen enthält.
Bitten Sie Ihren Administrator, eine benutzerdefinierte Rolle mit den folgenden Berechtigungen zu erstellen:
serviceusage.services.enable– zum Aktivieren von APIs für Ihr Projektcloudaicompanion.loggingSettings.create– zum Erstellen von Logging-Einstellungencloudaicompanion.loggingSettings.get– zum Aufrufen von Logging-Einstellungencloudaicompanion.loggingSettings.list– zum Auflisten von Logging-Einstellungencloudaicompanion.loggingSettings.update– zum Aktualisieren von Logging-Einstellungencloudaicompanion.loggingSettingBindings.create– zum Binden von Logging-Einstellungen an ein Projektcloudaicompanion.loggingSettingBindings.get– zum Aufrufen von Bindungen für Logging-Einstellungencloudaicompanion.loggingSettingBindings.list– zum Auflisten von Bindungen für Logging-Einstellungen
Alternativ können Sie die vordefinierten Rollen
Gemini for Google Cloud Settings Admin (roles/cloudaicompanion.settingsAdmin) und
Service Usage Admin (roles/serviceusage.serviceUsageAdmin) zuweisen.
Diese Rollen enthalten jedoch Berechtigungen zum Konfigurieren aller Administratoreinstellungen für Gemini for Google Cloud
und zum Verwalten der Dienstnutzung. Das ist möglicherweise mehr als zum Konfigurieren von Logging-Einstellungen erforderlich.
Logging für Gemini Code Assist konfigurieren
In den folgenden Abschnitten finden Sie die erforderlichen Schritte, um die Erfassung und Speicherung von Gemini Code Assist Standard- und Enterprise-Aktivitäten in Cloud Logging zu aktivieren. Dazu gehören:
Gemini Code Assist Standard- und Enterprise-Logs für Prompts und Antworten, z. B. Nutzereingaben, Kontextinformationen und Antworten.
Metadatenlogs für Gemini Code Assist Standard und Enterprise, z. B. Telemetriedaten und vom Nutzer akzeptierte Codezeilen.
Weitere Informationen zu beiden Logtypen finden Sie unter Gemini-Logs ansehen.
Logging für Gemini Code Assist in einem Projekt aktivieren
Wählen Sie eine der folgenden Optionen aus:
Console
Kontrollieren Sie, dass Sie die Cloud Logging API im Projekt aktiviert haben.
Rufen Sie in der Google Cloud Console die Seite Administrator für Gemini auf.
Die Seite Gemini for Google Cloud wird geladen.
Klicken Sie im linken Navigationsmenü auf Einstellungen.
Die Seite Einstellungen wird geladen.
Optional: Klicken Sie auf Logging für Code Assist-Metadaten, um die Metadaten aufzuzeichnen, die von Nutzern von Gemini Code Assist Standard und Enterprise im Projekt generiert wurden.
Optional: Klicken Sie auf Logging für Code Assist-Prompts und ‑Antworten, um die Prompts und Antworten aufzuzeichnen, die von Nutzern von Gemini Code Assist Standard und Enterprise im Projekt generiert wurden.
Klicken Sie auf Änderungen speichern.
API
Wenn Sie das Logging für Gemini Code Code Assist Standard und
Enterprise aktivieren möchten, verwenden Sie die Ressource loggingSettings, um die gewünschten Logging
Einstellungen zu definieren, und die Ressource loggingSettings.settingBindings, um die Einstellungen an ein Projekt zu
binden:
Kontrollieren Sie, dass Sie die Cloud Logging API im Projekt aktiviert haben.
Erstellen Sie die Einstellung und einen einstellungsspezifischen Wert:
Token abrufen:
TOKEN=$(gcloud auth print-access-token)
Aktivieren Sie Logs für Gemini Code Assist Standard und Enterprise. Nutzer- und Metadatenlogs werden mit den Feldern
log_prompts_and_responsesbzw.log_metadataaktiviert. Wenn Sie eines der Felder nicht aktivieren möchten, schließen Sie es aus der Anfrage aus.Führen Sie den folgenden Befehl aus, um die Einstellung zu erstellen:
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"Ersetzen Sie Folgendes:
CONTAINER_PROJECT_NAME: Geben Sie die Projekt-ID des Projekts ein, in dem die Bindungsressource gespeichert ist. Dies ist das übergeordnete Projekt der Bindung.LOGS_SETTING_ID: Geben Sie einen eindeutigen Namen für die Einstellung ein, z. B.gcalm.
Wenn der Befehl erfolgreich ausgeführt wurde, wird ein Antworttext zurückgegeben, in dem
log_prompts_and_responsesundlog_metadataauftruegesetzt sind:{ "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 }Führen Sie den folgenden Befehl aus, um die Bindung für die Einstellung für Gemini Code Assist Standard- und Enterprise-Logs zu erstellen:
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"
Ersetzen Sie Folgendes:
TARGET_PROJECT_NAME: Geben Sie das Zielprojekt ein, an das die Bindung gebunden werden soll. Das ist oft dasselbe wie das Containerprojekt. Sie können eine Einstellung jedoch an mehrere Projekte binden, sodass die Einstellungsressource nicht dupliziert werden muss.LOGS_BINDING_ID: Verwenden Sie dieselbe LOGS_SETTING_ID, die Sie beim Erstellen der Einstellung verwendet haben, hängen Sie aberb1an. Verwenden Sie zum Beispielgcalmb1.
Wenn der Befehl erfolgreich ist, werden die Metadaten des Vorgangs im folgenden Format zurückgegeben:
{ "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 }
Logging für Gemini Code Assist in einem Projekt deaktivieren
Wählen Sie eine der folgenden Optionen aus:
Console
Rufen Sie in der Google Cloud Console die Seite Administrator für Gemini auf.
Die Seite Gemini for Google Cloud wird geladen.
Klicken Sie im linken Navigationsmenü auf Einstellungen.
Die Seite Einstellungen wird geladen.
Klicken Sie auf Logging für Code Assist-Metadaten, um die Aufzeichnung der Metadaten der Nutzung von Gemini Code Assist Standard und Enterprise im Projekt zu deaktivieren.
Klicken Sie auf Änderungen speichern.
API
Wenn Sie das Logging für Gemini Code Assist Standard und Enterprise deaktivieren möchten, verwenden Sie die Methode loggingSetting.
Erstellen Sie die Einstellung und einen einstellungsspezifischen Wert:
Token abrufen:
TOKEN=$(gcloud auth print-access-token)
Führen Sie den folgenden Befehl aus, um die Einstellungen für die Logs von Gemini Code Assist Standard und Enterprise zu deaktivieren:
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"Ersetzen Sie Folgendes:
CONTAINER_PROJECT_NAME: Geben Sie die ID des übergeordneten Projekts ein.LOGS_SETTING_ID: Geben Sie den Namen der vorhandenen Einstellung ein, z. B.gcalm.Wenn der Befehl erfolgreich ausgeführt wurde, wird ein Antworttext zurückgegeben, in dem
log_prompts_and_responsesundlog_metadataauffalsegesetzt sind:{ "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 }
Logging für mehrere Projekte einrichten
Sie können Logs von Gemini Code Assist verwenden, um Messwerte und Dashboards für das Monitoring der Nutzung pro Projekt zu erstellen. Wenn Ihre Organisation mehrere Projekte hat, können Sie ein zentralisiertes Logging-Projekt konfigurieren, um Logs aus mehreren Projekten zu erfassen und Dashboards für diese Projekte zu generieren.
Zentralisiertes Logging-Projekt erstellen
Dieses Projekt dient als Hub für Logs aus Ihren anderen Projekten.
Rufen Sie in der Google Cloud Console die Seite Projekterstellung auf.
Geben Sie im Fenster Neues Projekt Werte für die folgenden Felder ein:
- Projektname: ein Name für Ihr zentralisiertes Logging-Projekt
- Rechnungskonto: Wählen Sie ein Rechnungskonto aus.
- Organisation: Wählen Sie Ihre Organisation aus. Ein zentralisiertes Projekt kann nur Logs aus Projekten in derselben Organisation erfassen.
- Standort: Wählen Sie einen Standort aus.
Klicken Sie auf Erstellen.
Logsenken konfigurieren
Wenn Sie Logs an das zentralisierte Projekt weiterleiten möchten, konfigurieren Sie Logsenken in jedem der einzelnen Projekte, aus denen Sie Logs erfassen möchten.
gesendet werden.So konfigurieren Sie Logsenken für jedes Projekt:
- Wechseln Sie in der Google Cloud Console zu einem Projekt, aus dem Sie Logs erfassen möchten.
Rufen Sie die Seite Log Router auf.
Klicken Sie auf Senke erstellen.
Geben Sie unter Senkendetails einen Namen und eine Beschreibung für die Senke ein und klicken Sie dann auf Weiter.
Gehen Sie für das Senkenziel so vor:
- Wählen Sie im Menü Senkendienst auswählen die Option Logging-Bucket aus.
- Wählen Sie im Menü Log-Bucket die Option Log-Bucket in einem anderen Projekt verwenden aus.
Geben Sie im Feld Senkenziel Folgendes ein:
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultErsetzen Sie
CENTRALIZED_PROJECT_IDdurch die Projekt-ID des von Ihnen erstellten zentralisierten Logging-Projekts.Klicken Sie auf Weiter.
Erstellen Sie unter Logs auswählen, die in der Senke enthalten sind einen Einschlussfilter, indem Sie Folgendes in das Feld Einschlussfilter eingeben:
resource.type="cloudaicompanion.googleapis.com/Instance"Klicken Sie auf Weiter.
Lassen Sie unter Logs zum Filtern aus der Senke auswählen den Ausschlussfilter leer und klicken Sie auf Senke erstellen.
Suchen Sie nach dem Erstellen der Senke auf der Seite Log Router die von Ihnen erstellte Senke.
Kopieren Sie in der Spalte Autor-Identität die vollständige E-Mail-Adresse des Dienstkontos.
Zugriff konfigurieren
So gewähren Sie Ihrer Senke Zugriff, um Logs in das zentralisierte Projekt zu schreiben:
- Wechseln Sie in der Google Cloud Console zu dem von Ihnen erstellten zentralisierten Projekt.
Rufen Sie die Seite IAM auf.
Klicken Sie auf Zugriff erlauben.
Fügen Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienstkontos ein, die Sie im vorherigen Abschnitt kopiert haben.
Klicken Sie auf Weitere Rolle hinzufügen.
Suchen Sie nach der Rolle Logs Bucket Writer (
roles/logging.bucketWriter) und wählen Sie sie aus.Klicken Sie auf Speichern.
Dashboard im zentralisierten Projekt erstellen
Nachdem Sie Ihr zentralisiertes Projekt für den Empfang von Logs konfiguriert haben, können Sie ein Dashboard erstellen, um Messwerte aus mehreren Projekten aufzurufen:
Rufen Sie in der Google Cloud Console Monitoring > Dashboards auf:
Klicken Sie auf Dashboard erstellen.
Klicken Sie in der Symbolleiste auf Einstellungen und wählen Sie dann JSON > JSON-Editor aus.
Fügen Sie im JSON-Editor den folgenden Code ein:
{ "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" } } } } ] } }Ersetzen Sie Folgendes:
CENTRALIZED_PROJECT_ID: Die Projekt-ID des von Ihnen erstellten zentralisierten Logging-Projekts.SOURCE_PROJECT_ID_1undSOURCE_PROJECT_ID_2: Die Projekt-IDs der Projekte, aus denen Sie Logs erfassen möchten. Wenn Sie Logs aus mehr als zwei Projekten erfassen möchten, können Sie der Abfrage weitere Projekt-IDs in denin-Klauseln hinzufügen.
Logging für mehrere Projekte deaktivieren
Wenn Sie das Logging für Gemini Code Assist für mehrere Projekte konfiguriert haben, können Sie es deaktivieren, indem Sie die Logsenken löschen, die Logs an das zentralisierte Projekt weiterleiten. Wenn Sie keine Logs mehr von einem einzelnen Projekt an das zentralisierte Projekt senden möchten, löschen Sie die Logsenke, die Sie in diesem Projekt erstellt haben:
- Wechseln Sie in der Google Cloud Console zu einem Projekt, aus dem Sie keine Logs mehr erfassen möchten.
Rufen Sie die Seite Log Router auf.
Suchen Sie die Senke, die Logs an Ihr zentralisiertes Projekt weiterleitet.
Klicken Sie in der Zeile für diese Senke auf Weitere Aktionen und wählen Sie dann Senke löschen aus.
Klicken Sie im angezeigten Dialogfeld auf Löschen.
Wiederholen Sie diese Schritte für jedes Projekt, aus dem Sie keine Logs mehr an das zentralisierte Projekt senden möchten.