Gemini Code Assist स्टैंडर्ड और एंटरप्राइज़ लॉगिंग को कॉन्फ़िगर करना

इस दस्तावेज़ में, Google Cloud Console या किसी एपीआई का इस्तेमाल करके, किसी प्रोजेक्ट के लिए Gemini Code Assist Standard और Enterprise की लॉगिंग को कॉन्फ़िगर करने का तरीका बताया गया है.

सीमाएं

  • Google Cloud में Gemini Standard और Enterprise के लॉग डेटा को रिकॉर्ड करने की सुविधा, सिर्फ़ आईडीई में Gemini Code Assist के साथ उपयोगकर्ता के इंटरैक्शन तक सीमित है.

  • डिफ़ॉल्ट रूप से, Google Cloud के लिए Gemini के लॉग, हर प्रोजेक्ट के हिसाब से इकट्ठा किए जाते हैं. एक से ज़्यादा प्रोजेक्ट से लॉग इकट्ठा करने के लिए, किसी एक प्रोजेक्ट को केंद्रीकृत प्रोजेक्ट के तौर पर कॉन्फ़िगर करने के निर्देशों के लिए, एक से ज़्यादा प्रोजेक्ट के लिए लॉगिंग सेट अप करना लेख पढ़ें.

  • GitHub पर Gemini Code Assist Cloud Logging के साथ लॉगिंग की सुविधा के साथ काम नहीं करता.

शुरू करने से पहले

पुष्टि करें कि आपका Google Cloud प्रोजेक्ट, किसी बिलिंग खाते से जुड़ा हो.

IAM अनुमतियों की पुष्टि करना

Gemini Code Assist की लॉगिंग को कॉन्फ़िगर करने के लिए, आपको IAM की खास अनुमतियों की ज़रूरत होती है. कम से कम अधिकारों के सिद्धांत को अपनाएं. इसके लिए, पसंद के मुताबिक ऐसी भूमिका दें जिसमें सिर्फ़ ज़रूरी अनुमतियां शामिल हों.

अपने एडमिन से, पसंद के मुताबिक ऐसी भूमिका बनाने के लिए कहें जिसमें ये अनुमतियां शामिल हों:

  • serviceusage.services.enable—अपने प्रोजेक्ट के लिए एपीआई चालू करने के लिए.
  • cloudaicompanion.loggingSettings.create—लॉगिंग सेटिंग बनाने के लिए.
  • cloudaicompanion.loggingSettings.get—लॉगिंग सेटिंग देखने के लिए.
  • cloudaicompanion.loggingSettings.list—लॉगिंग सेटिंग की सूची देखने के लिए.
  • cloudaicompanion.loggingSettings.update—लॉगिंग सेटिंग अपडेट करने के लिए.
  • cloudaicompanion.loggingSettingBindings.create—लॉगिंग सेटिंग को किसी प्रोजेक्ट से बाइंड करने के लिए.
  • cloudaicompanion.loggingSettingBindings.get—लॉगिंग सेटिंग के बाइंडिंग देखने के लिए.
  • cloudaicompanion.loggingSettingBindings.list—लॉगिंग सेटिंग के बाइंडिंग की सूची देखने के लिए.

इसके अलावा, पहले से तय की गई भूमिकाएं Gemini for Google Cloud की सेटिंग का एडमिन (roles/cloudaicompanion.settingsAdmin) और सेवा के इस्तेमाल का एडमिन (roles/serviceusage.serviceUsageAdmin) भी दी जा सकती हैं. हालांकि, इन भूमिकाओं में, Google Cloud के लिए Gemini की एडमिन सेटिंग को कॉन्फ़िगर करने और सेवा के इस्तेमाल को मैनेज करने की अनुमतियां शामिल होती हैं. हो सकता है कि लॉगिंग सेटिंग को कॉन्फ़िगर करने के लिए, आपको इन अनुमतियों की ज़रूरत न हो.

Gemini Code Assist की लॉगिंग को कॉन्फ़िगर करना

इन सेक्शन में, Cloud Logging में Gemini Code Assist Standard और Enterprise की गतिविधि का डेटा इकट्ठा करने और सेव करने के लिए ज़रूरी चरणों के बारे में बताया गया है. इनमें ये शामिल हैं:

  • Gemini Code Assist Standard और Enterprise के प्रॉम्प्ट और जवाब के लॉग. जैसे, उपयोगकर्ता का इनपुट, कॉन्टेक्चुअल जानकारी, और जवाब.

  • Gemini Code Assist Standard और Enterprise के मेटाडेटा लॉग. जैसे, टेलीमेट्री मेटाडेटा और उपयोगकर्ता की ओर से स्वीकार की गई कोड की लाइनें.

दोनों तरह के लॉग के बारे में ज़्यादा जानने के लिए, Gemini के लॉग देखना लेख पढ़ें.

किसी प्रोजेक्ट में Gemini Code Assist के लिए लॉगिंग की सुविधा चालू करना

निम्न विकल्पों में से कोई एक चुनें:

कंसोल

  1. पुष्टि करें कि आपने प्रोजेक्ट में Cloud Logging एपीआई चालू किया हो.

  2. Google Cloud Console में, Gemini के लिए एडमिन पेज पर जाएं.

    Google Cloud के लिए Gemini पर जाएं

    Google Cloud के लिए Gemini पेज लोड होता है.

  3. बाईं ओर मौजूद नेविगेशन मेन्यू में, सेटिंग पर क्लिक करें.

    सेटिंग पेज लोड होता है.

  4. (ज़रूरी नहीं) प्रोजेक्ट में Gemini Code Assist Standard और Enterprise के उपयोगकर्ताओं की ओर से जनरेट किए गए मेटाडेटा को रिकॉर्ड करने के लिए, Code Assist के मेटाडेटा की लॉगिंग पर क्लिक करें.

  5. (ज़रूरी नहीं) प्रोजेक्ट में Gemini Code Assist Standard और Enterprise के उपयोगकर्ताओं की ओर से जनरेट किए गए प्रॉम्प्ट और जवाबों को रिकॉर्ड करने के लिए, Code Assist के प्रॉम्प्ट और जवाबों की लॉगिंग पर क्लिक करें.

  6. बदलाव सेव करें पर क्लिक करें.

एपीआई

Gemini Code Assist Standard और Enterprise के लिए लॉगिंग की सुविधा चालू करने के लिए, loggingSettings संसाधन का इस्तेमाल करके, अपनी पसंद की लॉगिंग सेटिंग तय करें. इसके बाद, loggingSettings.settingBindings संसाधन का इस्तेमाल करके, सेटिंग को किसी प्रोजेक्ट से बाइंड करें:

  1. पुष्टि करें कि आपने प्रोजेक्ट में Cloud Logging एपीआई चालू किया हो.

  2. सेटिंग और सेटिंग के लिए खास वैल्यू बनाएं:

    1. टोकन पाएं:

      TOKEN=$(gcloud auth print-access-token)
      
  3. Gemini Code Assist Standard और Enterprise के लॉग चालू करें. उपयोगकर्ताओं के लॉग और मेटाडेटा लॉग, क्रमशः log_prompts_and_responses और log_metadata फ़ील्ड के साथ चालू किए जाते हैं. अगर आपको इनमें से कोई फ़ील्ड चालू नहीं करना है, तो उसे अनुरोध से हटा दें.

    1. सेटिंग बनाने के लिए, यह कमांड चलाएं:

      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"
      

      इनकी जगह ये डालें:

      • CONTAINER_PROJECT_NAME: उस प्रोजेक्ट का आईडी डालें जिसमें बाइंडिंग संसाधन सेव है. यह बाइंडिंग का पैरंट प्रोजेक्ट है.
      • LOGS_SETTING_ID: सेटिंग का कोई यूनीक नाम डालें. जैसे, gcalm.

      अगर कमांड सही से काम करता है, तो यह जवाब का मुख्य हिस्सा दिखाता है. इसमें log_prompts_and_responses और log_metadata को 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. Gemini Code Assist Standard और 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"
      

    इनकी जगह ये डालें:

    • TARGET_PROJECT_NAME: टारगेट प्रोजेक्ट का नाम डालें जिससे बाइंडिंग को बाइंड किया जाना चाहिए. आम तौर पर, यह कंटेनर प्रोजेक्ट जैसा ही होता है. हालांकि, किसी सेटिंग को एक से ज़्यादा प्रोजेक्ट से बाइंड किया जा सकता है, ताकि सेटिंग संसाधन को डुप्लीकेट न करना पड़े.
    • LOGS_BINDING_ID: सेटिंग बनाते समय इस्तेमाल किया गया LOGS_SETTING_ID ही इस्तेमाल करें. हालांकि, इसके आखिर में b1 जोड़ें. उदाहरण के लिए, gcalmb1 का इस्तेमाल करें.

    अगर कमांड सही से काम करता है, तो यह इस फ़ॉर्मैट में ऑपरेशन का मेटाडेटा दिखाता है:

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

किसी प्रोजेक्ट में Gemini Code Assist के लिए लॉगिंग की सुविधा बंद करना

निम्न विकल्पों में से कोई एक चुनें:

कंसोल

  1. Google Cloud Console में, Gemini के लिए एडमिन पेज पर जाएं.

    Google Cloud के लिए Gemini पर जाएं

    Google Cloud के लिए Gemini पेज लोड होता है.

  2. बाईं ओर मौजूद नेविगेशन मेन्यू में, सेटिंग पर क्लिक करें.

    सेटिंग पेज लोड होता है.

  3. प्रोजेक्ट में Gemini Code Assist Standard और Enterprise के इस्तेमाल से जनरेट हुए मेटाडेटा को रिकॉर्ड करने की सुविधा बंद करने के लिए, Code Assist के मेटाडेटा की लॉगिंग पर क्लिक करें.

  4. बदलाव सेव करें पर क्लिक करें.

एपीआई

Gemini Code Assist Standard और Enterprise के लिए लॉगिंग की सुविधा बंद करने के लिए, loggingSetting तरीके का इस्तेमाल करें.

  1. सेटिंग और सेटिंग के लिए खास वैल्यू बनाएं:

    1. टोकन पाएं:

      TOKEN=$(gcloud auth print-access-token)
      
  2. Gemini Code Assist Standard और 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"
    

    इनकी जगह ये डालें:

    • CONTAINER_PROJECT_NAME: पैरंट प्रोजेक्ट आईडी डालें.
    • LOGS_SETTING_ID: मौजूदा सेटिंग का नाम डालें. जैसे, gcalm.

      अगर कमांड सही से काम करता है, तो यह जवाब का मुख्य हिस्सा दिखाता है. इसमें log_prompts_and_responses और log_metadata को 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
      }
      

एक से ज़्यादा प्रोजेक्ट के लिए लॉगिंग सेट अप करना

Gemini Code Assist के लॉग का इस्तेमाल करके, हर प्रोजेक्ट के इस्तेमाल की निगरानी के लिए मेट्रिक और डैशबोर्ड बनाए जा सकते हैं. अगर आपके संगठन के पास एक से ज़्यादा प्रोजेक्ट हैं, तो एक केंद्रीकृत लॉगिंग प्रोजेक्ट को कॉन्फ़िगर किया जा सकता है. इससे एक से ज़्यादा प्रोजेक्ट के लॉग इकट्ठा किए जा सकते हैं और उन प्रोजेक्ट के लिए डैशबोर्ड जनरेट किए जा सकते हैं.

केंद्रीकृत लॉगिंग प्रोजेक्ट बनाना

यह प्रोजेक्ट, आपके अन्य प्रोजेक्ट के लॉग के लिए हब के तौर पर काम करेगा.

  1. Google Cloud Console में, प्रोजेक्ट बनाना पेज पर जाएं.

    प्रोजेक्ट बनाएं पर जाएं

  2. नया प्रोजेक्ट विंडो में, इन फ़ील्ड के लिए वैल्यू डालें:

    • प्रोजेक्ट का नाम: आपके केंद्रीकृत लॉगिंग प्रोजेक्ट का नाम.
    • बिलिंग खाता: कोई बिलिंग खाता चुनें.
    • संगठन: अपना संगठन चुनें. कोई केंद्रीकृत प्रोजेक्ट, सिर्फ़ एक ही संगठन के प्रोजेक्ट से लॉग इकट्ठा कर सकता है.
    • जगह: कोई जगह चुनें.
  3. बनाएं पर क्लिक करें.

लॉग सिंक कॉन्फ़िगर करना

लॉग को केंद्रीकृत प्रोजेक्ट में भेजने के लिए, उन सभी प्रोजेक्ट में लॉग सिंक कॉन्फ़िगर करें जिनसे आपको लॉग इकट्ठा करने हैं.

हर प्रोजेक्ट के लिए लॉग सिंक कॉन्फ़िगर करने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, उस प्रोजेक्ट पर जाएं जिसके लॉग आपको इकट्ठा करने हैं.
  2. लॉग राऊटर पेज पर जाएं:

    लॉग राऊटर पर जाएं

  3. सिंक बनाएं पर क्लिक करें.

  4. सिंक की जानकारी में, सिंक का नाम और ब्यौरा डालें. इसके बाद, आगे बढ़ें पर क्लिक करें.

  5. **सिंक की डेस्टिनेशन** के लिए, यह तरीका अपनाएं:

    1. सिंक की सेवा चुनें मेन्यू में, लॉगिंग बकेट चुनें.
    2. लॉग बकेट मेन्यू में, किसी दूसरे प्रोजेक्ट में मौजूद लॉग बकेट का इस्तेमाल करें चुनें.
    3. सिंक की डेस्टिनेशन फ़ील्ड में, यह डालें:

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

      CENTRALIZED_PROJECT_ID की जगह, बनाए गए केंद्रीकृत लॉगिंग प्रोजेक्ट का आईडी डालें.

    4. आगे बढ़ें पर क्लिक करें.

  6. सिंक में शामिल करने के लिए लॉग चुनें में, शामिल करने का फ़िल्टर फ़ील्ड में यह डालकर, शामिल करने का फ़िल्टर बनाएं:

    resource.type="cloudaicompanion.googleapis.com/Instance"
    
  7. आगे बढ़ें पर क्लिक करें.

  8. सिंक से फ़िल्टर करके हटाने के लिए लॉग चुनें में, एक्सक्लूज़न फ़िल्टर को खाली छोड़ें और सिंक बनाएं पर क्लिक करें.

  9. सिंक बन जाने के बाद, लॉग राऊटर पेज पर, बनाया गया सिंक ढूंढें.

  10. राइटर की पहचान कॉलम में, सेवा खाते का पूरा ईमेल पता कॉपी करें.

ऐक्सेस कॉन्फ़िगर करें

अपने सिंक को केंद्रीकृत प्रोजेक्ट में लॉग लिखने का ऐक्सेस देने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, बनाए गए केंद्रीकृत प्रोजेक्ट पर जाएं.
  2. IAM पेज पर जाएं:

    IAM पर जाएं

  3. ऐक्सेस दें पर क्लिक करें.

  4. प्रिंसिपल फ़ील्ड में, सेवा खाते का वह ईमेल पता चिपकाएं जिसे आपने पिछले सेक्शन में कॉपी किया था.

  5. कोई और भूमिका जोड़ें पर क्लिक करें.

  6. लॉग बकेट राइटर भूमिका (roles/logging.bucketWriter) खोजें और उसे चुनें.

  7. सेव करें पर क्लिक करें.

केंद्रीकृत प्रोजेक्ट में डैशबोर्ड बनाना

लॉग पाने के लिए, केंद्रीकृत प्रोजेक्ट को कॉन्फ़िगर करने के बाद, एक से ज़्यादा प्रोजेक्ट की मेट्रिक देखने के लिए डैशबोर्ड बनाया जा सकता है:

  1. Google Cloud Console में, मॉनिटरिंग > डैशबोर्ड पर जाएं:

    डैशबोर्ड पर जाएं

  2. डैशबोर्ड बनाएं पर क्लिक करें.

  3. टूलबार में, सेटिंग पर क्लिक करें. इसके बाद, JSON > JSON एडिटर चुनें.

  4. JSON एडिटर में, यह कोड चिपकाएं:

    {
      "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. इनकी जगह ये डालें:

    • CENTRALIZED_PROJECT_ID: बनाए गए केंद्रीकृत लॉगिंग प्रोजेक्ट का आईडी.
    • SOURCE_PROJECT_ID_1 और SOURCE_PROJECT_ID_2: उन प्रोजेक्ट के आईडी जिनसे आपको लॉग इकट्ठा करने हैं. अगर आपको दो से ज़्यादा प्रोजेक्ट से लॉग इकट्ठा करने हैं, तो क्वेरी के in क्लॉज़ में और प्रोजेक्ट आईडी जोड़े जा सकते हैं.

एक से ज़्यादा प्रोजेक्ट के लिए लॉगिंग की सुविधा बंद करना

अगर आपने एक से ज़्यादा प्रोजेक्ट के लिए Gemini Code Assist की लॉगिंग को कॉन्फ़िगर किया है, तो लॉग सिंक मिटाकर इसे बंद किया जा सकता है. ये सिंक, लॉग को केंद्रीकृत प्रोजेक्ट में भेजते हैं. किसी एक प्रोजेक्ट से लॉग को केंद्रीकृत प्रोजेक्ट में भेजने से रोकने के लिए, उस प्रोजेक्ट में बनाया गया लॉग सिंक मिटाएं:

  1. Google Cloud Console में, उस प्रोजेक्ट पर जाएं जिसके लॉग आपको इकट्ठा नहीं करने हैं.
  2. लॉग राऊटर पेज पर जाएं:

    लॉग राऊटर पर जाएं

  3. वह सिंक ढूंढें जो लॉग को आपके केंद्रीकृत प्रोजेक्ट में भेजता है.

  4. उस सिंक की लाइन में, ज़्यादा कार्रवाइयां पर क्लिक करें. इसके बाद, सिंक मिटाएं को चुनें.

  5. दिखने वाले डायलॉग में, मिटाएं पर क्लिक करें.

हर उस प्रोजेक्ट के लिए यह तरीका दोहराएं जिसके लॉग आपको केंद्रीकृत प्रोजेक्ट में नहीं भेजने हैं.

आगे क्या करना है