Configura el registro de Gemini Code Assist Standard y Enterprise

En este documento, se describe cómo configurar el registro estándar y empresarial de Gemini Code Assist para un proyecto con la consola de Google Cloud o una API.

Limitaciones

  • La grabación de datos de registro de Gemini Standard y Enterprise en Google Cloud se limita a las interacciones del usuario con Gemini Code Assist dentro de un IDE.

  • De forma predeterminada, los registros de Gemini para Google Cloud se recopilan por proyecto. Si deseas obtener instrucciones para configurar un proyecto centralizado que recopile registros de varios proyectos, consulta Cómo configurar el registro de varios proyectos.

  • Gemini Code Assist en GitHub no admite el registro con Cloud Logging.

Antes de comenzar

Verifica que tu proyecto de Google Cloud esté asociado a una cuenta de facturación.

Verifica los permisos de IAM

Para configurar el registro de Gemini Code Assist Standard y Enterprise, puedes otorgar el rol predefinido de Identity and Access Management (IAM) Administrador de la configuración de Gemini para Google Cloud (roles/cloudaicompanion.settingsAdmin), que incluye todos los permisos necesarios para trabajar con todos los parámetros de configuración del administrador de Gemini para Google Cloud.

Como alternativa, puedes actualizar cualquier rol de IAM personalizado. Debes tener permisos de IAM específicos, que se detallan en las siguientes secciones.

Configura el registro de Gemini Code Assist

En las siguientes secciones, se proporcionan los pasos necesarios para habilitar la recopilación y el almacenamiento de la actividad de Gemini Code Assist Standard y Enterprise en Cloud Logging, incluidos los siguientes:

  • Registros de instrucciones y respuestas de Gemini Code Assist Standard y Enterprise, como entradas del usuario, información contextual y respuestas

  • Registros de metadatos de Gemini Code Assist Standard y Enterprise, como metadatos de telemetría y líneas de código aceptadas por el usuario.

Para obtener más detalles sobre ambos tipos de registros, consulta Cómo ver los registros de Gemini.

Habilita el registro de Gemini Code Assist en un proyecto

Selecciona una de las siguientes opciones:

Console

  1. Verifica que hayas habilitado la API de Cloud Logging en el proyecto.

  2. Verifica que tengas los siguientes permisos de IAM en el proyecto propietario de la suscripción:

    • instance.queryEffectiveSetting
    • instance.queryEffectiveSettingBindings
    • loggingSettings.create
    • loggingSettings.list
    • loggingSettings.update
    • loggingSettings.get
    • cloudaicompanion.instances.loggingSettings.use
    • cloudaicompanion.instances.queryEffectiveSetting
    • settingBindings.loggingSettingsList
    • settingBindings.loggingSettingsGet
    • settingBindings.loggingSettingsUpdate
    • settingBindings.loggingSettingsCreate
    • cloudaicompanion.settingBindings.loggingSettingsUse
    • cloudaicompanion.instances.queryEffectiveSettingBindings
  3. En la consola de Google Cloud , ve a la página Administrador de Gemini.

    Ir a Gemini para Google Cloud

    Se carga la página Gemini para Google Cloud.

  4. Haz clic en Configuración en el menú de navegación de la izquierda.

    Se carga la página Configuración.

  5. (Opcional) Haz clic en Logging for Code Assist metadata para registrar los metadatos que generan los usuarios de Gemini Code Assist Standard y Enterprise en el proyecto.

  6. (Opcional) Haz clic en Registro de las instrucciones y respuestas de Code Assist para registrar las instrucciones y respuestas que generan los usuarios de Gemini Code Assist Standard y Enterprise en el proyecto.

  7. Haz clic en Guardar cambios.

API

Para habilitar el registro de Gemini Code Assist Standard y Enterprise, usa el recurso loggingSettings para definir la configuración de registro que desees y el recurso loggingSettings.settingBindings para vincular la configuración a un proyecto:

  1. Verifica que hayas habilitado la API de Cloud Logging en el proyecto.

  2. Verifica que tengas los siguientes permisos de IAM en el proyecto propietario de la suscripción:

    • instance.queryEffectiveSetting
    • instance.queryEffectiveSettingBindings
    • loggingSettings.create
    • loggingSettings.list
    • loggingSettings.update
    • loggingSettings.get
    • cloudaicompanion.instances.loggingSettings.use
    • cloudaicompanion.instances.queryEffectiveSetting
    • settingBindings.loggingSettingsList
    • settingBindings.loggingSettingsGet
    • settingBindings.loggingSettingsUpdate
    • settingBindings.loggingSettingsCreate
    • cloudaicompanion.settingBindings.loggingSettingsUse
    • cloudaicompanion.instances.queryEffectiveSettingBindings
  3. Crea el parámetro de configuración y un valor específico para el parámetro:

    1. Obtén el token:

      TOKEN=$(gcloud auth print-access-token)
      
  4. Habilita los registros de Gemini Code Assist Standard y Enterprise. Los registros de usuarios y los registros de metadatos se habilitan con los campos log_prompts_and_responses y log_metadata, respectivamente. Si no quieres habilitar uno de los campos, exclúyelo de la solicitud.

    1. Ejecuta el siguiente comando para crear el parámetro de configuración:

      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"
      

      Reemplaza lo siguiente:

      • CONTAINER_PROJECT_NAME: Ingresa el ID del proyecto en el que se almacena el recurso de vinculación. Este es el proyecto principal de la vinculación.
      • LOGS_SETTING_ID: Ingresa un nombre de configuración único, como gcalm.

      Si el comando se ejecuta correctamente, devuelve un cuerpo de respuesta que muestra log_prompts_and_responses y log_metadata establecidos en true:

      {
        "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
      }
      
    2. Ejecuta el siguiente comando para crear la vinculación de configuración de los registros de Gemini Code Assist Standard y 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"
      

    Reemplaza lo siguiente:

    • TARGET_PROJECT_NAME: Ingresa el proyecto de destino al que se debe vincular la vinculación. Por lo general, es el mismo que el proyecto del contenedor. Sin embargo, puedes vincular un parámetro de configuración a varios proyectos para que no se duplique el recurso de configuración.
    • LOGS_BINDING_ID: Usa el mismo LOGS_SETTING_ID que cuando creaste el parámetro de configuración, pero agrégale b1. Por ejemplo, usa gcalmb1.

    Si el comando se ejecuta correctamente, se muestran los metadatos de la operación en el siguiente formato:

    {
      "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
    }
    

Inhabilita el registro de Gemini Code Assist en un proyecto

Selecciona una de las siguientes opciones:

Console

  1. Verifica que tengas los siguientes permisos de IAM en el proyecto propietario de la suscripción:

    • instance.queryEffectiveSetting
    • instance.queryEffectiveSettingBindings
    • loggingSettings.delete
    • loggingSettings.list
    • loggingSettings.update
    • loggingSettings.get
    • cloudaicompanion.instances.loggingSettings.use
    • cloudaicompanion.instances.queryEffectiveSetting
    • settingBindings.loggingSettingsList
    • settingBindings.loggingSettingsGet
    • settingBindings.loggingSettingsUpdate
    • settingBindings.loggingSettingsDelete
    • cloudaicompanion.settingBindings.loggingSettingsUse
    • cloudaicompanion.instances.queryEffectiveSettingBindings
  2. En la consola de Google Cloud , ve a la página Administrador de Gemini.

    Ir a Gemini para Google Cloud

    Se carga la página Gemini para Google Cloud.

  3. Haz clic en Configuración en el menú de navegación de la izquierda.

    Se carga la página Configuración.

  4. Haz clic en Logging for Code Assist metadata para desactivar el registro de los metadatos del uso de Gemini Code Assist Standard y Enterprise en el proyecto.

  5. Haz clic en Guardar cambios.

API

Para inhabilitar el registro de Gemini Code Assist Standard y Enterprise, usa el método loggingSetting.

  1. Verifica que tengas los siguientes permisos de IAM en el proyecto propietario de la suscripción:

    • instance.queryEffectiveSetting
    • instance.queryEffectiveSettingBindings
    • loggingSettings.create
    • loggingSettings.list
    • loggingSettings.update
    • loggingSettings.get
    • cloudaicompanion.instances.loggingSettings.use
    • cloudaicompanion.instances.queryEffectiveSetting
    • settingBindings.loggingSettingsList
    • settingBindings.loggingSettingsGet
    • settingBindings.loggingSettingsUpdate
    • settingBindings.loggingSettingsCreate
    • serviceusage.services.enable
  2. Crea el parámetro de configuración y un valor específico para el parámetro:

    1. Obtén el token:

      TOKEN=$(gcloud auth print-access-token)
      
  3. Ejecuta el siguiente comando para inhabilitar la configuración de los registros de Gemini Code Assist Standard y 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"
    

    Reemplaza lo siguiente:

    • CONTAINER_PROJECT_NAME: Ingresa el ID del proyecto principal.
    • LOGS_SETTING_ID: Ingresa el nombre del parámetro de configuración existente, como gcalm.

      Si el comando se ejecuta correctamente, devuelve un cuerpo de respuesta que muestra log_prompts_and_responses y log_metadata establecidos en false:

      {
        "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
      }
      

Configura el registro de varios proyectos

Puedes usar los registros de Gemini Code Assist para crear métricas y paneles que permitan supervisar el uso por proyecto. Si tu organización tiene varios proyectos, puedes configurar un proyecto de registro centralizado para recopilar registros de varios proyectos y generar paneles en todos ellos.

Crea un proyecto de registro centralizado

Este proyecto servirá como centro de registros de tus otros proyectos.

  1. En la consola de Google Cloud , ve a la página Creación de proyectos.

    Ir a Crear proyecto

  2. En la ventana New Project, ingresa valores para los siguientes campos:

    • Nombre del proyecto: Un nombre para tu proyecto de registro centralizado.
    • Cuenta de facturación: Selecciona una cuenta de facturación.
    • Organización: Selecciona tu organización. Un proyecto centralizado solo puede recopilar registros de proyectos de la misma organización.
    • Ubicación: Selecciona una ubicación.
  3. Haz clic en Crear.

Configura receptores de registros

Para dirigir los registros al proyecto centralizado, configura receptores de registros en cada uno de los proyectos individuales de los que deseas recopilar registros.

Para configurar los receptores de registros de cada proyecto, haz lo siguiente:

  1. En la consola de Google Cloud , cambia a un proyecto del que desees recopilar registros.
  2. Ve a la página Enrutador de registros:

    Ir a Enrutador de registros

  3. Haz clic en Crear un receptor.

  4. En Detalles del receptor, ingresa un nombre y una descripción para el receptor y, luego, haz clic en Siguiente.

  5. En Destino del receptor, haz lo siguiente:

    1. En el menú Selecciona el servicio de receptor, selecciona Bucket de Logging.
    2. En el menú Bucket de registros, selecciona Usar un bucket de registros en otro proyecto.
    3. En el campo Destino del receptor, ingresa lo siguiente:

      logging.googleapis.com/projects/CENTRALIZED_PROJECT_ID/locations/global/buckets/_Default
      

      Reemplaza CENTRALIZED_PROJECT_ID por el ID del proyecto de registro centralizado que creaste.

    4. Haz clic en Siguiente.

  6. En Elige registros para incluirlos en el receptor, crea un filtro de inclusión ingresando lo siguiente en el campo Filtro de inclusión:

    resource.type="cloudaicompanion.googleapis.com/Instance"
    
  7. Haz clic en Siguiente.

  8. En Elige registros para filtrar fuera del receptor, deja el filtro de exclusión en blanco y haz clic en Crear receptor.

  9. Después de crear el receptor, en la página Enrutador de registros, busca el receptor que creaste.

  10. En la columna Identidad del escritor, copia la dirección de correo electrónico completa de la cuenta de servicio.

Configura el acceso

Para otorgar acceso a tu receptor para que escriba registros en el proyecto centralizado, haz lo siguiente:

  1. En la consola de Google Cloud , cambia al proyecto centralizado que creaste.
  2. Ve a la página IAM:

    Ir a IAM

  3. Haz clic en Otorgar acceso.

  4. En el campo Principales nuevas, pega la dirección de correo electrónico de la cuenta de servicio que copiaste en la sección anterior.

  5. Haz clic en Agregar otra función.

  6. Busca y selecciona el rol de Escritor de buckets de registros (roles/logging.bucketWriter).

  7. Haz clic en Guardar.

Crea un panel en un proyecto centralizado

Después de configurar tu proyecto centralizado para recibir registros, puedes crear un panel para ver las métricas de varios proyectos:

  1. En la consola de Google Cloud , ve a Monitoring > Paneles:

    Ir a Paneles

  2. Haz clic en Crear panel de control.

  3. En la barra de herramientas, haz clic en Configuración y, luego, selecciona JSON > Editor de JSON.

  4. En el editor de JSON, pega el siguiente código:

    {
      "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"
                }
              }
            }
          }
        ]
      }
    }
    
  5. Reemplaza lo siguiente:

    • CENTRALIZED_PROJECT_ID: Es el ID del proyecto de registro centralizado que creaste.
    • SOURCE_PROJECT_ID_1 y SOURCE_PROJECT_ID_2: Son los IDs de los proyectos de los que deseas recopilar registros. Si deseas recopilar registros de más de dos proyectos, puedes agregar más IDs de proyecto a las cláusulas in de la consulta.

Inhabilita el registro de varios proyectos

Si configuraste el registro de Gemini Code Assist para varios proyectos, puedes inhabilitarlo borrando los receptores de registros que enrutan los registros al proyecto centralizado. Para dejar de enviar registros de un proyecto individual al proyecto centralizado, borra el receptor de registros que creaste en ese proyecto:

  1. En la consola de Google Cloud , cambia a un proyecto del que quieras dejar de recopilar registros.
  2. Ve a la página Enrutador de registros:

    Ir a Enrutador de registros

  3. Identifica el receptor que enruta los registros a tu proyecto centralizado.

  4. En la fila de ese receptor, haz clic en Más acciones y, luego, selecciona Borrar receptor.

  5. En el cuadro de diálogo que aparece, haz clic en Borrar.

Repite estos pasos para cada proyecto del que quieras dejar de enviar registros al proyecto centralizado.

¿Qué sigue?