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 do Google Cloud ou uma API.

Limitações

  • O Gemini Standard e o Enterprise no Google Cloud registram dados de registro 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 por projeto. Para instruções sobre como configurar um projeto centralizado para coletar registros de vários projetos, consulte Configurar geração de registros em vários projetos.

  • O Gemini Code Assist no GitHub não oferece suporte ao registro em log 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 uma função personalizada 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 conferir as configurações de registro.
  • cloudaicompanion.loggingSettings.list—para listar as configurações de registro.
  • cloudaicompanion.loggingSettings.update para atualizar as configurações de geração de registros.
  • cloudaicompanion.loggingSettingBindings.create—para vincular configurações de registro a um projeto.
  • cloudaicompanion.loggingSettingBindings.get para conferir as vinculações de configurações de geração de registros.
  • cloudaicompanion.loggingSettingBindings.list—para listar vinculações de configurações de registro.

Como alternativa, é possível conceder os papéis predefinidos Administrador das configurações do Gemini para Google Cloud (roles/cloudaicompanion.settingsAdmin) e Administrador do uso do serviço (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 opçõ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 console do Google Cloud, acesse a página Admin do Gemini.

    Acessar 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 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 console do Google Cloud, acesse a página Admin do Gemini.

    Acessar 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 em vários projetos

É possível usar os registros do Gemini Code Assist para criar métricas e painéis de monitoramento do uso por projeto. Se a organização tiver vários projetos, configure 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 para registros dos seus outros projetos.

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

    Acessar "Criar projeto"

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

    • Nome do projeto: um nome para seu projeto de geração de registros centralizada.
    • 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 os 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 em cada projeto, faça o seguinte:

  1. No console do Google Cloud, 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 clique em Avançar.

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

    1. No menu Selecionar serviço do 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 registro 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 completo da conta de serviço.

Configurar acesso

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

  1. No console do Google Cloud, 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 em um projeto centralizado

Depois de configurar o projeto centralizado para receber registros, crie um painel para ver métricas de vários projetos:

  1. No console do Google Cloud, acesse Monitoring > 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 centralizada 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 projeto às cláusulas in da consulta.

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

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

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

    Acessar o roteador de registros

  3. Identifique o coletor que encaminha registros para seu projeto centralizado.

  4. Na linha do 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