Gemini Code Assist Standard ve Enterprise günlük kaydını yapılandırma

Bu belgede, Google Cloud Console veya bir API kullanarak bir proje için Gemini Code Assist Standard ve Enterprise günlük kaydının nasıl yapılandırılacağı açıklanmaktadır.

Sınırlamalar

  • Google Cloud günlük verilerinde Gemini Standard ve Enterprise kaydı, IDE'deki Gemini Code Assist ile kullanıcı etkileşimleriyle sınırlıdır.

  • Google Cloud için Gemini günlükleri varsayılan olarak proje bazında toplanır. Birden fazla projeden günlük toplamak için merkezi bir proje yapılandırma talimatları için Çok projeli günlük kaydını ayarlama başlıklı makaleyi inceleyin.

  • GitHub'daki Gemini Code Assist Cloud Logging ile günlüğe kaydetmeyi desteklemez.

Başlamadan önce

Google Cloud projenizin bir faturalandırma hesabına bağlı olduğunu doğrulayın.

IAM izinlerini doğrulama

Gemini Code Assist günlük kaydını yapılandırmak için belirli IAM izinlerine ihtiyacınız vardır. En düşük ayrıcalık ilkesine uymak için yalnızca gerekli izinleri içeren bir özel rol verin.

Yöneticinizden aşağıdaki izinleri içeren özel bir rol oluşturmasını isteyin:

  • serviceusage.services.enable: Projeniz için API'leri etkinleştirmek üzere.
  • cloudaicompanion.loggingSettings.create—günlük ayarları oluşturmak için.
  • cloudaicompanion.loggingSettings.get—günlük ayarlarını görüntülemek için.
  • cloudaicompanion.loggingSettings.list: Günlük ayarlarını listelemek için.
  • cloudaicompanion.loggingSettings.update: Günlük ayarlarını güncellemek için kullanılır.
  • cloudaicompanion.loggingSettingBindings.create—Günlük kaydı ayarlarını bir projeye bağlamak için.
  • cloudaicompanion.loggingSettingBindings.get—Günlük kaydı ayarı bağlamalarını görüntülemek için.
  • cloudaicompanion.loggingSettingBindings.list—Günlük kaydı ayarı bağlamalarını listelemek için.

Alternatif olarak, önceden tanımlanmış Gemini for Google Cloud Ayarları Yöneticisi (roles/cloudaicompanion.settingsAdmin) ve Hizmet Kullanımı Yöneticisi (roles/serviceusage.serviceUsageAdmin) rollerini de verebilirsiniz. Ancak bu roller, tüm Gemini for Google Cloud yönetici ayarlarını yapılandırma ve hizmet kullanımını yönetme izinlerini içerir. Bu izinler, günlük ayarlarını yapılandırmak için gerekenden daha fazla olabilir.

Gemini Code Assist günlük kaydını yapılandırma

Aşağıdaki bölümlerde, Gemini Code Assist Standard ve Enterprise etkinliğinin Cloud Logging'de toplanmasını ve depolanmasını sağlamak için gereken adımlar açıklanmaktadır. Bu adımlar şunları içerir:

  • Gemini Code Assist Standard ve Enterprise istemleri ile yanıt günlükleri (ör. kullanıcı girişi, bağlamsal bilgiler ve yanıtlar)

  • Gemini Code Assist Standard ve Enterprise meta veri günlükleri (ör. telemetri meta verileri ve kullanıcı tarafından kabul edilen kod satırları)

Her iki günlük türü hakkında daha fazla bilgi için Gemini günlüklerini görüntüleme başlıklı makaleyi inceleyin.

Bir projede Gemini Code Assist için günlük kaydını etkinleştirme

Aşağıdaki seçeneklerden birini belirtin:

Console

  1. Projede Cloud Logging API'sini etkinleştirdiğinizi doğrulayın.

  2. Google Cloud Console'da Gemini için Yönetici sayfasına gidin.

    Google Cloud için Gemini'a gitme

    Google Cloud için Gemini sayfası yüklenir.

  3. Soldaki gezinme menüsünde Ayarlar'ı tıklayın.

    Ayarlar sayfası yüklenir.

  4. (İsteğe bağlı) Gemini Code Assist Standard ve Enterprise kullanıcıları tarafından projede oluşturulan meta verileri kaydetmek için Code Assist meta verileri için günlük kaydı'nı tıklayın.

  5. (İsteğe bağlı) Gemini Code Assist Standard ve Enterprise kullanıcıları tarafından oluşturulan istemleri ve yanıtları projede kaydetmek için Code Assist istemleri ve yanıtları için günlük kaydı'nı tıklayın.

  6. Save Changes'ı (Değişiklikleri Kaydet) tıklayın.

API

Gemini Code Assist Standard ve Enterprise için günlük kaydını etkinleştirmek üzere istediğiniz günlük kaydı ayarlarını tanımlamak için loggingSettings kaynağını, ayarları bir projeye bağlamak için ise loggingSettings.settingBindings kaynağını kullanın:

  1. Projede Cloud Logging API'yi etkinleştirdiğinizi doğrulayın.

  2. Ayarı ve ayara özgü değeri oluşturun:

    1. Jetonu alın:

      TOKEN=$(gcloud auth print-access-token)
      
  3. Gemini Code Assist Standard ve Enterprise günlüklerini etkinleştirin. Kullanıcı günlükleri ve meta veri günlükleri sırasıyla log_prompts_and_responses ve log_metadata alanlarıyla etkinleştirilir. Alanlardan birini etkinleştirmek istemiyorsanız isteğin dışında bırakın.

    1. Ayarı oluşturmak için aşağıdaki komutu çalıştırı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"
      

      Aşağıdakini değiştirin:

      • CONTAINER_PROJECT_NAME: Bağlama kaynağının depolandığı projenin proje kimliğini girin. Bu, bağlamanın üst projesidir.
      • LOGS_SETTING_ID: gcalm gibi benzersiz bir ayar adı girin.

      Komut başarılı olursa log_prompts_and_responses ve log_metadata değerlerinin true olarak ayarlandığını gösteren bir yanıt gövdesi döndürür:

      {
        "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. Gemini Code Assist Standard ve Enterprise günlükleri ayar bağlamasını oluşturmak için aşağıdaki komutu çalıştırın:

      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"
      

    Aşağıdakini değiştirin:

    • TARGET_PROJECT_NAME: Bağlamanın bağlanacağı hedef projeyi girin. Bu genellikle kapsayıcı projesiyle aynıdır. Ancak, ayar kaynağının kopyalanmaması için bir ayarı birden fazla projeye bağlayabilirsiniz.
    • LOGS_BINDING_ID: Ayarı oluştururken kullandığınız LOGS_SETTING_ID değerini kullanın ancak bu değere b1 ekleyin. Örneğin, gcalmb1 kullanın.

    Komut başarılı olursa işlem meta verilerini aşağıdaki biçimde döndürür:

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

Bir projede Gemini Code Assist için günlük kaydını devre dışı bırakma

Aşağıdaki seçeneklerden birini belirtin:

Console

  1. Google Cloud Console'da Gemini için Yönetici sayfasına gidin.

    Google Cloud için Gemini'a gitme

    Google Cloud için Gemini sayfası yüklenir.

  2. Soldaki gezinme menüsünde Ayarlar'ı tıklayın.

    Ayarlar sayfası yüklenir.

  3. Projede Gemini Code Assist Standard ve Enterprise kullanımından elde edilen meta verilerin kaydedilmesini devre dışı bırakmak için Code Assist meta verileri için günlük kaydı'nı tıklayın.

  4. Save Changes'ı (Değişiklikleri Kaydet) tıklayın.

API

Gemini Code Assist Standard ve Enterprise için günlük kaydını devre dışı bırakmak üzere loggingSetting yöntemini kullanın.

  1. Ayarı ve ayara özgü değeri oluşturun:

    1. Jetonu alın:

      TOKEN=$(gcloud auth print-access-token)
      
  2. Gemini Code Assist Standard ve Enterprise günlükleri ayarlarını devre dışı bırakmak için aşağıdaki komutu çalıştırın:

      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"
    

    Aşağıdakini değiştirin:

    • CONTAINER_PROJECT_NAME: Üst proje kimliğini girin.
    • LOGS_SETTING_ID: Mevcut ayar adını girin (ör. gcalm).

      Komut başarılı olursa log_prompts_and_responses ve log_metadata değerlerinin false olarak ayarlandığını gösteren bir yanıt gövdesi döndürür:

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

Çoklu proje günlük kaydını ayarlama

Proje başına kullanımı izlemek için metrikler ve kontrol panelleri oluşturmak üzere Gemini Code Assist'ten alınan günlükleri kullanabilirsiniz. Kuruluşunuzun birden fazla projesi varsa birden fazla projeden günlük toplamak ve bu projelerde kontrol panelleri oluşturmak için merkezi bir günlük kaydı projesi yapılandırabilirsiniz.

Merkezi günlük kaydı projesi oluşturma

Bu proje, diğer projelerinizdeki günlükler için bir merkez görevi görür.

  1. Google Cloud Console'da Proje oluşturma sayfasına gidin.

    Proje Oluştur'a gitme

  2. Yeni Proje penceresinde aşağıdaki alanlar için değerler girin:

    • Proje adı: Merkezi günlük kaydı projenizin adı.
    • Faturalandırma hesabı: Bir faturalandırma hesabı seçin.
    • Kuruluş: Kuruluşunuzu seçin. Merkezi bir proje yalnızca aynı kuruluştaki projelerden günlük toplayabilir.
    • Konum: Bir konum seçin.
  3. Oluştur'u tıklayın.

Günlük havuzlarını yapılandırma

Günlükleri merkezi projeye yönlendirmek için günlükleri toplamak istediğiniz her bir projede günlük havuzlarını yapılandırın.

Her proje için günlük havuzlarını yapılandırmak üzere aşağıdakileri yapın:

  1. Google Cloud Console'da, günlükleri toplamak istediğiniz bir projeye geçin.
  2. Günlük Yönlendirici sayfasına gidin:

    Günlük Yönlendirici'ye git

  3. Havuz oluştur'u tıklayın.

  4. Sink ayrıntıları için sink'in adını ve açıklamasını girip Sonraki'yi tıklayın.

  5. Sink destination (Hedef havuz) için aşağıdakileri yapın:

    1. Select sink service (Hedef hizmeti seçin) menüsünde Logging bucket'ı (Günlük kaydı paketi) seçin.
    2. Günlük paketi menüsünde Günlük paketini başka bir projede kullan'ı seçin.
    3. Sink destination (Veri havuzu hedefi) alanına şunları girin:

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

      CENTRALIZED_PROJECT_ID kısmını, oluşturduğunuz merkezi günlük kaydı projesinin proje kimliğiyle değiştirin.

    4. İleri'yi tıklayın.

  6. Havuza dahil edilecek günlükleri seçin bölümünde, Dahil etme filtresi alanına aşağıdakileri girerek bir dahil etme filtresi oluşturun:

    resource.type="cloudaicompanion.googleapis.com/Instance"
    
  7. İleri'yi tıklayın.

  8. Filtrelenip havuzdan çıkarılacak olan günlükleri seçin için hariç tutma filtresini boş bırakın ve Havuz oluştur'u tıklayın.

  9. Havuz oluşturulduktan sonra Günlük Yönlendirici sayfasında oluşturduğunuz havuzu bulun.

  10. Yazar Kimliği sütununda, hizmet hesabının tam e-posta adresini kopyalayın.

Erişimi yapılandırma

Havuzunuzun merkezi projeye günlük yazmasına izin vermek için aşağıdakileri yapın:

  1. Google Cloud Console'da, oluşturduğunuz merkezi projeye geçin.
  2. IAM sayfasına gidin:

    IAM'e git

  3. Grant access'i (Erişim izni ver) tıklayın.

  4. Yeni ana hesaplar alanına, önceki bölümde kopyaladığınız hizmet hesabı e-posta adresini yapıştırın.

  5. Başka bir rol ekle'yi tıklayın.

  6. Logs Bucket Writer (Günlük Paketi Yazıcı) rolünü arayıp seçin (roles/logging.bucketWriter).

  7. Kaydet'i tıklayın.

Merkezi projede kontrol paneli oluşturma

Merkezi projenizi günlükleri alacak şekilde yapılandırdıktan sonra birden fazla projenin metriklerini görüntülemek için bir kontrol paneli oluşturabilirsiniz:

  1. Google Cloud Console'da İzleme > Kontrol panelleri'ne gidin:

    Kontrol panellerine gitme

  2. Kontrol paneli oluştur'u tıklayın.

  3. Araç çubuğunda Ayarlar'ı tıklayın, ardından JSON > JSON Düzenleyici'yi seçin.

  4. JSON düzenleyicide aşağıdaki kodu yapıştırın:

    {
      "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. Aşağıdakini değiştirin:

    • CENTRALIZED_PROJECT_ID: Oluşturduğunuz merkezi günlük kaydı projesinin proje kimliği.
    • SOURCE_PROJECT_ID_1 ve SOURCE_PROJECT_ID_2: Günlükleri toplamak istediğiniz projelerin proje kimlikleri. İkiden fazla projeden günlük toplamak istiyorsanız sorgunun in yan tümcelerine daha fazla proje kimliği ekleyebilirsiniz.

Çok projeli günlük kaydını devre dışı bırakma

Gemini Code Assist günlük kaydını birden fazla proje için yapılandırdıysanız günlükleri merkezi projeye yönlendiren günlük havuzlarını silerek bu özelliği devre dışı bırakabilirsiniz. Günlüklerin tek bir projeden merkezi projeye gönderilmesini durdurmak için ilgili projede oluşturduğunuz günlük havuzunu silin:

  1. Google Cloud Console'da, günlük toplamayı durdurmak istediğiniz bir projeye geçin.
  2. Günlük Yönlendirici sayfasına gidin:

    Günlük Yönlendirici'ye git

  3. Günlükleri merkezi projenize yönlendiren havuzu belirleyin.

  4. İlgili havuzun satırında Diğer işlemler'i tıklayın ve Havuzu sil'i seçin.

  5. Açılan iletişim kutusunda Sil'i tıklayın.

Merkezi projeye günlük göndermeyi durdurmak istediğiniz her proje için bu adımları tekrarlayın.

Sırada ne var?