জেমিনি কোড অ্যাসিস্ট স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ লগিং কনফিগার করুন

এই ডকুমেন্টে বর্ণনা করা হয়েছে কীভাবে গুগল ক্লাউড কনসোল বা এপিআই ব্যবহার করে কোনো প্রোজেক্টের জন্য জেমিনি কোড অ্যাসিস্ট স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ লগিং কনফিগার করতে হয়।

সীমাবদ্ধতা

  • গুগল ক্লাউডে জেমিনি স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ সংস্করণের লগ ডেটা রেকর্ডিং শুধুমাত্র একটি IDE-এর মধ্যে জেমিনি কোড অ্যাসিস্ট-এর সাথে ব্যবহারকারীর ইন্টারঅ্যাকশনের মধ্যেই সীমাবদ্ধ।

  • ডিফল্টরূপে, Gemini for Google Cloud-এর লগগুলো প্রজেক্ট-ভিত্তিক সংগ্রহ করা হয়। একাধিক প্রজেক্ট থেকে লগ সংগ্রহের জন্য কীভাবে একটি কেন্দ্রীভূত প্রজেক্ট কনফিগার করতে হয়, তার নির্দেশাবলীর জন্য ‘একাধিক প্রজেক্ট লগিং সেট আপ করুন ’ দেখুন।

  • গিটহাবে থাকা জেমিনি কোড অ্যাসিস্ট ক্লাউড লগিং সমর্থন করে না।

শুরু করার আগে

আপনার গুগল ক্লাউড প্রজেক্টটি একটি বিলিং অ্যাকাউন্টের সাথে সংযুক্ত আছে কিনা তা যাচাই করুন।

IAM অনুমতি যাচাই করুন

Gemini Code Assist লগিং কনফিগার করতে আপনার নির্দিষ্ট IAM পারমিশন প্রয়োজন। সর্বনিম্ন বিশেষাধিকারের নীতি অনুসরণ করতে, এমন একটি কাস্টম রোল প্রদান করুন যাতে শুধুমাত্র প্রয়োজনীয় পারমিশনগুলো থাকে।

আপনার অ্যাডমিনিস্ট্রেটরকে এমন একটি কাস্টম রোল তৈরি করতে বলুন যাতে নিম্নলিখিত অনুমতিগুলো অন্তর্ভুক্ত থাকে:

  • serviceusage.services.enable —আপনার প্রোজেক্টের জন্য API সক্রিয় করতে।
  • 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 Settings Admin’ ( roles/cloudaicompanion.settingsAdmin ) এবং ‘Service Usage Admin’ ( roles/serviceusage.serviceUsageAdmin ) প্রদান করতে পারেন। তবে, এই রোলগুলোতে সমস্ত ‘Gemini for Google Cloud’ অ্যাডমিনিস্ট্রেটর সেটিংস কনফিগার করার এবং পরিষেবা ব্যবহার পরিচালনা করার অনুমতি অন্তর্ভুক্ত রয়েছে, যা লগিং সেটিংস কনফিগার করার জন্য প্রয়োজনের চেয়ে বেশি হতে পারে।

জেমিনি কোড অ্যাসিস্ট লগিং কনফিগার করুন

ক্লাউড লগিং-এ জেমিনি কোড অ্যাসিস্ট স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ অ্যাক্টিভিটির সংগ্রহ ও সংরক্ষণ সক্ষম করার জন্য প্রয়োজনীয় পদক্ষেপগুলো নিম্নলিখিত বিভাগগুলিতে দেওয়া হলো, যার মধ্যে রয়েছে:

  • জেমিনি কোড অ্যাসিস্ট স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ সংস্করণের প্রম্পট ও রেসপন্স লগ, যেমন ব্যবহারকারীর ইনপুট, প্রাসঙ্গিক তথ্য এবং প্রতিক্রিয়া।

  • জেমিনি কোড অ্যাসিস্ট স্ট্যান্ডার্ড এবং এন্টারপ্রাইজ মেটাডেটা লগ, যেমন টেলিমেট্রি মেটাডেটা এবং ব্যবহারকারী কর্তৃক গৃহীত কোডের লাইন।

উভয় প্রকার লগ সম্পর্কে আরও বিস্তারিত জানতে, জেমিনি লগ দেখুন

একটি প্রোজেক্টে জেমিনি কোড অ্যাসিস্টের জন্য লগিং চালু করুন।

নিম্নলিখিত বিকল্পগুলির মধ্যে একটি নির্বাচন করুন:

কনসোল

  1. প্রজেক্টে ক্লাউড লগিং এপিআই সক্রিয় করা আছে কিনা তা যাচাই করুন।

  2. গুগল ক্লাউড কনসোলে, জেমিনি অ্যাডমিন পেজে যান।

    গুগল ক্লাউডের জন্য জেমিনিতে যান

    জেমিনি ফর গুগল ক্লাউড পেজটি লোড হয়।

  3. বাম দিকের নেভিগেশন মেনুতে থাকা সেটিংস- এ ক্লিক করুন।

    সেটিংস পৃষ্ঠাটি লোড হয়।

  4. (ঐচ্ছিক) প্রজেক্টে Gemini Code Assist Standard এবং Enterprise-এর ব্যবহারকারীদের দ্বারা তৈরি মেটাডেটা রেকর্ড করতে, Code Assist মেটাডেটার জন্য লগিং-এ ক্লিক করুন।

  5. (ঐচ্ছিক) প্রোজেক্টে Gemini Code Assist Standard এবং Enterprise-এর ব্যবহারকারীদের দ্বারা তৈরি করা প্রম্পট এবং প্রতিক্রিয়াগুলি রেকর্ড করতে, "Logging for Code Assist prompts and responses"- এ ক্লিক করুন।

  6. পরিবর্তনগুলি সংরক্ষণ করুন- এ ক্লিক করুন।

এপিআই

Gemini Code Assist Standard এবং Enterprise-এর জন্য লগিং সক্রিয় করতে, আপনার পছন্দের লগিং সেটিংস নির্ধারণ করার জন্য loggingSettings রিসোর্সটি ব্যবহার করুন, এবং সেই সেটিংসগুলোকে একটি প্রজেক্টের সাথে যুক্ত করার জন্য loggingSettings.settingBindings রিসোর্সটি ব্যবহার করুন:

  1. প্রজেক্টে ক্লাউড লগিং এপিআই সক্রিয় করা আছে কিনা তা যাচাই করুন।

  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. গুগল ক্লাউড কনসোলে, জেমিনি অ্যাডমিন পেজে যান।

    গুগল ক্লাউডের জন্য জেমিনিতে যান

    জেমিনি ফর গুগল ক্লাউড পেজটি লোড হয়।

  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
      }
      

একাধিক প্রজেক্ট লগিং সেট আপ করুন

আপনি প্রতি-প্রকল্পের ব্যবহার নিরীক্ষণের জন্য মেট্রিক্স এবং ড্যাশবোর্ড তৈরি করতে জেমিনি কোড অ্যাসিস্টের লগ ব্যবহার করতে পারেন। যদি আপনার প্রতিষ্ঠানে একাধিক প্রকল্প থাকে, তবে আপনি একাধিক প্রকল্প থেকে লগ সংগ্রহ করতে এবং সেই প্রকল্পগুলো জুড়ে ড্যাশবোর্ড তৈরি করতে একটি কেন্দ্রীভূত লগিং প্রকল্প কনফিগার করতে পারেন।

একটি কেন্দ্রীভূত লগিং প্রকল্প তৈরি করুন

এই প্রকল্পটি আপনার অন্যান্য প্রকল্পের লগগুলির জন্য একটি কেন্দ্র হিসেবে কাজ করবে।

  1. গুগল ক্লাউড কনসোলে, প্রজেক্ট তৈরির পেজে যান।

    প্রজেক্ট তৈরি করতে যান

  2. নতুন প্রজেক্ট উইন্ডোতে, নিম্নলিখিত ফিল্ডগুলির জন্য মান লিখুন:

    • প্রকল্পের নাম : আপনার কেন্দ্রীভূত লগিং প্রকল্পের জন্য একটি নাম।
    • বিলিং অ্যাকাউন্ট : একটি বিলিং অ্যাকাউন্ট নির্বাচন করুন।
    • সংস্থা : আপনার সংস্থা নির্বাচন করুন। একটি কেন্দ্রীভূত প্রকল্প শুধুমাত্র একই সংস্থার প্রকল্পগুলো থেকে লগ সংগ্রহ করতে পারে।
    • অবস্থান : একটি অবস্থান নির্বাচন করুন।
  3. তৈরি করুন- এ ক্লিক করুন।

লগ সিঙ্ক কনফিগার করুন

কেন্দ্রীয় প্রকল্পে লগ পাঠাতে, আপনি যে প্রতিটি স্বতন্ত্র প্রকল্প থেকে লগ সংগ্রহ করতে চান, সেগুলিতে লগ সিঙ্ক কনফিগার করুন।

প্রতিটি প্রজেক্টের জন্য লগ সিঙ্ক কনফিগার করতে, নিম্নলিখিতগুলি করুন:

  1. গুগল ক্লাউড কনসোলে, এমন একটি প্রজেক্টে যান যেখান থেকে আপনি লগ সংগ্রহ করতে চান।
  2. লগ রাউটার পৃষ্ঠায় যান:

    লগ রাউটারে যান

  3. সিঙ্ক তৈরি করুন -এ ক্লিক করুন।

  4. সিঙ্কের বিবরণের জন্য, সিঙ্কটির একটি নাম ও বর্ণনা লিখুন এবং তারপর 'পরবর্তী' বোতামে ক্লিক করুন।

  5. সিঙ্ক গন্তব্যের জন্য, নিম্নলিখিতগুলি করুন:

    1. সিলেক্ট সিঙ্ক সার্ভিস মেনুতে, লগিং বাকেট নির্বাচন করুন।
    2. লগ বাকেট মেনুতে, ‘Use log bucket in another project’ নির্বাচন করুন।
    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. গুগল ক্লাউড কনসোলে, আপনার তৈরি করা কেন্দ্রীভূত প্রজেক্টটিতে যান।
  2. IAM পৃষ্ঠায় যান:

    IAM-এ যান

  3. অ্যাক্সেস মঞ্জুর করুন-এ ক্লিক করুন।

  4. 'New principals' ফিল্ডে, পূর্ববর্তী বিভাগে কপি করা সার্ভিস অ্যাকাউন্টের ইমেল ঠিকানাটি পেস্ট করুন।

  5. আরেকটি ভূমিকা যোগ করুন -এ ক্লিক করুন।

  6. Logs Bucket Writer রোলটি ( roles/logging.bucketWriter ) খুঁজুন এবং নির্বাচন করুন।

  7. সংরক্ষণ করুন- এ ক্লিক করুন।

কেন্দ্রীভূত প্রকল্পে একটি ড্যাশবোর্ড তৈরি করুন

আপনার কেন্দ্রীভূত প্রজেক্টটি লগ গ্রহণ করার জন্য কনফিগার করার পরে, আপনি একাধিক প্রজেক্টের মেট্রিক্স দেখার জন্য একটি ড্যাশবোর্ড তৈরি করতে পারেন:

  1. Google Cloud কনসোলে, মনিটরিং > ড্যাশবোর্ড- এ যান:

    ড্যাশবোর্ডে যান

  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. গুগল ক্লাউড কনসোলে, এমন একটি প্রজেক্টে যান যেখান থেকে আপনি লগ সংগ্রহ বন্ধ করতে চান।
  2. লগ রাউটার পৃষ্ঠায় যান:

    লগ রাউটারে যান

  3. সেই সিঙ্কটি শনাক্ত করুন যা আপনার কেন্দ্রীভূত প্রকল্পে লগ পাঠায়।

  4. সেই সিঙ্কের সারিতে, 'More actions'-এ ক্লিক করুন এবং তারপরে 'Delete sink' নির্বাচন করুন।

  5. প্রদর্শিত ডায়ালগ বক্সে, ডিলিট-এ ক্লিক করুন।

যেসব প্রজেক্টের লগ আপনি কেন্দ্রীভূত প্রজেক্টে পাঠানো বন্ধ করতে চান, সেগুলোর প্রতিটির জন্য এই ধাপগুলো পুনরাবৃত্তি করুন।

এরপর কী?