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

1. ভূমিকা

5af4a7e43b0feaab.png

শেষ আপডেট: 2021-03-05

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

পর্যবেক্ষণযোগ্যতা এবং OpenTelemetry

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

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

বিতরণ ট্রেস

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

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

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

adbd3ecd69d410cb.png

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

আপনি কি নির্মাণ করবেন

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

68873c018a7be7de.png

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

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

আপনি কি শিখবেন

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

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

আপনি কি প্রয়োজন হবে

  • পাইথনের জ্ঞান 3

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

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

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

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

15b8b6ac4d917005.png

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

7136b3ee36ebaf89.png

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

90977ce514204b51.png

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

6d9573e346e930b4.png

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

পরবর্তী, যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে Google ক্লাউড সংস্থানগুলি ব্যবহার করতে এবং ক্লাউড ট্রেস API সক্ষম করার জন্য আপনাকে বিকাশকারী কনসোলে বিলিং সক্ষম করতে হবে৷

eb5325f65619ad6a.png

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

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

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

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

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

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

ff81d016724c4f67.png

fbe156ee6edfbb2e.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

আপনি বিভিন্ন জোন বিভিন্ন চয়ন করতে পারেন. আরও তথ্যের জন্য, অঞ্চল এবং অঞ্চল দেখুন।

পাইথন সেটআপ

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

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

একটি Google Kubernetes ক্লাস্টার সেটআপ করুন

এই কোডল্যাবে, আপনি Google Kubernetes Engine (GKE) এ মাইক্রোসার্ভিসের একটি ক্লাস্টার চালাবেন। এই কোডল্যাবের প্রক্রিয়াটি নিম্নরূপ:

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

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

প্রথমে, আমরা একটি Kubernetes ক্লাস্টার সেট আপ করি যেখানে শেক্সঅ্যাপ 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 ক্লাস্টার স্থাপনের জন্য প্রস্তুত আছে। এরপরে আমরা কন্টেইনার পুশ এবং স্থাপনের জন্য একটি কন্টেইনার রেজিস্ট্রির জন্য প্রস্তুত করি। এই ধাপগুলির জন্য, আমাদের এটি ব্যবহার করার জন্য GAR এবং স্ক্যাফোল্ড সেট আপ করতে হবে।

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

"আর্টিফ্যাক্ট রেজিস্ট্রি" এর মেনুতে নেভিগেট করুন এবং সক্ষম বোতাম টিপুন৷

f7493243bae0cdf7.png

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

f97f337f5476651.png

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

2f04143077ca56db.png

এখন আপনি সংগ্রহস্থল ব্রাউজারে "ট্রেস-কোডল্যাব" দেখতে পাচ্ছেন।

7a3c1f47346bea15.png

আমরা রেজিস্ট্রি পথ চেক করতে পরে এখানে ফিরে আসব.

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

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

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

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 কন্টেইনার সেট আপ করার জন্য পরবর্তী ধাপে যেতে পারেন।

সারাংশ

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

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

পরবর্তী আপ

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

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

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

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

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 ক্লাস্টারে সম্পূর্ণ বিষয়বস্তু তৈরি, পুশ এবং স্থাপন করতে প্রস্তুত। এটি একাধিক পদক্ষেপ ধারণকারী শব্দ কিন্তু প্রকৃত স্ক্যাফোল্ড আপনার জন্য সবকিছু করে। আসুন নিম্নলিখিত কমান্ড দিয়ে এটি চেষ্টা করুন:

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

সতর্কতা : যদি আপনি "নির্দিষ্ট চিত্র সংগ্রহস্থলে কোনো পুশ অ্যাক্সেস না" এর মতো ত্রুটি পান তবে স্ক্যাফোল্ড কমান্ড স্ক্যাফোল্ডে ডিফল্ট রেপোতে আপনার কনফিগারেশন নির্বিশেষে ডকার হাবে (docker.io) ছবিগুলি পুশ করার চেষ্টা করছে কিনা তা পরীক্ষা করে দেখুন। সেই ক্ষেত্রে, নীচের মত "স্ক্যাফোল্ড রান"-এ "–default-repo" বিকল্প যোগ করার চেষ্টা করুন।

$ skaffold রান -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-এর সাথে আপনার অ্যাপ্লিকেশনটি ইনস্ট্রুমেন্ট করা শুরু করতে প্রস্তুত।

সারাংশ

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

পরবর্তী আপ

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

4. HTTP এর জন্য ইন্সট্রুমেন্টেশন

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

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

c8c659deaa9c9091.png

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

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

OpenTelemetry আপনাকে সাহায্য করে:

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

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

ইন্সট্রুমেন্ট লোড জেনারেটর পরিষেবা

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

src/loadgen/loadgen.py

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 ফাংশনটিকে কল করছে। বর্তমান বাস্তবায়নে, সেক্টোইনে 2টি লগ লাইন রয়েছে যা ফাংশন কলের শুরু এবং শেষ রেকর্ড করে। এখন ফাংশন কলের লেটেন্সি ট্র্যাক করার জন্য স্প্যান তথ্য ইনস্ট্রুমেন্ট করা যাক।

প্রথমে, আপনাকে একটি অনন্য ট্রেস আইডি এবং স্প্যান আইডি সহ একটি স্প্যান তৈরি করতে হবে৷ 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 এ লেখা আছে।

উপকরণ ক্লায়েন্ট সেবা

পূর্ববর্তী বিভাগে, আমরা নীচের অঙ্কনে লাল আয়তক্ষেত্রে আবদ্ধ অংশটিকে ইনস্ট্রুমেন্ট করেছি। আমরা লোড জেনারেটর পরিষেবার মধ্যে স্প্যান তথ্য instrumented. একইভাবে লোড জেনারেটর পরিষেবার মতো, এখন আমাদের ক্লায়েন্ট পরিষেবার উপকরণ তৈরি করতে হবে। লোড জেনারেটর পরিষেবা থেকে পার্থক্য হল যে ক্লায়েন্ট পরিষেবাকে 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 আমদানি করেছেন যা ব্যবহারকারীদের পক্ষ থেকে ফ্লাস্ক অ্যাপ্লিকেশনের জন্য স্বয়ংক্রিয় যন্ত্রকে সক্ষম করে 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

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

67596a4a313738.png

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

সারাংশ

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

পরবর্তী আপ

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

5. gRPC-এর জন্য ইন্সট্রুমেন্টেশন

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

c4dec3e741c3ab4f.png

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

OpenTelemetry এর ইকোসিস্টেম অনেক সহজ লাইব্রেরি অফার করে যা ডেভেলপারদেরকে উপকরণ অ্যাপ্লিকেশনে সাহায্য করে। পূর্ববর্তী ধাপে, আমরা "অনুরোধ" মডিউলের জন্য স্বয়ংক্রিয় যন্ত্র ব্যবহার করেছি। এই ধাপে, আমরা 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"

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

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

সতর্কতা : কল করতে ভুলবেন না

GrpcInstrumentationServe() 

এই ধাপে, না

GrpcInstrumentationClient()

.

src/server/server.py

 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 run --tail

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

141cb620245b689d.png

সারাংশ

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

6. অভিনন্দন

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

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

  • বর্তমান বাস্তবায়ন স্বাস্থ্য পরীক্ষার দ্বারা উত্পন্ন সমস্ত স্প্যান পাঠায়। আপনি কিভাবে ক্লাউড ট্রেস থেকে সেই স্প্যানগুলি ফিল্টার করবেন? ইঙ্গিত এখানে .
  • স্প্যানগুলির সাথে ইভেন্ট লগগুলিকে সংযুক্ত করুন এবং দেখুন কিভাবে এটি Google ক্লাউড ট্রেস এবং Google ক্লাউড লগিং-এ কাজ করে৷ ইঙ্গিত এখানে .
  • অন্য ভাষার একটি দিয়ে কিছু পরিষেবা প্রতিস্থাপন করুন এবং সেই ভাষার জন্য 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"> "সেটিংস" নির্বাচন করুন এবং তারপরে "শাট ডাউন" বোতামে ক্লিক করুন।

578ca2b72a161e9d.png

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