Configurar geração de registro do Gemini Code Assist Standard e Enterprise

Este documento descreve como configurar o registro em log do Gemini Code Assist Standard e Enterprise para um projeto usando o console Google Cloud ou uma API.

Limitações

  • O Gemini Standard e o Gemini Enterprise no Google Cloud registro de dados de registrosão limitados às interações do usuário com o Gemini Code Assist em um ambiente de desenvolvimento integrado.

  • Por padrão, os registros do Gemini para Google Cloud são coletados em uma base por projeto. Para instruções sobre como configurar um projeto centralizado para coletar registros de vários projetos, consulte Configurar a geração de registros de vários projetos.

  • O Gemini Code Assist no GitHub não oferece suporte à geração de registros com o Cloud Logging.

Antes de começar

Verifique se o projeto do Google Cloud está vinculado a uma conta de faturamento.

Verificar permissões do IAM

Para configurar a geração de registros do Gemini Code Assist, você precisa de permissões específicas do IAM. Para seguir o princípio de privilégio mínimo, conceda um papel personalizado que contenha apenas as permissões necessárias.

Peça ao administrador para criar uma função personalizada que inclua as seguintes permissões:

  • serviceusage.services.enable: para ativar as APIs do projeto.
  • cloudaicompanion.loggingSettings.create: para criar configurações de geração de registros.
  • cloudaicompanion.loggingSettings.get: para visualizar as configurações de geração de registros.
  • cloudaicompanion.loggingSettings.list: para listar as configurações de geração de registros.
  • cloudaicompanion.loggingSettings.update: para atualizar as configurações de geração de registros.
  • cloudaicompanion.loggingSettingBindings.create: para vincular as configurações de geração de registros a um projeto.
  • cloudaicompanion.loggingSettingBindings.get: para visualizar as vinculações de configurações de geração de registros.
  • cloudaicompanion.loggingSettingBindings.list: para listar as vinculações de configurações de geração de registros.

Como alternativa, é possível conceder os papéis predefinidos Administrador das configurações do Gemini para Google Cloud (roles/cloudaicompanion.settingsAdmin) e Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). No entanto, esses papéis incluem permissões para configurar todas as configurações de administrador do Gemini para Google Cloud e gerenciar o uso do serviço, o que pode ser mais do que o necessário para configurar as configurações de geração de registros.

Configurar a geração de registros do Gemini Code Assist

As seções a seguir fornecem as etapas necessárias para ativar a coleta e o armazenamento da atividade do Gemini Code Assist Standard e Enterprise no Cloud Logging, incluindo:

  • Registros de comandos e respostas do Gemini Code Assist Standard e Enterprise, como entradas do usuário, informações contextuais e respostas.

  • Registros de metadados do Gemini Code Assist Standard e Enterprise, como metadados de telemetria e linhas de código aceitas pelo usuário.

Para mais detalhes sobre os dois tipos de registros, consulte Ver registros do Gemini.

Ativar a geração de registros do Gemini Code Assist em um projeto

Selecione uma das seguintes opções:

Console

  1. Verifique se você ativou a API Cloud Logging no projeto.

  2. No Google Cloud console do, acesse a página Admin do Gemini.

    Acesse o Gemini para Google Cloud

    A página Gemini para Google Cloud é carregada.

  3. Clique em Configurações no menu de navegação à esquerda.

    A página Configurações é carregada.

  4. (Opcional) Clique em Registro em log de metadados do Code Assist para registrar os metadados gerados pelos usuários do Gemini Code Assist Standard e Enterprise no projeto.

  5. (Opcional) Clique em Registros de comandos e respostas do Code Assist para registrar os comandos e as respostas gerados pelos usuários do Gemini Code Assist Standard e Enterprise no projeto.

  6. Clique em Salvar alterações.

API

Para ativar a geração de registros do Gemini Code Assist Standard e Enterprise, use o recurso loggingSettings para definir as configurações de geração de registros desejadas e use o recurso loggingSettings.settingBindings para vincular as configurações a um projeto:

  1. Verifique se você ativou a API Cloud Logging no projeto.

  2. Crie a configuração e um valor específico dela:

    1. Receba o token:

      TOKEN=$(gcloud auth print-access-token)
      
  3. Ative os registros do Gemini Code Assist Standard e Enterprise. Os registros de usuários e de metadados são ativados com os campos log_prompts_and_responses e log_metadata, respectivamente. Se você não quiser ativar um dos campos, exclua-o da solicitação.

    1. Execute o comando a seguir para criar a configuração:

      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"
      

      Substitua:

      • CONTAINER_PROJECT_NAME: insira o ID do projeto em que o recurso de vinculação está armazenado. Esse é o projeto principal da vinculação.
      • LOGS_SETTING_ID: insira um nome exclusivo para a configuração, como gcalm.

      Se o comando for bem-sucedido, ele vai retornar um corpo de resposta que mostra log_prompts_and_responses e log_metadata definidos como 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. Execute o comando a seguir para criar a vinculação de configuração dos registros do Gemini Code Assist Standard e 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"
      

    Substitua:

    • TARGET_PROJECT_NAME: insira o projeto de destino a que a vinculação deve ser associada. Geralmente, é o mesmo que o projeto do contêiner. No entanto, é possível vincular uma configuração a vários projetos para que o recurso de configuração não precise ser duplicado.
    • LOGS_BINDING_ID: use o mesmo LOGS_SETTING_ID de quando você criou a configuração, mas adicione b1. Por exemplo, use gcalmb1.

    Se o comando for bem-sucedido, ele vai retornar os metadados da operação no seguinte 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
    }
    

Desativar a geração de registros do Gemini Code Assist em um projeto

Selecione uma das seguintes opções:

Console

  1. No Google Cloud console do, acesse a página Admin do Gemini.

    Acesse o Gemini para Google Cloud

    A página Gemini para Google Cloud é carregada.

  2. Clique em Configurações no menu de navegação à esquerda.

    A página Configurações é carregada.

  3. Clique em Registros de metadados do Code Assist para desativar a gravação dos metadados do uso do Gemini Code Assist Standard e Enterprise no projeto.

  4. Clique em Salvar alterações.

API

Para desativar a geração de registros do Gemini Code Assist Standard e Enterprise, use o método loggingSetting.

  1. Crie a configuração e um valor específico dela:

    1. Receba o token:

      TOKEN=$(gcloud auth print-access-token)
      
  2. Execute o comando a seguir para desativar as configurações de registros do Gemini Code Assist Standard e 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"
    

    Substitua:

    • CONTAINER_PROJECT_NAME: insira o ID do projeto principal.
    • LOGS_SETTING_ID: insira o nome da configuração atual, como gcalm.

      Se o comando for bem-sucedido, ele vai retornar um corpo de resposta que mostra log_prompts_and_responses e log_metadata definidos como 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
      }
      

Configurar a geração de registros de vários projetos

É possível usar registros do Gemini Code Assist para criar métricas e painéis para monitorar o uso por projeto. Se a organização tiver vários projetos, você poderá configurar um projeto de geração de registros centralizado para coletar registros de vários projetos e gerar painéis neles.

Criar um projeto de geração de registros centralizado

Esse projeto vai servir como um hub de registros dos seus outros projetos.

  1. No Google Cloud console do, acesse a página Criação de projetos.

    Acessar a página "Criar projeto"

  2. Na janela Novo projeto, insira valores para os seguintes campos:

    • Nome do projeto: um nome para o projeto de geração de registros centralizado.
    • Conta de faturamento: selecione uma conta de faturamento.
    • Organização: selecione sua organização. Um projeto centralizado só pode coletar registros de projetos na mesma organização.
    • Local: selecione um local.
  3. Clique em Criar.

Configurar coletores de registros

Para direcionar registros ao projeto centralizado, configure coletores de registros em cada um dos projetos individuais de que você quer coletar registros.

Para configurar coletores de registros para cada projeto, faça o seguinte:

  1. No Google Cloud console do, mude para um projeto de que você quer coletar registros.
  2. Acesse a página Roteador de registros:

    Acessar o roteador de registros

  3. Clique em Criar coletor.

  4. Em Detalhes do coletor, insira um nome e uma descrição para o coletor e, em seguida, clique em Próxima.

  5. Em Destino do coletor, faça o seguinte:

    1. No menu Selecionar serviço de coletor, selecione Bucket do Logging.
    2. No menu Bucket de registros, selecione Usar bucket de registros em outro projeto.
    3. No campo Destino do coletor, insira o seguinte:

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

      Substitua CENTRALIZED_PROJECT_ID pelo ID do projeto de geração de registros centralizado que você criou.

    4. Clique em Próxima.

  6. Em Escolher registros para incluir no coletor, crie um filtro de inclusão inserindo o seguinte no campo Filtro de inclusão:

    resource.type="cloudaicompanion.googleapis.com/Instance"
    
  7. Clique em Próxima.

  8. Em Escolher registros para filtrar fora do coletor, deixe o filtro de exclusão em branco e clique em Criar coletor.

  9. Depois que o coletor for criado, na página Roteador de registros, encontre o coletor que você criou.

  10. Na coluna Identidade do gravador, copie o endereço de e-mail da conta de serviço completo.

Configurar acesso

Para conceder acesso ao coletor para gravar registros no projeto centralizado, faça o seguinte:

  1. No Google Cloud console do, mude para o projeto centralizado que você criou.
  2. Acesse a página do IAM:

    Acessar IAM

  3. Clique em Conceder acesso.

  4. No campo Novos principais, cole o endereço de e-mail da conta de serviço que você copiou na seção anterior.

  5. Clique em Adicionar outro papel.

  6. Pesquise e selecione o papel Gravador de bucket de registros (roles/logging.bucketWriter).

  7. Clique em Salvar.

Criar um painel no projeto centralizado

Depois de configurar o projeto centralizado para receber registros, você pode criar um painel para visualizar métricas de vários projetos:

  1. No Google Cloud console do, acesse Monitoramento > Painéis:

    Ir para "Painéis"

  2. Clique em Criar painel.

  3. Na barra de ferramentas, clique em Configurações e selecione JSON > Editor JSON.

  4. No Editor JSON, cole o seguinte 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. Substitua:

    • CENTRALIZED_PROJECT_ID: o ID do projeto de geração de registros centralizado que você criou.
    • SOURCE_PROJECT_ID_1 e SOURCE_PROJECT_ID_2: os IDs dos projetos de que você quer coletar registros. Se você quiser coletar registros de mais de dois projetos, adicione mais IDs de projetos às cláusulas in da consulta.

Desativar a geração de registros de vários projetos

Se você configurou a geração de registros do Gemini Code Assist para vários projetos, é possível desativá-la excluindo os coletores de registros que roteiam registros para o projeto centralizado. Para interromper o envio de registros de um projeto individual para o projeto centralizado, exclua o coletor de registros que você criou nesse projeto:

  1. No Google Cloud console do, mude para um projeto de que você quer parar de coletar registros.
  2. Acesse a página Roteador de registros:

    Acessar o roteador de registros

  3. Identifique o coletor que roteia registros para o projeto centralizado.

  4. Na linha desse coletor, clique em Mais ações e selecione Excluir coletor.

  5. Na caixa de diálogo exibida, clique em Excluir.

Repita essas etapas para cada projeto que você quer parar de enviar registros para o projeto centralizado.

A seguir