1. ভূমিকা
শেষ আপডেট: 2021-03-05
আবেদনের পর্যবেক্ষণযোগ্যতা
পর্যবেক্ষণযোগ্যতা এবং OpenTelemetry
পর্যবেক্ষণযোগ্যতা একটি সিস্টেমের একটি বৈশিষ্ট্য বর্ণনা করতে ব্যবহৃত শব্দ। পর্যবেক্ষণযোগ্যতা সহ একটি সিস্টেম দলগুলিকে তাদের সিস্টেম সক্রিয়ভাবে ডিবাগ করতে দেয়। সেই প্রেক্ষাপটে পর্যবেক্ষণযোগ্যতার তিনটি স্তম্ভ; লগ, মেট্রিক্স এবং ট্রেস হল পর্যবেক্ষণযোগ্যতা অর্জনের জন্য সিস্টেমের জন্য মৌলিক উপকরণ।
OpenTelemetry হল স্পেসিফিকেশন এবং SDK-এর একটি সেট যা পর্যবেক্ষণযোগ্যতার জন্য প্রয়োজনীয় টেলিমেট্রি ডেটা (লগ, মেট্রিক্স এবং ট্রেস) যন্ত্র এবং রপ্তানিকে ত্বরান্বিত করে। OpenTelemetry হল CNCF এর অধীনে একটি ওপেন স্ট্যান্ডার্ড এবং কমিউনিটি চালিত প্রকল্প। প্রকল্প এবং এর ইকোসিস্টেম সরবরাহ করে এমন লাইব্রেরিগুলিকে ব্যবহার করে, বিকাশকারীরা তাদের অ্যাপ্লিকেশনগুলিকে বিক্রেতা নিরপেক্ষ উপায়ে এবং একাধিক আর্কিটেকচারের বিরুদ্ধে উপকরণ তৈরি করতে সক্ষম হয়৷
বিতরণ ট্রেস
লগ, মেট্রিক্স এবং ট্রেসগুলির মধ্যে, ট্রেস হল টেলিমেট্রি যা সিস্টেমে প্রক্রিয়াটির একটি নির্দিষ্ট অংশের লেটেন্সি বলে। বিশেষ করে মাইক্রোসার্ভিসের যুগে, বিতরণ করা ট্রেস সামগ্রিক বিতরণ ব্যবস্থায় লেটেন্সি বাধাগুলি খুঁজে বের করার জন্য শক্তিশালী চালক।
বিতরণ করা ট্রেসগুলি বিশ্লেষণ করার সময়, ট্রেস ডেটা ভিজ্যুয়ালাইজেশন হল সামগ্রিক সিস্টেমের বিলম্বকে এক নজরে উপলব্ধি করার মূল চাবিকাঠি। বিতরণ করা ট্রেসে, আমরা একাধিক স্প্যান ধারণকারী ট্রেসের আকারে সিস্টেম এন্ট্রিপয়েন্টে একটি একক অনুরোধ প্রক্রিয়া করার জন্য কলগুলির একটি সেট পরিচালনা করি।
স্প্যান একটি ডিস্ট্রিবিউটেড সিস্টেমে করা কাজের একটি পৃথক ইউনিটকে উপস্থাপন করে, রেকর্ডিং শুরু এবং থামার সময়। স্প্যানগুলির প্রায়শই একে অপরের মধ্যে অনুক্রমিক সম্পর্ক থাকে - নীচের ছবিতে সমস্ত ছোট স্প্যানগুলি একটি বড় /বার্তা স্প্যানের চাইল্ড স্প্যান, এবং একটি ট্রেসে একত্রিত হয় যা একটি সিস্টেমের মাধ্যমে কাজের পথ দেখায়।
Google ক্লাউড ট্রেস হল ডিস্ট্রিবিউটেড ট্রেস ব্যাকএন্ডের বিকল্পগুলির মধ্যে একটি এবং এটি Google ক্লাউডের অন্যান্য পণ্যগুলির সাথে ভালভাবে একত্রিত৷
আপনি কি নির্মাণ করবেন
এই কোডল্যাবে, আপনি Google Kubernetes ইঞ্জিনে চলমান একটি Kubernetes ক্লাস্টারে চালিত "Shakesapp" নামক পরিষেবাগুলিতে তথ্য ট্রেস করতে যাচ্ছেন। Shakesapp এর স্থাপত্য নিচে বর্ণনা করা হয়েছে:
- ক্লায়েন্ট সার্ভারে একটি ক্যোয়ারী স্ট্রিং পাঠায়
- সার্ভার ক্লায়েন্টের কাছ থেকে ক্যোয়ারী গ্রহণ করে, Google ক্লাউড স্টোরেজ থেকে টেক্সট ফরম্যাটে সমস্ত শেক্সপেয়ার কাজ নিয়ে আসে, কোয়েরি রয়েছে এমন লাইনগুলি অনুসন্ধান করে এবং ক্লায়েন্টের সাথে মিলে যাওয়া লাইনের সংখ্যা ফেরত দেয়।
আপনি অনুরোধ জুড়ে ট্রেস তথ্য উপকরণ হবে.
আপনি কি শিখবেন
- পাইথন প্রকল্পে ওপেনটেলিমেট্রি ট্রেস লাইব্রেরিগুলির সাথে কীভাবে শুরু করবেন
- কিভাবে লাইব্রেরি দিয়ে একটি স্প্যান তৈরি করবেন
- অ্যাপের উপাদানগুলির মধ্যে তারের জুড়ে স্প্যান প্রসঙ্গগুলি কীভাবে প্রচার করা যায়
- গুগল ক্লাউড ট্রেসে কীভাবে ট্রেস ডেটা পাঠাবেন
- গুগল ক্লাউড ট্রেসে ট্রেসটি কীভাবে বিশ্লেষণ করবেন
এই কোডল্যাব ব্যাখ্যা করে কিভাবে আপনার মাইক্রোসার্ভিসগুলিকে ইন্সট্রুমেন্ট করতে হয়। এটি সহজে বোঝার জন্য, এই উদাহরণে শুধুমাত্র 3টি উপাদান রয়েছে (লোড জেনারেটর, ক্লায়েন্ট এবং সার্ভার), তবে আপনি এই কোডল্যাবে ব্যাখ্যা করা একই প্রক্রিয়া আরও জটিল এবং বড় সিস্টেমে প্রয়োগ করতে পারেন।
আপনি কি প্রয়োজন হবে
- পাইথনের জ্ঞান 3
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
আপনার যদি ইতিমধ্যে একটি Google অ্যাকাউন্ট না থাকে (Gmail বা Google Apps), তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে। Google ক্লাউড প্ল্যাটফর্ম কনসোলে সাইন-ইন করুন ( console.cloud.google.com ) এবং একটি নতুন প্রকল্প তৈরি করুন৷
আপনার যদি ইতিমধ্যে একটি প্রকল্প থাকে, তাহলে কনসোলের উপরের বাম দিকে প্রজেক্ট নির্বাচন পুল ডাউন মেনুতে ক্লিক করুন:
এবং একটি নতুন প্রকল্প তৈরি করতে ফলাফল ডায়ালগে 'নতুন প্রকল্প' বোতামে ক্লিক করুন:
আপনার যদি ইতিমধ্যে একটি প্রকল্প না থাকে, তাহলে আপনার প্রথমটি তৈরি করতে আপনাকে এই মত একটি ডায়ালগ দেখতে হবে:
পরবর্তী প্রকল্প তৈরির ডায়ালগ আপনাকে আপনার নতুন প্রকল্পের বিশদ বিবরণ প্রবেশ করতে দেয়:
প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটিকে পরে এই কোডল্যাবে PROJECT_ID হিসাবে উল্লেখ করা হবে৷
পরবর্তী, যদি আপনি ইতিমধ্যে এটি না করে থাকেন, তাহলে Google ক্লাউড সংস্থানগুলি ব্যবহার করতে এবং ক্লাউড ট্রেস API সক্ষম করার জন্য আপনাকে বিকাশকারী কনসোলে বিলিং সক্ষম করতে হবে৷
এই কোডল্যাবের মাধ্যমে চালানোর জন্য আপনার কয়েক ডলারের বেশি খরচ করা উচিত নয়, তবে আপনি যদি আরও সংস্থান ব্যবহার করার সিদ্ধান্ত নেন বা আপনি যদি সেগুলিকে চলমান রেখে দেন তবে এটি আরও বেশি হতে পারে (এই নথির শেষে "পরিষ্কার" বিভাগটি দেখুন)। গুগল ক্লাউড ট্রেস, গুগল কুবারনেটস ইঞ্জিন এবং গুগল আর্টিফাক্যাট রেজিস্ট্রির মূল্য অফিসিয়াল ডকুমেন্টেশনে উল্লেখ করা হয়েছে।
- Google ক্লাউড পর্যবেক্ষণযোগ্যতার জন্য মূল্য
- মূল্য | কুবারনেটস ইঞ্জিন ডকুমেন্টেশন
- আর্টিফ্যাক্ট রেজিস্ট্রি মূল্য | আর্টিফ্যাক্ট রেজিস্ট্রি ডকুমেন্টেশন
Google ক্লাউড প্ল্যাটফর্মের নতুন ব্যবহারকারীরা $300 বিনামূল্যের ট্রায়ালের জন্য যোগ্য, যা এই কোডল্যাবটিকে সম্পূর্ণ বিনামূল্যে করতে হবে৷
গুগল ক্লাউড শেল সেটআপ
যদিও Google ক্লাউড এবং Google ক্লাউড ট্রেস আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালনা করা যেতে পারে, এই কোডল্যাবে আমরা Google ক্লাউড শেল ব্যবহার করব, ক্লাউডে চলমান একটি কমান্ড লাইন পরিবেশ।
এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত বিকাশের সরঞ্জামগুলির সাথে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এর মানে হল যে এই কোডল্যাবের জন্য আপনার যা দরকার তা হল একটি ব্রাউজার (হ্যাঁ, এটি একটি Chromebook এ কাজ করে)।
ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল ক্লাউড শেল সক্রিয় করুন ক্লিক করুন (পরিবেশের সাথে সংযোগ স্থাপন এবং সংযোগের জন্য এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে)।
একবার ক্লাউড শেলের সাথে সংযুক্ত হয়ে গেলে, আপনি দেখতে পাবেন যে আপনি ইতিমধ্যেই প্রমাণীকৃত এবং প্রকল্পটি ইতিমধ্যেই আপনার 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
খুঁজছেন? সেটআপ ধাপে আপনি কোন আইডি ব্যবহার করেছেন তা দেখুন বা ক্লাউড কনসোল ড্যাশবোর্ডে দেখুন:
ক্লাউড শেল ডিফল্টরূপে কিছু এনভায়রনমেন্ট ভেরিয়েবলও সেট করে, যা আপনার ভবিষ্যত কমান্ড চালানোর সময় কার্যকর হতে পারে।
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) এ মাইক্রোসার্ভিসের একটি ক্লাস্টার চালাবেন। এই কোডল্যাবের প্রক্রিয়াটি নিম্নরূপ:
- ক্লাউড শেল এ বেসলাইন প্রকল্প ডাউনলোড করুন
- পাত্রে মাইক্রোসার্ভিস তৈরি করুন
- Google আর্টিফ্যাক্ট রেজিস্ট্রিতে (GAR) পাত্রে আপলোড করুন
- GKE-এ কন্টেইনার স্থাপন করুন
- ট্রেস ইন্সট্রুমেন্টেশনের জন্য পরিষেবার সোর্স কোড পরিবর্তন করুন
- ধাপ 2 এ যান
কুবারনেটস ইঞ্জিন সক্ষম করুন
প্রথমে, আমরা একটি Kubernetes ক্লাস্টার সেট আপ করি যেখানে শেক্সঅ্যাপ GKE-তে চলে, তাই আমাদের GKE সক্ষম করতে হবে। "Kubernetes Engine" মেনুতে নেভিগেট করুন এবং ENABLE বোতাম টিপুন।
এখন আপনি একটি 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 এবং স্ক্যাফোল্ড সেট আপ করতে হবে।
আর্টিফ্যাক্ট রেজিস্ট্রি সেটআপ
"আর্টিফ্যাক্ট রেজিস্ট্রি" এর মেনুতে নেভিগেট করুন এবং সক্ষম বোতাম টিপুন৷
কিছুক্ষণ পর, আপনি GAR এর সংগ্রহস্থল ব্রাউজার দেখতে পাবেন। "রিপোজিটরি তৈরি করুন" বোতামে ক্লিক করুন এবং সংগ্রহস্থলের নাম লিখুন।
এই কোডল্যাবে, আমি নতুন সংগ্রহস্থলের নাম trace-codelab
। আর্টিফ্যাক্টের বিন্যাস হল "ডকার" এবং অবস্থানের ধরন হল "অঞ্চল"। আপনি Google Compute Engine ডিফল্ট জোনের জন্য যে অঞ্চলটি সেট করেছেন তার কাছাকাছি অঞ্চলটি চয়ন করুন৷ উদাহরণস্বরূপ, এই উদাহরণটি উপরে "us-central1-f" বেছে নিয়েছে, তাই এখানে আমরা "us-central1 (Iowa)" বেছে নিলাম। তারপর "CREATE" বোতামে ক্লিক করুন।
এখন আপনি সংগ্রহস্থল ব্রাউজারে "ট্রেস-কোডল্যাব" দেখতে পাচ্ছেন।
আমরা রেজিস্ট্রি পথ চেক করতে পরে এখানে ফিরে আসব.
স্ক্যাফোল্ড সেটআপ
স্ক্যাফোল্ড একটি সহজ টুল যখন আপনি কুবারনেটসে মাইক্রোসার্ভিস চালানোর জন্য কাজ করেন। এটি কমান্ডের ছোট সেট সহ অ্যাপ্লিকেশনগুলির পাত্রে নির্মাণ, পুশিং এবং স্থাপনের কার্যপ্রবাহ পরিচালনা করে। স্ক্যাফোল্ড ডিফল্টরূপে ডকার রেজিস্ট্রি কনটেইনার রেজিস্ট্রি হিসাবে ব্যবহার করে, তাই আপনাকে স্ক্যাফোল্ড কনফিগার করতে হবে যাতে কনটেইনার পুশ করার সময় GAR চিনতে পারে।
আবার ক্লাউড শেল খুলুন এবং স্ক্যাফোল্ড ইনস্টল করা আছে কিনা তা নিশ্চিত করুন। (ক্লাউড শেল ডিফল্টরূপে পরিবেশে স্ক্যাফোল্ড ইনস্টল করে।) নিম্নলিখিত কমান্ডটি চালান এবং স্ক্যাফোল্ড সংস্করণটি দেখুন।
skaffold version
কমান্ড আউটপুট
v1.20.0
এখন, আপনি স্ক্যাফোল্ড ব্যবহারের জন্য ডিফল্ট সংগ্রহস্থল নিবন্ধন করতে পারেন। রেজিস্ট্রি পাথ পাওয়ার জন্য, নিজেকে আর্টিফ্যাক্ট রেজিস্ট্রি ড্যাশবোর্ডে নেভিগেট করুন এবং আগের ধাপে আপনি যে রিপোজিটরি সেট আপ করেছেন তার নামে ক্লিক করুন।
তারপরে আপনি পৃষ্ঠার শীর্ষে ব্রেডক্রাম্বস ট্রেইল দেখতে পাবেন। ক্লিক করুন ক্লিপবোর্ডে রেজিস্ট্রি পাথ কপি করতে আইকন।
অনুলিপি বোতামে ক্লিক করলে, আপনি ব্রাউজারের নীচে ডায়ালগটি দেখতে পাবেন যেমন বার্তা সহ:
"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 এর জন্য ইন্সট্রুমেন্টেশন
ট্রেস ইন্সট্রুমেন্টেশন এবং প্রচারের ধারণা
সোর্স কোড সম্পাদনা করার আগে, আমাকে সংক্ষেপে ব্যাখ্যা করা যাক কীভাবে বিতরণ করা ট্রেসগুলি একটি সাধারণ চিত্রে কাজ করে।
এই উদাহরণে, আমরা ক্লাউড ট্রেসে ট্রেস এবং স্প্যান তথ্য রপ্তানি করতে এবং লোডজেন পরিষেবা থেকে সার্ভার পরিষেবাতে অনুরোধ জুড়ে ট্রেস প্রসঙ্গ প্রচার করার জন্য কোডটি ইনস্ট্রুমেন্ট করি৷
ক্লাউড ট্রেস যাতে একই ট্রেস আইডি আছে এমন সমস্ত স্প্যানকে এক ট্রেসে একত্রিত করতে অ্যাপ্লিকেশনটিকে ট্রেস মেটাডেটা যেমন ট্রেস আইডি এবং স্প্যান আইডি পাঠাতে হবে। এছাড়াও অ্যাপ্লিকেশনটিকে ডাউনস্ট্রিম পরিষেবাগুলির জন্য অনুরোধ করার সময় ট্রেস প্রসঙ্গ (ট্রেস আইডি এবং প্যারেন্ট স্প্যানের স্প্যান আইডির সংমিশ্রণ) প্রচার করতে হবে, যাতে তারা কোন ট্রেস প্রসঙ্গটি পরিচালনা করছে সে সম্পর্কে তারা সচেতন হতে পারে।
OpenTelemetry আপনাকে সাহায্য করে:
- অনন্য ট্রেস আইডি এবং স্প্যান আইডি তৈরি করতে
- ব্যাকএন্ডে ট্রেস আইডি এবং স্প্যান আইডি রপ্তানি করতে
- অন্যান্য পরিষেবাগুলিতে ট্রেস প্রসঙ্গ প্রচার করতে
যন্ত্র প্রথম স্প্যান
ইন্সট্রুমেন্ট লোড জেনারেটর পরিষেবা
বোতাম টিপে ক্লাউড শেল এডিটর খুলুন ক্লাউড শেলের উপরের ডানদিকে। বাম ফলকে এক্সপ্লোরার থেকে
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 শিরোনামে লোড জেনারেটর পরিষেবা থেকে প্রচারিত ট্রেস আইডি তথ্য বের করতে হবে এবং স্প্যান তৈরি করতে আইডি ব্যবহার করতে হবে।
ক্লাউড শেল এডিটর খুলুন এবং প্রয়োজনীয় মডিউল যোগ করুন যেমন আমরা লোড জেনারেটর পরিষেবার জন্য করেছি।
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 ফর্ম্যাটে অ্যাপ্লিকেশন লগ দেখতে পাবেন। আপনি ট্রেস তথ্য পেয়েছেন কিনা তা পরীক্ষা করতে নিজেকে ক্লাউড ট্রেস > ট্রেস তালিকাতে নেভিগেট করুন। যেহেতু লোড জেনারেটর পরিষেবাটি পর্যায়ক্রমে ক্লায়েন্ট পরিষেবাতে অনুরোধ পাঠায় এবং আপনি সমস্ত অনুরোধের জন্য ট্রেস সক্ষম করেছেন, আপনি ট্রেস তালিকায় প্রচুর ডট দেখতে শুরু করেন৷
সেগুলির একটিতে ক্লিক করার মাধ্যমে, আপনি নীচের মতো একটি জলপ্রপাত গ্রাফ দেখতে পাবেন যা অনুরোধ এবং প্রতিক্রিয়া প্রক্রিয়া চলাকালীন প্রতিটি অংশের লেটেন্সি ব্যাখ্যা করে৷ "ইভেন্টগুলি দেখান" এর পাশের চেকবক্সটি খুঁজুন, তারপর আপনি জলপ্রপাত গ্রাফের ভিতরে টীকাগুলি পাবেন৷ এই টীকাগুলি হল সেইগুলি যা আপনি span.add_event()
পদ্ধতিতে কোডে ইনস্ট্রুমেন্ট করেছেন৷
আপনি লক্ষ্য করতে পারেন যে আপনি সার্ভার পরিষেবা থেকে স্প্যানগুলি দেখতে পাচ্ছেন না৷ এটি সঠিক কারণ আমরা সার্ভার পরিষেবাতে স্প্যানগুলিকে মোটেও ইন্সট্রুমেন্ট করিনি৷
সারাংশ
এই ধাপে, আপনি লোড জেনারেটর পরিষেবা এবং ক্লায়েন্ট পরিষেবার উপকরণ তৈরি করেছেন এবং নিশ্চিত করেছেন যে আপনি সফলভাবে সমস্ত পরিষেবা জুড়ে ট্রেস প্রসঙ্গ প্রচার করতে পারেন এবং উভয় পরিষেবা থেকে ক্লাউড ট্রেসে স্প্যান তথ্য রপ্তানি করতে পারেন৷
পরবর্তী আপ
পরবর্তী ধাপে, আপনি gRPC এর মাধ্যমে ট্রেস কনটেক্সট কীভাবে প্রচার করবেন তা নিশ্চিত করতে ক্লায়েন্ট পরিষেবা এবং সার্ভার পরিষেবার উপকরণ দেবেন।
5. gRPC-এর জন্য ইন্সট্রুমেন্টেশন
পূর্ববর্তী ধাপে, আমরা এই মাইক্রোসার্ভিসেস-এ অনুরোধের প্রথমার্ধকে ইনস্ট্রুমেন্ট করেছি। এই ধাপে, আমরা ক্লায়েন্ট পরিষেবা এবং সার্ভার পরিষেবার মধ্যে জিআরপিসি যোগাযোগের উপকরণ তৈরি করার চেষ্টা করি। (নীচের ছবিতে সবুজ এবং বেগুনি আয়তক্ষেত্র)
জিআরপিসি ক্লায়েন্টের জন্য স্বয়ংক্রিয় যন্ত্র
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
এখন আবার, আপনি ক্লাউড ট্রেসের ট্রেস তালিকা পৃষ্ঠায় একগুচ্ছ ট্রেস দেখতে পাচ্ছেন। ট্রেসগুলির একটিতে ক্লিক করুন এবং এখন আপনি লোড জেনারেটর পরিষেবা থেকে সার্ভার পরিষেবা পর্যন্ত অনুরোধ জুড়ে বিস্তৃত দেখতে পাচ্ছেন৷
সারাংশ
এই ধাপে, আপনি ওপেনটেলিমেট্রি ইকোসিস্টেম লাইব্রেরির সহায়তায় জিআরপিসি ভিত্তিক যোগাযোগের উপকরণ তৈরি করেছেন। এছাড়াও, আপনি নিশ্চিত করেছেন যে লোড জেনারেটর পরিষেবাতে তৈরি ট্রেস প্রসঙ্গটি সার্ভার পরিষেবাতে সফলভাবে বিতরণ করা হয়েছে৷
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"> "সেটিংস" নির্বাচন করুন এবং তারপরে "শাট ডাউন" বোতামে ক্লিক করুন।
তারপর ডায়ালগে ফর্মে প্রজেক্ট আইডি (প্রজেক্টের নাম নয়) লিখুন এবং শাটডাউন নিশ্চিত করুন।