OpenTelemetry ব্যবহার করে ইনস্ট্রুমেন্ট ট্রেস তথ্য

1. ভূমিকা

5af4a7e43b0feaab.png সম্পর্কে

শেষ আপডেট: ২০২১-০৩-০৫

আবেদনের পর্যবেক্ষণযোগ্যতা

পর্যবেক্ষণযোগ্যতা এবং ওপেনটেলিমেট্রি

পর্যবেক্ষণযোগ্যতা শব্দটি একটি সিস্টেমের বৈশিষ্ট্য বর্ণনা করতে ব্যবহৃত হয়। পর্যবেক্ষণযোগ্যতা সম্পন্ন একটি সিস্টেম দলগুলিকে তাদের সিস্টেম সক্রিয়ভাবে ডিবাগ করার সুযোগ দেয়। এই প্রেক্ষাপটে, পর্যবেক্ষণযোগ্যতার তিনটি স্তম্ভ; লগ, মেট্রিক্স এবং ট্রেস হল সিস্টেমের পর্যবেক্ষণযোগ্যতা অর্জনের জন্য মৌলিক উপকরণ।

ওপেনটেলিমেট্রি হল স্পেসিফিকেশন এবং SDK-এর একটি সেট যা পর্যবেক্ষণযোগ্যতার জন্য প্রয়োজনীয় টেলিমেট্রি ডেটা (লগ, মেট্রিক্স এবং ট্রেস) এর উপকরণ এবং রপ্তানিকে ত্বরান্বিত করে। ওপেনটেলিমেট্রি হল CNCF-এর অধীনে একটি উন্মুক্ত মান এবং সম্প্রদায় চালিত প্রকল্প। প্রকল্প এবং এর ইকোসিস্টেম দ্বারা প্রদত্ত লাইব্রেরিগুলি ব্যবহার করে, ডেভেলপাররা বিক্রেতা নিরপেক্ষ উপায়ে এবং একাধিক আর্কিটেকচারের বিপরীতে তাদের অ্যাপ্লিকেশনগুলিকে উপকরণ করতে সক্ষম হয়।

বিতরণকৃত ট্রেস

লগ, মেট্রিক্স এবং ট্রেসের মধ্যে, ট্রেস হল টেলিমেট্রি যা সিস্টেমের প্রক্রিয়ার একটি নির্দিষ্ট অংশের লেটেন্সি বলে। বিশেষ করে মাইক্রোসার্ভিসের যুগে, ডিস্ট্রিবিউটেড ট্রেস হল সামগ্রিক ডিস্ট্রিবিউটেড সিস্টেমের লেটেন্সি বাধাগুলি খুঁজে বের করার জন্য একটি শক্তিশালী চালিকাশক্তি।

ডিস্ট্রিবিউটেড ট্রেস বিশ্লেষণ করার সময়, ট্রেস ডেটা ভিজ্যুয়ালাইজেশন হল সামগ্রিক সিস্টেম ল্যাটেন্সিগুলিকে এক নজরে উপলব্ধি করার মূল চাবিকাঠি। ডিস্ট্রিবিউটেড ট্রেসে, আমরা একাধিক স্প্যান ধারণকারী ট্রেস আকারে সিস্টেম এন্ট্রিপয়েন্টে একটি একক অনুরোধ প্রক্রিয়া করার জন্য কলগুলির একটি সেট পরিচালনা করি।

স্প্যান একটি বিতরণ ব্যবস্থায় সম্পন্ন কাজের একটি পৃথক একককে প্রতিনিধিত্ব করে, যা শুরু এবং শেষের সময় রেকর্ড করে। স্প্যানগুলির প্রায়শই একে অপরের মধ্যে শ্রেণিবদ্ধ সম্পর্ক থাকে - নীচের ছবিতে সমস্ত ছোট স্প্যান হল একটি বৃহৎ /messages স্প্যানের চাইল্ড স্প্যান, এবং একটি ট্রেসে একত্রিত হয় যা একটি সিস্টেমের মাধ্যমে কাজের পথ দেখায়।

adbd3ecd69d410cb.png সম্পর্কে

গুগল ক্লাউড ট্রেস হল ডিস্ট্রিবিউটেড ট্রেস ব্যাকএন্ডের জন্য একটি বিকল্প এবং এটি গুগল ক্লাউডের অন্যান্য পণ্যের সাথে ভালভাবে সংহত।

তুমি কী তৈরি করবে

এই কোডল্যাবে, আপনি "Shakesapp" নামক পরিষেবাগুলিতে তথ্য ট্রেস করতে যাচ্ছেন যা Google Kubernetes Engine-এ চলমান একটি Kubernetes ক্লাস্টারের উপর চলে। Shakesapp-এর আর্কিটেকচার নীচে বর্ণিত হয়েছে:

68873c018a7be7de.png সম্পর্কে

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

আপনি অনুরোধ জুড়ে ট্রেস তথ্য সরবরাহ করবেন।

তুমি কি শিখবে

  • পাইথন প্রকল্পে ওপেনটেলিমেট্রি ট্রেস লাইব্রেরিগুলি কীভাবে শুরু করবেন
  • লাইব্রেরি দিয়ে কিভাবে একটি স্প্যান তৈরি করবেন
  • অ্যাপ কম্পোনেন্টের মধ্যে তারের মাধ্যমে স্প্যান কনটেক্সট কীভাবে প্রচার করা যায়
  • গুগল ক্লাউড ট্রেসে ট্রেস ডেটা কীভাবে পাঠাবেন
  • গুগল ক্লাউড ট্রেসে ট্রেস কীভাবে বিশ্লেষণ করবেন

এই কোডল্যাবটি ব্যাখ্যা করে কিভাবে আপনার মাইক্রোসার্ভিসেস ইন্সট্রুমেন্ট করবেন। সহজে বোঝার জন্য, এই উদাহরণে মাত্র 3টি উপাদান রয়েছে (লোড জেনারেটর, ক্লায়েন্ট এবং সার্ভার), তবে আপনি এই কোডল্যাবে বর্ণিত একই প্রক্রিয়াটি আরও জটিল এবং বৃহৎ সিস্টেমে প্রয়োগ করতে পারেন।

তোমার যা লাগবে

  • পাইথন ৩ সম্পর্কে জ্ঞান

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

যদি আপনার ইতিমধ্যেই একটি Google অ্যাকাউন্ট (Gmail বা Google Apps) না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google Cloud Platform কনসোলে ( console.cloud.google.com ) সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন।

যদি আপনার ইতিমধ্যেই একটি প্রকল্প থাকে, তাহলে কনসোলের উপরের বাম দিকে প্রকল্প নির্বাচন পুল ডাউন মেনুতে ক্লিক করুন:

15b8b6ac4d917005.png সম্পর্কে

এবং একটি নতুন প্রকল্প তৈরি করতে ফলাফলের ডায়ালগে 'নতুন প্রকল্প' বোতামে ক্লিক করুন:

7136b3ee36ebaf89.png সম্পর্কে

যদি আপনার ইতিমধ্যেই কোন প্রকল্প না থাকে, তাহলে আপনার প্রথমটি তৈরি করার জন্য আপনার এইরকম একটি ডায়ালগ দেখতে হবে:

90977ce514204b51.png সম্পর্কে

পরবর্তী প্রকল্প তৈরির ডায়ালগ আপনাকে আপনার নতুন প্রকল্পের বিশদ বিবরণ প্রবেশ করতে দেয়:

6d9573e346e930b4.png সম্পর্কে

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রোজেক্টের জন্য একটি অনন্য নাম (উপরের নামটি ইতিমধ্যেই নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে পরে এটিকে PROJECT_ID হিসাবে উল্লেখ করা হবে।

এরপর, যদি আপনি ইতিমধ্যেই এটি না করে থাকেন, তাহলে Google ক্লাউড রিসোর্স ব্যবহার করতে এবং ক্লাউড ট্রেস API সক্ষম করতে আপনাকে ডেভেলপার কনসোলে বিলিং সক্ষম করতে হবে।

eb5325f65619ad6a.png সম্পর্কে

এই কোডল্যাবটি চালাতে আপনার কয়েক ডলারের বেশি খরচ হবে না, তবে আপনি যদি আরও বেশি রিসোর্স ব্যবহার করার সিদ্ধান্ত নেন অথবা সেগুলি চালু রেখে দেন তবে এটি আরও বেশি হতে পারে (এই ডকুমেন্টের শেষে "ক্লিনআপ" বিভাগটি দেখুন)। গুগল ক্লাউড ট্রেস, গুগল কুবারনেটস ইঞ্জিন এবং গুগল আর্টিফ্যাক্যাট রেজিস্ট্রির মূল্য অফিসিয়াল ডকুমেন্টেশনে উল্লেখ করা আছে।

গুগল ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 এর বিনামূল্যে ট্রায়ালের জন্য যোগ্য, যার ফলে এই কোডল্যাবটি সম্পূর্ণ বিনামূল্যে হবে।

গুগল ক্লাউড শেল সেটআপ

যদিও গুগল ক্লাউড এবং গুগল ক্লাউড ট্রেস আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আমরা গুগল ক্লাউড শেল ব্যবহার করব, যা ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।

এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে পূর্ণ। এটি একটি স্থায়ী 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এর অর্থ হল এই কোডল্যাবের জন্য আপনার যা প্রয়োজন তা হল একটি ব্রাউজার (হ্যাঁ, এটি একটি Chromebook এ কাজ করে)।

ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন gcLMt5IuEcJJNnMId-Bcz3sxCd0rZn7IzT_r95C8UZeqML68Y1efBG_B0VRp7hc7qiZTLAF-TXD7SsOadxn8uadgHhaLeASnVS3ZHK39eOlKJOgj9SJua_oeGhMxRrbOg3qigddS2A (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগবে)।

ff81d016724c4f67.png সম্পর্কে

অনুসরণ

একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণিত এবং প্রকল্পটি ইতিমধ্যেই আপনার PROJECT_ID এ সেট করা আছে।

gcloud auth list

কমান্ড আউটপুট

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
gcloud config list project

কমান্ড আউটপুট

[core]
project = <PROJECT_ID>

যদি, কোনও কারণে, প্রকল্পটি সেট না করা থাকে, তাহলে কেবল নিম্নলিখিত কমান্ডটি জারি করুন:

gcloud config set project <PROJECT_ID>

আপনার PROJECT_ID খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন অথবা ক্লাউড কনসোল ড্যাশবোর্ডে এটি দেখুন:

a3e716fc9e7454e9.png সম্পর্কে

ক্লাউড শেল ডিফল্টরূপে কিছু পরিবেশ ভেরিয়েবল সেট করে, যা ভবিষ্যতের কমান্ড চালানোর সময় কার্যকর হতে পারে।

echo $GOOGLE_CLOUD_PROJECT

কমান্ড আউটপুট

<PROJECT_ID>

অবশেষে, ডিফল্ট জোন এবং প্রকল্প কনফিগারেশন সেট করুন।

gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন ধরণের অঞ্চল বেছে নিতে পারেন। আরও তথ্যের জন্য, অঞ্চল এবং অঞ্চল দেখুন।

পাইথন সেটআপ

এই কোডল্যাবে, আমরা প্যাকেজ সংস্করণগুলি কঠোরভাবে পরিচালনা করতে "poetry" ব্যবহার করি। ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:

curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 -
source $HOME/.poetry/env

একটি গুগল কুবারনেটস ক্লাস্টার সেটআপ করুন

এই কোডল্যাবে, আপনি গুগল কুবারনেটস ইঞ্জিন (GKE) তে মাইক্রোসার্ভিসের একটি ক্লাস্টার চালাবেন। এই কোডল্যাবের প্রক্রিয়াটি নিম্নরূপ:

  1. ক্লাউড শেলে বেসলাইন প্রকল্পটি ডাউনলোড করুন
  2. কন্টেইনারে মাইক্রোসার্ভিসেস তৈরি করুন
  3. গুগল আর্টিফ্যাক্ট রেজিস্ট্রি (GAR)-এ কন্টেইনার আপলোড করুন
  4. GKE-তে কন্টেইনার স্থাপন করুন
  5. ট্রেস ইন্সট্রুমেন্টেশনের জন্য পরিষেবার সোর্স কোড পরিবর্তন করুন
  6. ধাপ ২ এ যান

কুবেরনেটস ইঞ্জিন সক্ষম করুন

প্রথমে, আমরা একটি Kubernetes ক্লাস্টার সেট আপ করি যেখানে Shakesapp GKE তে চলে, তাই আমাদের GKE সক্রিয় করতে হবে। "Kubernetes Engine" মেনুতে নেভিগেট করুন এবং ENABLE বোতাম টিপুন।

56c680e93e169731.png সম্পর্কে

এখন আপনি একটি Kubernetes ক্লাস্টার তৈরি করতে প্রস্তুত।

কুবেরনেটস ক্লাস্টার তৈরি করুন

ক্লাউড শেলে, একটি Kubernetes ক্লাস্টার তৈরি করতে নিম্নলিখিত কমান্ডটি চালান। অনুগ্রহ করে নিশ্চিত করুন যে জোন মানটি সেই অঞ্চলের অধীনে রয়েছে যা আপনি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরির জন্য ব্যবহার করেছেন। যদি আপনার রিপোজিটরি অঞ্চলটি জোনটি কভার না করে তবে জোন মান us-central1-f পরিবর্তন করুন।

gcloud container clusters create otel-trace-codelab --zone us-central1-f \
--num-nodes 1 \
--machine-type e2-highcpu-4

কমান্ড আউটপুট

Creating cluster otel-trace-codelab in us-central1-f... Cluster is being health-checked (master is healthy)...done.
Created [https://container.googleapis.com/v1/projects/psychic-order-307806/zones/us-central1-f/clusters/otel-trace-codelab].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/us-central1-f/otel-trace-codelab?project=psychic-order-307806
kubeconfig entry generated for otel-trace-codelab.
NAME                LOCATION       MASTER_VERSION    MASTER_IP        MACHINE_TYPE  NODE_VERSION      NUM_NODES  STATUS
otel-trace-codelab  us-central1-f  1.18.12-gke.1210  104.154.162.176  e2-medium     1.18.12-gke.1210  3          RUNNING

আর্টিফ্যাক্ট রেজিস্ট্রি এবং স্ক্যাফোল্ড সেটআপ

এখন আমাদের কাছে একটি Kubernetes ক্লাস্টার স্থাপনের জন্য প্রস্তুত। এরপর আমরা push এবং deploy কন্টেইনারের জন্য একটি কন্টেইনার রেজিস্ট্রি প্রস্তুত করব। এই ধাপগুলির জন্য, আমাদের GAR এবং scaffold সেট আপ করতে হবে যাতে এটি ব্যবহার করা যায়।

আর্টিফ্যাক্ট রেজিস্ট্রি সেটআপ

"আর্টিফ্যাক্ট রেজিস্ট্রি" এর মেনুতে যান এবং ENABLE বোতাম টিপুন।

f7493243bae0cdf7.png সম্পর্কে

কিছুক্ষণ পর, আপনি GAR এর রিপোজিটরি ব্রাউজার দেখতে পাবেন। "REPOSITORY তৈরি করুন" বোতামে ক্লিক করুন এবং রিপোজিটরির নাম লিখুন।

f97f337f5476651.png সম্পর্কে

এই কোডল্যাবে, আমি নতুন রিপোজিটরির নামকরণ করেছি trace-codelab । আর্টিফ্যাক্টের ফর্ম্যাট হল "Docker" এবং অবস্থানের ধরণ হল "Region"। Google Compute Engine ডিফল্ট জোনের জন্য আপনি যে অঞ্চলটি সেট করেছেন তার কাছাকাছি অঞ্চলটি নির্বাচন করুন। উদাহরণস্বরূপ, এই উদাহরণে উপরে "us-central1-f" নির্বাচন করা হয়েছে, তাই এখানে আমরা "us-central1 (Iowa)" নির্বাচন করব। তারপর "CREATE" বোতামে ক্লিক করুন।

2f04143077ca56db.png সম্পর্কে

এখন আপনি রিপোজিটরি ব্রাউজারে "trace-codelab" দেখতে পাবেন।

7a3c1f47346bea15.png সম্পর্কে

আমরা রেজিস্ট্রি পাথ পরীক্ষা করার জন্য পরে এখানে ফিরে আসব।

স্ক্যাফোল্ড সেটআপ

Kubernetes-এ মাইক্রোসার্ভিসেস তৈরির কাজ করার সময় Skaffold একটি কার্যকর টুল। এটি ছোট ছোট কমান্ডের সাহায্যে অ্যাপ্লিকেশনের কন্টেইনার তৈরি, পুশিং এবং স্থাপনের কর্মপ্রবাহ পরিচালনা করে। Skaffold ডিফল্টরূপে Docker Registry কে কন্টেইনার রেজিস্ট্রি হিসেবে ব্যবহার করে, তাই আপনাকে কন্টেইনার পুশ করার সময় GAR চিনতে skaffold কনফিগার করতে হবে।

আবার ক্লাউড শেল খুলুন এবং স্কাফোল্ড ইনস্টল করা আছে কিনা তা নিশ্চিত করুন। (ক্লাউড শেল ডিফল্টরূপে পরিবেশে স্কাফোল্ড ইনস্টল করে।) নিম্নলিখিত কমান্ডটি চালান এবং স্কাফোল্ড সংস্করণটি দেখুন।

skaffold version

কমান্ড আউটপুট

v1.20.0

এখন, আপনি স্কাফোল্ড ব্যবহারের জন্য ডিফল্ট রিপোজিটরিটি নিবন্ধন করতে পারেন। রেজিস্ট্রি পাথ পেতে, আর্টিফ্যাক্ট রেজিস্ট্রি ড্যাশবোর্ডে যান এবং পূর্ববর্তী ধাপে আপনি যে রিপোজিটরিটি সেট আপ করেছেন তার নামে ক্লিক করুন।

55173fe922f40327.png সম্পর্কে

তারপর আপনি পৃষ্ঠার উপরে ব্রেডক্রাম্বসের ট্রেইল দেখতে পাবেন। ক্লিক করুন e157b1359c3edc06.png সম্পর্কে ক্লিপবোর্ডে রেজিস্ট্রি পাথ কপি করার জন্য আইকন।

a9b0fa44c37e0178.png সম্পর্কে

কপি বোতামে ক্লিক করলে, আপনি ব্রাউজারের নীচে একটি ডায়ালগ দেখতে পাবেন যেখানে এই বার্তাটি থাকবে:

"us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab" কপি করা হয়েছে।

ক্লাউড শেলে ফিরে যান। ড্যাশবোর্ড থেকে কপি করা মান দিয়ে skaffold config set default-repo কমান্ডটি চালান।

skaffold config set default-repo us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab

কমান্ড আউটপুট

set value default-repo to us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab for context gke_stackdriver-sandbox-3438851889_us-central1-b_stackdriver-sandbox

এছাড়াও, আপনাকে রেজিস্ট্রিটি ডকার কনফিগারেশনে কনফিগার করতে হবে। নিম্নলিখিত কমান্ডটি চালান:

gcloud auth configure-docker us-central1-docker.pkg.dev --quiet

কমান্ড আউটপুট

{
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud",
    "us-central1-docker.pkg.dev": "gcloud"
  }
}
Adding credentials for: us-central1-docker.pkg.dev

এখন আপনি GKE তে একটি Kubernetes কন্টেইনার সেট আপ করার পরবর্তী ধাপে যেতে পারেন।

সারাংশ

এই ধাপে, আপনি আপনার কোডল্যাব পরিবেশ সেট আপ করবেন:

  • ক্লাউড শেল সেট আপ করুন
  • কন্টেইনার রেজিস্ট্রির জন্য একটি আর্টিফ্যাক্ট রেজিস্টি সংগ্রহস্থল তৈরি করা হয়েছে
  • কন্টেইনার রেজিস্ট্রি ব্যবহার করার জন্য স্কাফোল্ড সেট আপ করুন
  • কোডল্যাব মাইক্রোসার্ভিসেস চালানোর জন্য একটি কুবারনেটস ক্লাস্টার তৈরি করা হয়েছে

পরবর্তী

পরবর্তী ধাপে, আপনি আপনার মাইক্রোসার্ভিসেসগুলি ক্লাস্টারে তৈরি, পুশ এবং স্থাপন করবেন

৩. মাইক্রোসার্ভিসেস তৈরি, পুশ এবং স্থাপন করুন

কোডল্যাব উপাদান ডাউনলোড করুন

পূর্ববর্তী ধাপে, আমরা এই কোডল্যাবের জন্য সমস্ত পূর্বশর্ত সেট আপ করেছি। এখন আপনি তাদের উপরে সম্পূর্ণ মাইক্রোসার্ভিসেস চালানোর জন্য প্রস্তুত। কোডল্যাব উপাদানটি GitHub-এ হোস্ট করা আছে, তাই নিম্নলিখিত git কমান্ড ব্যবহার করে ক্লাউড শেল পরিবেশে ডাউনলোড করুন।

cd ~
git clone https://github.com/GoogleCloudPlatform/opentelemetry-trace-codelab-python.git

প্রকল্পের ডিরেক্টরি কাঠামো নিম্নরূপ:

shakesapp-python
├── LICENSE
├── manifests
│   ├── client.yaml
│   ├── loadgen.yaml
│   └── server.yaml
├── proto
│   └── shakesapp.proto
├── skaffold.yaml
└── src
    ├── client
    ├── loadgen
    └── server
  • ম্যানিফেস্ট: কুবারনেটস ম্যানিফেস্ট ফাইল
  • প্রোটো: ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের জন্য প্রোটো সংজ্ঞা
  • src: প্রতিটি অনুসন্ধানের সোর্স কোডের ডিরেক্টরি
  • skaffold.yaml: skaffold এর জন্য কনফিগারেশন ফাইল

স্কাফোল্ড কমান্ড চালান

অবশেষে আপনি আপনার তৈরি করা Kubernetes ক্লাস্টারে সম্পূর্ণ কন্টেন্ট তৈরি, পুশ এবং স্থাপন করতে প্রস্তুত। এটিতে একাধিক ধাপ রয়েছে বলে মনে হচ্ছে কিন্তু আসল কথা হল skaffold আপনার জন্য সবকিছু করে। আসুন নিম্নলিখিত কমান্ড দিয়ে এটি চেষ্টা করি:

cd shakesapp-python
skaffold run --tail

কমান্ডটি চালানোর সাথে সাথে, আপনি docker build লগ আউটপুট দেখতে পাবেন এবং নিশ্চিত করতে পারবেন যে সেগুলি সফলভাবে রেজিস্ট্রিতে পুশ করা হয়েছে।

কমান্ড আউটপুট

...
---> Running in c39b3ea8692b
 ---> 90932a583ab6
Successfully built 90932a583ab6
Successfully tagged us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab/serverservice:step1
The push refers to repository [us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab/serverservice]
cc8f5a05df4a: Preparing
5bf719419ee2: Preparing
2901929ad341: Preparing
88d9943798ba: Preparing
b0fdf826a39a: Preparing
3c9c1e0b1647: Preparing
f3427ce9393d: Preparing
14a1ca976738: Preparing
f3427ce9393d: Waiting
14a1ca976738: Waiting
3c9c1e0b1647: Waiting
b0fdf826a39a: Layer already exists
88d9943798ba: Layer already exists
f3427ce9393d: Layer already exists
3c9c1e0b1647: Layer already exists
14a1ca976738: Layer already exists
2901929ad341: Pushed
5bf719419ee2: Pushed
cc8f5a05df4a: Pushed
step1: digest: sha256:8acdbe3a453001f120fb22c11c4f6d64c2451347732f4f271d746c2e4d193bbe size: 2001

সমস্ত পরিষেবা কন্টেইনার পুশ করার পরে, কুবারনেটস স্থাপনা স্বয়ংক্রিয়ভাবে শুরু হয়।

কমান্ড আউটপুট

sha256:b71fce0a96cea08075dc20758ae561cf78c83ff656b04d211ffa00cedb77edf8 size: 1997
Tags used in deployment:
 - serverservice -> us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab/serverservice:step4@sha256:8acdbe3a453001f120fb22c11c4f6d64c2451347732f4f271d746c2e4d193bbe
 - clientservice -> us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab/clientservice:step4@sha256:b71fce0a96cea08075dc20758ae561cf78c83ff656b04d211ffa00cedb77edf8
 - loadgen -> us-central1-docker.pkg.dev/psychic-order-307806/trace-codelab/loadgen:step4@sha256:eea2e5bc8463ecf886f958a86906cab896e9e2e380a0eb143deaeaca40f7888a
Starting deploy...
 - deployment.apps/clientservice created
 - service/clientservice created
 - deployment.apps/loadgen created
 - deployment.apps/serverservice created
 - service/serverservice created

সাবধানতা : যদি আপনি "No push access to specified image repository" এর মতো ত্রুটি পান, তাহলে skaffold কমান্ডটি skaffold-এ ডিফল্ট রেপোতে আপনার কনফিগারেশন নির্বিশেষে ছবিগুলিকে Docker Hub (docker.io) এ পুশ করার চেষ্টা করছে কিনা তা পরীক্ষা করুন। সেক্ষেত্রে, নীচের মত "skaffold run"-এ "–default-repo" বিকল্পটি যোগ করার চেষ্টা করুন।

$ স্কাফোল্ড রান –tail –default-repo=us-central1-docker.pkg.dev/[প্রকল্প আইডি]/[সংগ্রহস্থলের নাম]

স্থাপনার পরে, আপনি প্রতিটি কন্টেইনারে stdout-এ নির্গত প্রকৃত অ্যাপ্লিকেশন লগগুলি এইভাবে দেখতে পাবেন:

কমান্ড আউটপুট

[server] {"event": "starting server: 0.0.0.0:5050", "severity": "info", "timestamp": "2021-03-17T05:25:56.758575Z"}
[client] [2021-03-17 05:25:54 +0000] [1] [INFO] Starting gunicorn 20.0.4
[client] [2021-03-17 05:25:54 +0000] [1] [INFO] Listening at: http://0.0.0.0:8080 (1)
[client] [2021-03-17 05:25:54 +0000] [1] [INFO] Using worker: threads
[client] [2021-03-17 05:25:54 +0000] [7] [INFO] Booting worker with pid: 7
[client] {"event": "server address is serverservice:5050", "severity": "info", "timestamp": "2021-03-17T05:25:54.888627Z"}
[client] {"event": "request to server with query: world", "severity": "info", "timestamp": "2021-03-17T05:26:11.550923Z"}
[server] {"event": "query: world", "severity": "info", "timestamp": "2021-03-17T05:26:11.567048Z"}
[loadgen] {"event": "check connectivity: http://clientservice:8080/_healthz", "severity": "info", "timestamp": "2021-03-17T05:26:11.533605Z"}
[loadgen] {"event": "/_healthz response: ok", "severity": "info", "timestamp": "2021-03-17T05:26:11.544267Z"}
[loadgen] {"event": "confirmed connection ot clientservice", "severity": "info", "timestamp": "2021-03-17T05:26:11.544527Z"}

অবশেষে আপনি পরিষেবাগুলির বিতরণকৃত ট্রেসিংয়ের জন্য OpenTelemetry দিয়ে আপনার অ্যাপ্লিকেশনটি ইন্সট্রুমেন্ট করা শুরু করতে প্রস্তুত।

সারাংশ

এই ধাপে, আপনি আপনার পরিবেশে কোডল্যাব উপাদান প্রস্তুত করেছেন এবং স্কাফোল্ডটি প্রত্যাশা অনুযায়ী চলছে কিনা তা নিশ্চিত করেছেন।

পরবর্তী

পরবর্তী ধাপে, আপনি ট্রেস তথ্য সরবরাহ করার জন্য লোডজেন পরিষেবার সোর্স কোড পরিবর্তন করবেন।

৪. HTTP-র জন্য যন্ত্রানুষঙ্গ

ট্রেস ইন্সট্রুমেন্টেশন এবং প্রচারের ধারণা

সোর্স কোড সম্পাদনা করার আগে, আমি একটি সহজ ডায়াগ্রামে কীভাবে বিতরণকৃত ট্রেস কাজ করে তা সংক্ষেপে ব্যাখ্যা করি।

c8c659deaa9c9091.png সম্পর্কে

এই উদাহরণে, আমরা ক্লাউড ট্রেসে ট্রেস এবং স্প্যান তথ্য রপ্তানি করার জন্য কোডটি ব্যবহার করি এবং লোডজেন পরিষেবা থেকে সার্ভার পরিষেবাতে অনুরোধ জুড়ে ট্রেস প্রসঙ্গ প্রচার করি।

একই ট্রেস আইডি আছে এমন সমস্ত স্প্যানকে একটি ট্রেসে একত্রিত করার জন্য অ্যাপ্লিকেশনটিকে ট্রেস আইডি এবং স্প্যান আইডির মতো ট্রেস মেটাডেটা পাঠাতে হবে। এছাড়াও, অ্যাপ্লিকেশনটিকে ডাউনস্ট্রিম পরিষেবার অনুরোধ করার সময় ট্রেস কনটেক্সট (প্যারেন্ট স্প্যানের ট্রেস আইডি এবং স্প্যান আইডির সংমিশ্রণ) প্রচার করতে হবে, যাতে তারা কোন ট্রেস কনটেক্সট পরিচালনা করছে তা জানতে পারে।

ওপেনটেলিমেট্রি আপনাকে সাহায্য করে:

  • অনন্য ট্রেস আইডি এবং স্প্যান আইডি তৈরি করতে
  • ব্যাকএন্ডে ট্রেস আইডি এবং স্প্যান আইডি এক্সপোর্ট করতে
  • অন্যান্য পরিষেবাগুলিতে ট্রেস প্রসঙ্গ প্রচার করতে

যন্ত্রের প্রথম স্প্যান

যন্ত্র লোড জেনারেটর পরিষেবা

বোতাম টিপে ক্লাউড শেল এডিটর খুলুন 776a11bfb2122549.png সম্পর্কে ক্লাউড শেলের উপরের ডানদিকে। বাম দিকের এক্সপ্লোরার থেকে src/loadgen/loadgen.py খুলুন এবং main ফাংশনটি খুঁজুন।

src/লোডজেন/লোডজেন.পি

def main():
    ...
    # start request loop to client service
    logger.info("start client request loop")
    addr = f"http://{target}"
    while True:
        logger.info("start request to client")
        call_client(addr)
        logger.info("end request to client")
        time.sleep(2.0)

main ফাংশনে, আপনি লুপটি দেখতে পাবেন যেখানে ফাংশন call_client কল করা হচ্ছে। বর্তমান বাস্তবায়নে, sectoin-এ 2টি লগ লাইন রয়েছে যা ফাংশন কলের শুরু এবং শেষ রেকর্ড করে। এখন ফাংশন কলের ল্যাটেন্সি ট্র্যাক করার জন্য Span তথ্য ব্যবহার করা যাক।

প্রথমে, আপনাকে একটি অনন্য ট্রেস আইডি এবং স্প্যান আইডি সহ একটি স্প্যান তৈরি করতে হবে। OpenTelemetry এর জন্য সহজ লাইব্রেরি প্রদান করে। আপনার কোডে OpenTelemetry লাইব্রেরি আমদানি করতে নিম্নলিখিত লাইনগুলি যোগ করুন।

 import structlog
+from opentelemetry import propagate, trace
+from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
+from opentelemetry.sdk.trace import TracerProvider
+from opentelemetry.instrumentation.requests import RequestsInstrumentor
+from opentelemetry.sdk.trace.export import SimpleSpanProcessor
+from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator

যেহেতু লোড জেনারেটরটি requests মডিউলের মাধ্যমে HTTP-তে ক্লায়েন্ট অ্যাপ্লিকেশন কল করছে, তাই আমরা requests জন্য এক্সটেনশন প্যাকেজ ব্যবহার করি এবং ইন্সট্রুমেন্টেশন সক্ষম করি।

 from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
+
+RequestsInstrumentor().instrument()

তারপর ট্রেসার ইনস্ট্যান্স সেট আপ করুন যা ট্রেস কন্টেনেক্সট এবং এক্সপোর্টার সেটিংস পরিচালনা করে

     target = os.environ.get("CLIENT_ADDR", "0.0.0.0:8080")

+    exporter = CloudTraceSpanExporter()
+    trace.get_tracer_provider().add_span_processor(SimpleSpanProcessor(exporter))
+    tracer = trace.get_tracer(__name__)
+    propagate.set_global_textmap(CloudTraceFormatPropagator())
+    trace.set_tracer_provider(TracerProvider())
+
     # connectivity check to client service
     healthz = f"http://{target}/_healthz"
     logger.info(f"check connectivity: {healthz}")

মনে রাখবেন যে এটি একটি কোডল্যাব যা ট্রেস ইন্সট্রুমেন্টেশন কীভাবে কাজ করে তা বোঝার জন্য, আমরা প্রতিটি অনুরোধ রেকর্ড করার জন্য এবং ব্যাকএন্ডে পাঠানোর জন্য ট্রেসার কনফিগার করি। ( SimpleSpanProcessor() ) এটি প্রোডাকশন পরিবেশের জন্য উপযুক্ত নয়, তাই আপনার প্রোডাকশন অ্যাপ্লিকেশনটি ইন্সট্রুমেন্ট করার সময় এই অংশটি পরিবর্তন করতে ভুলবেন না।

এখন আপনি ট্রেসার দিয়ে স্প্যান ইন্সট্রুমেন্ট করতে পারেন। এখানে মূল কথা হল আপনাকে যা করতে হবে তা হল স্পষ্টভাবে একটি স্প্যান তৈরি করা, এবং এটিই! যদিও দুটি লাইন স্প্যানে ইভেন্ট মেটাডেটা যোগ করে, আপনাকে অনন্য ট্রেস আইডি এবং স্প্যান আইডি ম্যানুয়ালি তৈরি করে স্প্যানে এম্বেড করার প্রয়োজন নেই।

     logger.info("start client request loop")
     addr = f"http://{target}"
     while True:
-        logger.info("start request to client")
-        call_client(addr)
-        logger.info("end request to client")
+        with tracer.start_as_current_span("loadgen") as root_span:
+            root_span.add_event(name="request_start")
+            logger.info("start request to client")
+            call_client(addr)
+            root_span.add_event(name="request_end")
+            logger.info("end request to client")
         time.sleep(2.0)

ডকার বিল্ড যাতে প্রয়োজনীয় OpenTelemetry প্যাকেজগুলি আনতে পারে, তার জন্য নিম্নলিখিত কমান্ডটি চালান:

poetry add "opentelemetry-exporter-gcp-trace=^1.0.0rc0"
poetry add "opentelemetry-propagator-gcp=^1.0.0rc0"
poetry add "opentelemetry-instrumentation-requests=^0.20b0"

আপনি নিশ্চিত করতে পারেন যে সংশ্লিষ্ট নির্ভরতা বর্ণনা pyproject.toml এ লেখা আছে।

যন্ত্র ক্লায়েন্ট পরিষেবা

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

ae074d4513c9931f.png সম্পর্কে

ক্লাউড শেল এডিটর খুলুন এবং লোড জেনারেটর পরিষেবার মতো প্রয়োজনীয় মডিউল যোগ করুন।

src/client/client.py সম্পর্কে

 import flask
 import grpc
 import structlog
+from opentelemetry import propagate, trace
+from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
+from opentelemetry.instrumentation.flask import FlaskInstrumentor
+from opentelemetry.sdk.trace import TracerProvider
+from opentelemetry.sdk.trace.export import SimpleSpanProcessor
+from opentelemetry.propagators.cloud_trace_propagator import \
+    CloudTraceFormatPropagator

 import shakesapp_pb2
 import shakesapp_pb2_grpc

আপনি লক্ষ্য করেছেন যে আপনি FlaskInstrumentor আমদানি করেছেন যা ব্যবহারকারীদের পক্ষ থেকে Flask অ্যাপ্লিকেশনের জন্য স্বয়ংক্রিয় যন্ত্রানুষঙ্গীকরণ সক্ষম করে যাতে তারা HTTP হেডারগুলি এক্সট্র্যাক্ট করে একটি একক লাইন কোডের মাধ্যমে ট্রেস কনটেক্সট পেতে পারে। OpenTelemetry সম্প্রদায় অন্যান্য প্রধান লাইব্রেরির সাথে একই রকম কার্যকর ইন্টিগ্রেশন প্রদান করে। আরও তথ্যের জন্য, আপনি অফিসিয়াল ডকুমেন্টেশন দেখতে পারেন।

 app = flask.Flask(__name__)
+FlaskInstrumentor().instrument_app(app)

ইন্সট্রুমেন্টেশন শুরু করার আগে, আবারও, আপনাকে লোড জেনারেটর পরিষেবার মতো ট্রেসার ইন্সট্যান্স প্রস্তুত করতে হবে।

 logger.info(f"server address is {SERVER_ADDR}")

+exporter = CloudTraceSpanExporter()
+trace.get_tracer_provider().add_span_processor(SimpleSpanProcessor(exporter))
+propagate.set_global_textmap(CloudTraceFormatPropagator())
+trace.set_tracer_provider(TracerProvider())

 @app.route("/")
 def main_handler():
    ....

এখন এটি হ্যান্ডলারে ইন্সট্রুমেন্টেশন যোগ করার জন্য প্রস্তুত। main_handler() খুঁজুন এবং সার্ভার সার্ভিসে gRPC রিকোয়েস্ট থ্রো করার অংশটি পরিবর্তন করুন।

@app.route("/")
def main_handler():
    q, count = random.choice(list(queries.items()))

    # get Tracer
    tracer = trace.get_tracer(__name__)

    with tracer.start_as_current_span("client") as cur_span:
        channel = grpc.insecure_channel(SERVER_ADDR)
        stub = shakesapp_pb2_grpc.ShakespeareServiceStub(channel)
        logger.info(f"request to server with query: {q}")
        cur_span.add_event("server_call_start")
        resp = stub.GetMatchCount(shakesapp_pb2.ShakespeareRequest(query=q))
        cur_span.add_event("server_call_end")
        if count != resp.match_count:
            raise UnexpectedResultError(
                f"The expected count for '{q}' was {count}, but result was {resp.match_count } obtained"
            )
        result = str(resp.match_count)
        logger.info(f"matched count for '{q}' is {result}")
    return result

একইভাবে জেনারেটর পরিষেবা লোড করার জন্য, নিম্নলিখিত কমান্ডের সাহায্যে pyproject.toml এ প্রয়োজনীয় প্যাকেজ যোগ করুন।

poetry add "opentelemetry-exporter-gcp-trace=^1.0.0rc0"
poetry add "opentelemetry-propagator-gcp=^1.0.0rc0"
poetry add "opentelemetry-instrumentation-flask=^0.20b0"

তারপর skaffold run কমান্ড দিয়ে অ্যাপ্লিকেশনটি চালু করার চেষ্টা করুন এবং দেখুন ক্লাউড ট্রেস ড্যাশবোর্ড কী দেখায়:

skaffold run --tail

কিছু বিল্ড, পুশ এবং ডিপ্লয় বার্তা দেখার পর, আপনি JSON ফর্ম্যাটে অ্যাপ্লিকেশন লগ দেখতে পাবেন। আপনি ট্রেস তথ্য পেয়েছেন কিনা তা পরীক্ষা করতে ক্লাউড ট্রেস > ট্রেস তালিকাতে যান। যেহেতু লোড জেনারেটর পরিষেবা পর্যায়ক্রমে ক্লায়েন্ট পরিষেবাতে অনুরোধ পাঠায় এবং আপনি সমস্ত অনুরোধের জন্য ট্রেস সক্ষম করেছেন, আপনি ট্রেস তালিকায় অনেকগুলি বিন্দু দেখতে শুরু করেন।

f7440360551980e.png সম্পর্কে

এর মধ্যে যেকোনো একটিতে ক্লিক করলে, আপনি নীচের মত একটি জলপ্রপাত গ্রাফ দেখতে পাবেন যা অনুরোধ এবং প্রতিক্রিয়া প্রক্রিয়ার সময় প্রতিটি অংশের লেটেন্সি ব্যাখ্যা করে। "Show Events" এর পাশে থাকা চেকবক্সটি খুঁজুন, তারপর আপনি জলপ্রপাত গ্রাফের ভিতরে টীকাগুলি পাবেন। এই টীকাগুলি হল span.add_event() পদ্ধতি দ্বারা কোডে আপনি যেগুলি ব্যবহার করেছেন।

67596a4a313738.png সম্পর্কে

আপনি হয়তো লক্ষ্য করবেন যে আপনি সার্ভার সার্ভিস থেকে স্প্যান দেখতে পাচ্ছেন না। এটা ঠিক কারণ আমরা সার্ভার সার্ভিসে স্প্যানগুলিকে মোটেও ইন্সট্রুমেন্ট করিনি।

সারাংশ

এই ধাপে, আপনি লোড জেনারেটর পরিষেবা এবং ক্লায়েন্ট পরিষেবাকে ইন্সট্রুমেন্ট করেছেন এবং নিশ্চিত করেছেন যে আপনি সফলভাবে পরিষেবাগুলিতে ট্রেস কনটেক্সট প্রচার করতে পারেন এবং উভয় পরিষেবা থেকে স্প্যান তথ্য ক্লাউড ট্রেসে রপ্তানি করতে পারেন।

পরবর্তী

পরবর্তী ধাপে, আপনি gRPC এর মাধ্যমে ট্রেস কনটেক্সট কীভাবে প্রচার করবেন তা নিশ্চিত করার জন্য ক্লায়েন্ট পরিষেবা এবং সার্ভার পরিষেবা ব্যবহার করবেন।

৫. জিআরপিসির জন্য যন্ত্রানুষঙ্গ

পূর্ববর্তী ধাপে, আমরা এই মাইক্রোসার্ভিসেসের অনুরোধের প্রথমার্ধটি ইন্সট্রুমেন্ট করেছি। এই ধাপে, আমরা ক্লায়েন্ট পরিষেবা এবং সার্ভার পরিষেবার মধ্যে gRPC যোগাযোগকে ইন্সট্রুমেন্ট করার চেষ্টা করি। (নীচের ছবিতে সবুজ এবং বেগুনি আয়তক্ষেত্র)

c4dec3e741c3ab4f.png সম্পর্কে

জিআরপিসি ক্লায়েন্টের জন্য স্বয়ংক্রিয় যন্ত্রানুষঙ্গ

OpenTelemetry এর ইকোসিস্টেম অনেক সুবিধাজনক লাইব্রেরি অফার করে যা ডেভেলপারদের অ্যাপ্লিকেশন ইন্সট্রুমেন্ট করতে সাহায্য করে। আগের ধাপে, আমরা "requests" মডিউলের জন্য স্বয়ংক্রিয় ইন্সট্রুমেন্টেশন ব্যবহার করেছি। এই ধাপে, যেহেতু আমরা gRPC এর মাধ্যমে ট্রেস কনটেক্সট প্রচার করার চেষ্টা করছি, তাই আমরা এর জন্য লাইব্রেরি ব্যবহার করছি।

src/client/client.py সম্পর্কে

 import flask
 import grpc
 import structlog
 from opentelemetry import propagate, trace
 from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
 from opentelemetry.instrumentation.flask import FlaskInstrumentor
+from opentelemetry.instrumentation.grpc import GrpcInstrumentorClient
 from opentelemetry.sdk.trace import TracerProvider
 from opentelemetry.sdk.trace.export import SimpleSpanProcessor
 from opentelemetry.propagators.cloud_trace_propagator import \
     CloudTraceFormatPropagator
 import shakesapp_pb2
 import shakesapp_pb2_grpc


 app = flask.Flask(__name__)
 FlaskInstrumentor().instrument_app(app)
+GrpcInstrumentorClient().instrument()

ক্লায়েন্ট সার্ভিসের জন্য, ইন্সট্রুমেন্টেশনের জন্য আমাদের যা করতে হবে তা বেশ ছোট। আমরা যা করতে চাই তা হল ট্রেস কনটেক্সট প্রচার করা, যা বর্তমান স্প্যানের ট্রেস আইডি এবং স্প্যান আইডির সংমিশ্রণ gRPC এর মাধ্যমে। তাই আমরা GrpcInstrumentatorClient.instrument() কল করি যাতে হ্যান্ডার ফাংশনে থাকা gRPC ক্লায়েন্ট নীচের HTTP হেডারে ট্রেস কনটেক্সট এম্বেড করতে পারে।

poetry add কমান্ডের সাহায্যে pyproject.toml এ নতুন নির্ভরতা যোগ করতে ভুলবেন না:

poetry add "opentelemetry-instrumentation-grpc=^0.20b0"

জিআরপিসি সার্ভারের জন্য স্বয়ংক্রিয় যন্ত্রানুষঙ্গ

gRPC ক্লায়েন্টের জন্য আমরা যা করেছি, ঠিক তেমনই আমরা gRPC সার্ভারের জন্য স্বয়ংক্রিয় যন্ত্রানুষঙ্গকরণ বলি। নিম্নলিখিতগুলির মতো আমদানি যোগ করুন এবং ফাইলের উপরে GrpcInstrumentationServer().instrument() কল করুন।

সতর্কতা : অবশ্যই ফোন করুন

GrpcInstrumentationServe() 

এই ধাপে, না

GrpcInstrumentationClient()

.

src/সার্ভার/সার্ভার.পি

 import grpc
 import structlog
 from google.cloud import storage
 from grpc_health.v1 import health_pb2, health_pb2_grpc
+from opentelemetry import propagate, trace
+from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
+from opentelemetry.instrumentation.grpc import GrpcInstrumentorServer
+from opentelemetry.sdk.trace import TracerProvider
+from opentelemetry.sdk.trace.export import SimpleSpanProcessor
+from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator

 import shakesapp_pb2
 import shakesapp_pb2_grpc


 BUCKET_NAME = "dataflow-samples"
 BUCKET_PREFIX = "shakespeare/"

+# enable auto gRPC server trace instrumentation
+GrpcInstrumentorServer().instrument()
+

এবং এরপর, আপনি ক্লাউড ট্রেস ব্যাকএন্ডে ট্রেস তথ্য পাঠানোর জন্য এক্সপোর্টার যোগ করবেন। serve() ফাংশনে নিম্নলিখিত কোডটি যোগ করুন।

def serve():
+    # start trace exporter
+    trace.set_tracer_provider(TracerProvider())
+    trace.get_tracer_provider().add_span_processor(
+        SimpleSpanProcessor(CloudTraceSpanExporter())
+    )
+    propagators.set_global_textmap(CloudTraceFormatPropagator())
+
+    # add gRPC services to server
     server = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
     service = ShakesappService()
     shakesapp_pb2_grpc.add_ShakespeareServiceServicer_to_server(service, server)
     health_pb2_grpc.add_HealthServicer_to_server(service, server)

সার্ভার পরিষেবাতে নতুন যোগ করা প্যাকেজগুলি যোগ করতে ভুলবেন না।

poetry add "opentelemetry-exporter-gcp-trace=^1.0.0rc0"
poetry add "opentelemetry-instrumentation-grpc=^0.20b0"
poetry add "opentelemetry-propagator-gcp=^1.0.0rc0"
poetry add "opentelemetry-instrumentation=^0.20b0"

মাইক্রোসার্ভিস চালান এবং ট্রেস নিশ্চিত করুন।

তারপর skaffold কমান্ড দিয়ে আপনার পরিবর্তিত কোডটি চালান।

skaffold run --tail

এখন আবার, আপনি ক্লাউড ট্রেসের ট্রেস তালিকা পৃষ্ঠায় একগুচ্ছ ট্রেস দেখতে পাবেন। ট্রেসগুলির একটিতে ক্লিক করুন এবং এখন আপনি দেখতে পাবেন যে এটি লোড জেনারেটর পরিষেবা থেকে সার্ভার পরিষেবা পর্যন্ত অনুরোধ জুড়ে বিস্তৃত।

141cb620245b689d.png সম্পর্কে

সারাংশ

এই ধাপে, আপনি OpenTelemetry ইকোসিস্টেম লাইব্রেরির সহায়তায় gRPC ভিত্তিক যোগাযোগের সরঞ্জাম ব্যবহার করেছেন। এছাড়াও, আপনি নিশ্চিত করেছেন যে লোড জেনারেটর পরিষেবায় উৎপন্ন ট্রেস কনটেক্সট সফলভাবে সার্ভার পরিষেবাতে সরবরাহ করা হয়েছে।

৬. অভিনন্দন

আপনি OpenTelemery ব্যবহার করে সফলভাবে বিতরণকৃত ট্রেস তৈরি করেছেন এবং Google Cloud Trace-এর মাইক্রোসার্ভিস জুড়ে অনুরোধের বিলম্ব নিশ্চিত করেছেন।

দীর্ঘ অনুশীলনের জন্য, আপনি নিম্নলিখিত বিষয়গুলি নিজে চেষ্টা করে দেখতে পারেন।

  • বর্তমান বাস্তবায়ন স্বাস্থ্য পরীক্ষার মাধ্যমে তৈরি সমস্ত স্প্যান পাঠায়। ক্লাউড ট্রেস থেকে আপনি কীভাবে সেই স্প্যানগুলি ফিল্টার করবেন? ইঙ্গিত এখানে
  • ইভেন্ট লগগুলিকে স্প্যানের সাথে সম্পর্কযুক্ত করুন এবং দেখুন এটি গুগল ক্লাউড ট্রেস এবং গুগল ক্লাউড লগিং-এ কীভাবে কাজ করে। ইঙ্গিত এখানে
  • কিছু পরিষেবা অন্য ভাষার সাথে প্রতিস্থাপন করুন এবং সেই ভাষার জন্য OpenTelemetry দিয়ে এটি ব্যবহার করে দেখুন।

সতর্কতা : গুগল কুবারনেটস ইঞ্জিন এবং গুগল আর্টিফ্যাক্ট রেজিস্ট্রি ক্রমাগত রিসোর্স ব্যবহার করে।

পরিষ্কার করা

এই কোডল্যাবের পরে, দয়া করে Kubernetes ক্লাস্টারটি বন্ধ করুন এবং প্রকল্পটি মুছে ফেলতে ভুলবেন না যাতে আপনি Google Kubernetes Engine, Google Cloud Trace, Google Artifact Registry-এ অপ্রত্যাশিত চার্জ না পান।

প্রথমে, নিম্নলিখিত কমান্ডটি ব্যবহার করে ক্লাস্টারটি মুছে ফেলুন:

skaffold delete

কমান্ড আউটপুট

Cleaning up...
 - deployment.apps "clientservice" deleted
 - service "clientservice" deleted
 - deployment.apps "loadgen" deleted
 - deployment.apps "serverservice" deleted
 - service "serverservice" deleted

ক্লাস্টারটি মুছে ফেলার পর, মেনু প্যান থেকে, "IAM & Admin" > "Settings" নির্বাচন করুন, এবং তারপর "SHUT DOWN" বোতামে ক্লিক করুন।

578ca2b72a161e9d.png সম্পর্কে

তারপর ডায়ালগের ফর্মে প্রজেক্ট আইডি (প্রজেক্টের নাম নয়) লিখুন এবং শাটডাউন নিশ্চিত করুন।