La journalisation de Gemini Code Assist Standard et Enterprise vous permet de suivre les interactions et l'utilisation des développeurs dans vos projets. Ce document explique comment utiliser la console Google Cloud ou l'API REST pour configurer la journalisation pour Gemini Code Assist.
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.
Les journaux Gemini Code Assist enregistrent un nombre de jetons combiné (
totalTokenCount) pour chaque requête de chat et d'agent (CompleteTask), que vous pouvez attribuer à un utilisateur avec l'étiquettelabels.user_id. Ce nombre apparaît dans les champsRequestLog.metadata.totalTokenCount,ResponseLog.metadata.totalTokenCountetMetadataLog.apiRequest.totalTokenCount. Les journaux des requêtes de complétion et de génération de code (CompleteCodeetGenerateCode) et les journaux de métadonnées qui enregistrent les événements de télémétrie, tels que les événementscodeExposure,codeAcceptance,chatExposureetchatAcceptance, n'incluent pas le nombre de jetons. Les journaux et les métriques Cloud Monitoring n'enregistrent pas séparément le nombre de jetons de requête et de réponse. Pour afficher l'utilisation agrégée des jetons pour votre projet, consultez Métriques de jetons et de quotas.
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 devez disposer d'autorisations IAM spécifiques. Pour suivre le principe du moindre privilège, accordez un rôle personnalisé ne contenant que les autorisations nécessaires.
Demandez à votre administrateur de créer un rôle personnalisé incluant les autorisations suivantes :
serviceusage.services.enable: pour activer les API pour votre projet.cloudaicompanion.loggingSettings.create: pour créer des paramètres de journalisation.cloudaicompanion.loggingSettings.get: pour afficher les paramètres de journalisation.cloudaicompanion.loggingSettings.list: pour lister les paramètres de journalisation.cloudaicompanion.loggingSettings.update: pour mettre à jour les paramètres de journalisation.cloudaicompanion.loggingSettingBindings.create: pour lier les paramètres de journalisation à un projet.cloudaicompanion.loggingSettingBindings.get: pour afficher les liaisons des paramètres de journalisation.cloudaicompanion.loggingSettingBindings.list: pour lister les liaisons de 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 Service Usage (roles/serviceusage.serviceUsageAdmin). Toutefois, ces rôles incluent des autorisations permettant de configurer d'autres paramètres d'administrateur Gemini dansGoogle 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 console Google Cloud , 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 console Google Cloud , 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 comporte plusieurs projets, vous pouvez configurer un projet de journalisation centralisée 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ée
Ce projet servira de hub pour les journaux de vos autres projets.
Dans la console Google Cloud , accédez à la page Création de projet.
Dans la fenêtre New Project (Nouveau projet), saisissez les valeurs des champs suivants :
- Nom du projet : nom de votre projet de journalisation centralisée.
- Compte de facturation : sélectionnez un compte de facturation.
- Organisation : sélectionnez votre organisation. Un projet centralisé ne peut collecter que les journaux 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 dont vous souhaitez collecter les journaux.
Pour configurer des récepteurs de journaux pour chaque projet, procédez comme suit :
- Dans la console Google Cloud , 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.
Dans 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 de journaux, 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ée que vous avez créé.Cliquez sur Suivant.
Dans Choisissez des 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 Choisir des journaux à exclure du récepteur, laissez le filtre d'exclusion vide, puis cliquez sur Créer un récepteur.
Une fois le récepteur créé, recherchez-le sur la page Routeur de journaux.
Dans la colonne Identité du rédacteur, copiez l'adresse e-mail complète du compte de service.
Configurer l'accès
Pour autoriser votre récepteur à écrire des journaux dans le projet centralisé, procédez comme suit :
- Dans la console Google Cloud , 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é
Après avoir configuré votre projet centralisé pour recevoir les journaux, vous pouvez créer un tableau de bord pour afficher les métriques de plusieurs projets :
Dans la console Google Cloud , accédez à Monitoring > Tableaux de bord :
Cliquez sur Créer un tableau de bord.
Dans la barre d'outils, cliquez sur Settings (Paramètres), puis sélectionnez JSON > JSON Editor (É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ée que vous avez créé.SOURCE_PROJECT_ID_1etSOURCE_PROJECT_ID_2: ID des projets à partir desquels vous souhaitez collecter les journaux. Si vous souhaitez collecter les journaux 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 les journaux d'un projet individuel au projet centralisé, supprimez le récepteur de journaux que vous avez créé dans ce projet :
- Dans la console Google Cloud , basculez vers un projet pour lequel vous souhaitez arrêter la collecte des journaux.
Accédez à la page Routeur de journaux :
Identifiez le récepteur qui achemine les journaux vers votre projet centralisé.
Sur la ligne de 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 au projet centralisé.