Ce document explique comment configurer la journalisation Gemini Code Assist Standard et Enterprise pour un projet à l'aide de la console Google Cloud ou d'une API.
Limites
L'enregistrement des données de journaux Gemini Code Assist Standard et Enterprise est limité aux interactions des utilisateurs avec Gemini Code Assist dans un IDE.
Par défaut, les journaux Gemini Code Assist sont collectés par projet. Pour savoir comment configurer un projet centralisé afin de collecter les journaux de plusieurs projets, consultez Configurer la journalisation multiprojet.
Gemini Code Assist sur GitHub n'est pas compatible avec la journalisation avec Cloud Logging.
Avant de commencer
Vérifiez que votre projet Google Cloud est associé à un compte de facturation.
Vérifier les autorisations IAM
Pour configurer la journalisation Gemini Code Assist, vous avez besoin d'autorisations IAM spécifiques. Pour suivre le principe du moindre privilège, accordez un rôle personnalisé qui ne contient que les autorisations nécessaires.
Demandez à votre administrateur de créer un rôle personnalisé incluant les autorisations suivantes :
serviceusage.services.enable: permet d'activer les API pour votre projet.cloudaicompanion.loggingSettings.create: permet de créer des paramètres de journalisation.cloudaicompanion.loggingSettings.get: permet d'afficher les paramètres de journalisation.cloudaicompanion.loggingSettings.list: permet de lister les paramètres de journalisation.cloudaicompanion.loggingSettings.update: permet de mettre à jour les paramètres de journalisation.cloudaicompanion.loggingSettingBindings.create: permet d'associer des paramètres de journalisation à un projet.cloudaicompanion.loggingSettingBindings.get: permet d'afficher les liaisons des paramètres de journalisation.cloudaicompanion.loggingSettingBindings.list: permet de lister les liaisons des paramètres de journalisation.
Vous pouvez également attribuer les rôles prédéfinis
Administrateur des paramètres de Gemini pour Google Cloud
(roles/cloudaicompanion.settingsAdmin) et
Administrateur de l'utilisation des services
(roles/serviceusage.serviceUsageAdmin). Toutefois, ces rôles incluent
des autorisations permettant de configurer d'autres paramètres d'administrateur Gemini dans
Google Cloud et de gérer l'utilisation des services dans Google Cloud, ce qui peut
être plus que nécessaire pour configurer les paramètres de journalisation.
Configurer la journalisation Gemini Code Assist
Les sections suivantes décrivent les étapes à suivre pour activer la collecte et le stockage de l'activité Gemini Code Assist Standard et Enterprise dans Cloud Logging, y compris :
les journaux des prompts et des réponses de Gemini Code Assist Standard et Enterprise, tels que les entrées utilisateur, les informations contextuelles et les réponses ;
les journaux de métadonnées Gemini Code Assist Standard et Enterprise, tels que les métadonnées de télémétrie et les lignes de code acceptées par l'utilisateur.
Pour en savoir plus sur les deux types de journaux, consultez Afficher les journaux Gemini Code Assist.
Activer la journalisation pour Gemini Code Assist dans un projet
Sélectionnez l'une des options suivantes :
Console
Vérifiez que vous avez activé l'API Cloud Logging dans le projet.
Dans la Google Cloud console, accédez à la page Administration de Gemini.
Cliquez sur Paramètres dans le menu de navigation de gauche.
(Facultatif) Cliquez sur Journalisation des métadonnées Code Assist pour enregistrer les métadonnées générées par les utilisateurs de Gemini Code Assist Standard et Enterprise dans le projet.
(Facultatif) Cliquez sur Journalisation des prompts et des réponses de Code Assist pour enregistrer les prompts et les réponses générés par les utilisateurs de Gemini Code Assist Standard et Enterprise dans le projet.
Cliquez sur Enregistrer les modifications.
API
Pour activer la journalisation pour Gemini Code Assist Standard et
Enterprise, utilisez la ressource loggingSettings pour définir les paramètres de journalisation
souhaités, puis utilisez la ressource loggingSettings.settingBindings pour
associer les paramètres à un projet :
Vérifiez que vous avez activé l'API Cloud Logging dans le projet.
Créez le paramètre et une valeur spécifique à ce paramètre :
Obtenez le jeton :
TOKEN=$(gcloud auth print-access-token)
Activez les journaux Gemini Code Assist Standard et Enterprise. Les journaux utilisateur et les journaux de métadonnées sont activés avec les champs
log_prompts_and_responsesetlog_metadata, respectivement. Si vous ne souhaitez pas activer l'un des champs, excluez-le de la requête.Exécutez la commande suivante pour créer le paramètre :
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"Remplacez les éléments suivants :
CONTAINER_PROJECT_NAME: saisissez l'ID du projet dans lequel la ressource de liaison est stockée. Il s'agit du projet parent de la liaison.LOGS_SETTING_ID: saisissez un nom de paramètre unique, tel quegcalm.
Si la commande aboutit, elle renvoie un corps de réponse qui indique que
log_prompts_and_responsesetlog_metadatasont définis surtrue:{ "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 }Exécutez la commande suivante pour créer la liaison du paramètre de journaux Gemini Code Assist Standard et 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"
Remplacez les éléments suivants :
TARGET_PROJECT_NAME: saisissez le projet cible auquel la liaison doit être associée. Il s'agit souvent du projet de conteneur. Toutefois, vous pouvez associer un paramètre à plusieurs projets afin que la ressource de paramètre n'ait pas besoin d'être dupliquée.LOGS_BINDING_ID: utilisez le même LOGS_SETTING_ID que celui que vous avez utilisé pour créer le paramètre, mais ajoutez-yb1. Par exemple, utilisezgcalmb1.
Si la commande aboutit, elle renvoie les métadonnées de l'opération au format suivant :
{ "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 }
Désactiver la journalisation pour Gemini Code Assist dans un projet
Sélectionnez l'une des options suivantes :
Console
Dans la Google Cloud console, accédez à la page Administration de Gemini.
Cliquez sur Paramètres dans le menu de navigation de gauche.
Cliquez sur Journalisation des métadonnées Code Assist pour désactiver l'enregistrement des métadonnées liées à l'utilisation de Gemini Code Assist Standard et Enterprise dans le projet.
Cliquez sur Enregistrer les modifications.
API
Pour désactiver la journalisation pour Gemini Code Assist Standard et Enterprise, utilisez la méthode loggingSetting.
Créez le paramètre et une valeur spécifique à ce paramètre :
Obtenez le jeton :
TOKEN=$(gcloud auth print-access-token)
Exécutez la commande suivante pour désactiver les paramètres de journaux Gemini Code Assist Standard et 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"Remplacez les éléments suivants :
CONTAINER_PROJECT_NAME: saisissez l'ID du projet parent.LOGS_SETTING_ID: saisissez le nom du paramètre existant, par exemplegcalm.Si la commande aboutit, elle renvoie un corps de réponse qui indique que
log_prompts_and_responsesetlog_metadatasont définis surfalse:{ "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 }
Configurer la journalisation multiprojet
Vous pouvez utiliser les journaux de Gemini Code Assist pour créer des métriques et des tableaux de bord afin de surveiller l'utilisation par projet. Si votre organisation possède plusieurs projets, vous pouvez configurer un projet de journalisation centralisé pour collecter les journaux de plusieurs projets et générer des tableaux de bord pour ces projets.
Créer un projet de journalisation centralisé
Ce projet servira de hub pour les journaux de vos autres projets.
Dans la Google Cloud console, accédez à la page Création de projet.
Dans la fenêtre Nouveau projet, saisissez des valeurs pour les champs suivants :
- Nom du projet : nom de votre projet de journalisation centralisé.
- Compte de facturation : sélectionnez un compte de facturation.
- Organisation : sélectionnez votre organisation. Un projet centralisé ne peut collecter les journaux que des projets de la même organisation.
- Emplacement : sélectionnez un emplacement.
Cliquez sur Créer.
Configurer des récepteurs de journaux
Pour diriger les journaux vers le projet centralisé, configurez des récepteurs de journaux dans chacun des projets individuels à partir desquels vous souhaitez collecter des journaux.
Pour configurer des récepteurs de journaux pour chaque projet, procédez comme suit :
- Dans la Google Cloud console, basculez vers un projet à partir duquel vous souhaitez collecter des journaux.
Accédez à la page Routeur de journaux :
Cliquez sur Créer un récepteur.
Pour Détails du récepteur, saisissez un nom et une description pour le récepteur, puis cliquez sur Suivant.
Pour Destination du récepteur, procédez comme suit :
- Dans le menu Sélectionner le service de récepteur, sélectionnez Bucket Logging.
- Dans le menu Bucket Logging, sélectionnez Utiliser un bucket de journaux dans un autre projet.
Dans le champ Destination du récepteur, saisissez ce qui suit :
logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_DefaultRemplacez
CENTRALIZED_PROJECT_IDpar l'ID du projet de journalisation centralisé que vous avez créé.Cliquez sur Suivant.
Pour Sélectionner les journaux à inclure dans le récepteur, créez un filtre d'inclusion en saisissant ce qui suit dans le champ Filtre d'inclusion :
resource.type="cloudaicompanion.googleapis.com/Instance"Cliquez sur Suivant.
Pour Sélectionner les journaux à exclure du récepteur, laissez le filtre d'exclusion vide et cliquez sur Créer un récepteur.
Une fois le récepteur créé, sur la page Routeur de journaux, recherchez le récepteur que vous avez créé.
Dans la colonne Identité du rédacteur, copiez l'adresse e-mail complète du compte de service.
Configurer l'accès
Pour accorder à votre récepteur l'accès en écriture aux journaux dans le projet centralisé, procédez comme suit :
- Dans la Google Cloud console, basculez vers le projet centralisé que vous avez créé.
Accédez à la page IAM :
Cliquez sur Accorder l'accès.
Dans le champ Nouveaux comptes principaux, collez l'adresse e-mail du compte de service que vous avez copiée dans la section précédente.
Cliquez sur Ajouter un autre rôle.
Recherchez et sélectionnez le rôle Rédacteur de bucket de journaux (
roles/logging.bucketWriter).Cliquez sur Enregistrer.
Créer un tableau de bord dans un projet centralisé
Une fois que vous avez configuré votre projet centralisé pour recevoir des journaux, vous pouvez créer un tableau de bord pour afficher les métriques de plusieurs projets :
Dans la Google Cloud console, accédez à Surveillance > Tableaux de bord :
Cliquez sur Créer un tableau de bord.
Dans la barre d'outils, cliquez sur Paramètres, puis sélectionnez JSON > Éditeur JSON.
Dans l'éditeur JSON, collez le code suivant :
{ "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" } } } } ] } }Remplacez les éléments suivants :
CENTRALIZED_PROJECT_ID: ID du projet de journalisation centralisé que vous avez créé.SOURCE_PROJECT_ID_1etSOURCE_PROJECT_ID_2: ID des projets à partir desquels vous souhaitez collecter des journaux. Si vous souhaitez collecter des journaux à partir de plus de deux projets, vous pouvez ajouter d'autres ID de projet aux clausesinde la requête.
Désactiver la journalisation multiprojet
Si vous avez configuré la journalisation Gemini Code Assist pour plusieurs projets, vous pouvez la désactiver en supprimant les récepteurs de journaux qui acheminent les journaux vers le projet centralisé. Pour arrêter d'envoyer des journaux d'un projet individuel vers le projet centralisé, supprimez le récepteur de journaux que vous avez créé dans ce projet :
- Dans la Google Cloud console, basculez vers un projet à partir duquel vous souhaitez arrêter de collecter des journaux.
Accédez à la page Routeur de journaux :
Identifiez le récepteur qui achemine les journaux vers votre projet centralisé.
Sur la ligne correspondant à ce récepteur, cliquez sur Autres actions, puis sélectionnez Supprimer le récepteur.
Dans la boîte de dialogue qui s'affiche, cliquez sur Supprimer.
Répétez ces étapes pour chaque projet pour lequel vous souhaitez arrêter d'envoyer des journaux vers le projet centralisé.