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

আপনি একটি HTTP-ট্রিগারড ক্লাউড ফাংশন ব্যবহার করবেন, কিন্তু আপনি যা কিছু আলোচনা করবেন তা অন্যান্য ভাষা এবং অন্যান্য ইভেন্ট দ্বারা ট্রিগার হওয়া ক্লাউড ফাংশনের ক্ষেত্রেও প্রযোজ্য।
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা G Suite অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)
প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।
- এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।
এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
ক্লাউড শেল
যদিও ক্লাউড ফাংশন এবং এর লগিং ও মনিটরিং ক্ষমতা আপনার ল্যাপটপ থেকে দূরবর্তীভাবে ব্যবহার করা যায়, আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ।
এই ডেবিয়ান-ভিত্তিক ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এর মানে হলো, এই কোডল্যাবের জন্য আপনার শুধু একটি ব্রাউজার প্রয়োজন হবে (হ্যাঁ, এটি ক্রোমবুকেও কাজ করে)।
- ক্লাউড কনসোল থেকে ক্লাউড শেল সক্রিয় করতে, কেবল 'Activate Cloud Shell'-এ ক্লিক করুন।
(পরিবেশের জন্য ব্যবস্থা করতে এবং সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত)।
ক্লাউড শেলে সংযুক্ত হওয়ার পর, আপনি দেখতে পাবেন যে আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার 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
আপনি বিভিন্ন ধরনের জোন বেছে নিতে পারেন। আরও তথ্যের জন্য, অঞ্চল ও জোন দেখুন।
৩. একটি সহজ ক্লাউড ফাংশন স্থাপন করুন
পর্যবেক্ষণ করার জন্য, একটি "হ্যালো, ওয়ার্ল্ড" ক্লাউড ফাংশন তৈরি করুন। গুগল ক্লাউড কনসোলের বাম দিকের মেনুতে, ক্লাউড ফাংশন- এ ক্লিক করুন, তারপর ক্রিয়েট ফাংশন-এ ক্লিক করুন।

আপনার নতুন ক্লাউড ফাংশনের নাম হিসেবে 'hello-monitor' লিখুন।

সোর্স কোডের জন্য সমস্ত ডিফল্ট সেটিংস অপরিবর্তিত রাখুন। (তবে, আপনি চাইলে অন্য কোনো ভাষা/রানটাইম বেছে নিতে পারেন।)

অবশেষে, Create-এ ক্লিক করুন।

আপনার ক্লাউড ফাংশনটির পাশে একটি সবুজ টিক চিহ্ন দেখতে পাবেন, যার অর্থ হলো এটি ব্যবহারের জন্য প্রস্তুত।

৪. ক্লাউড ফাংশনটি পরীক্ষা করুন এবং একটি লোড জেনারেটর ব্যবহার করে ট্র্যাফিক পাঠান।
ক্লাউড ফাংশনটি সফলভাবে ডেপ্লয় করা হয়ে গেলে, কমান্ড লাইন থেকে এটি পরীক্ষা করুন।
প্রথমে, ক্লাউড শেল ব্যবহার করে নিম্নলিখিত কমান্ডটি প্রেরণ করুন:
$ gcloud functions describe hello-monitor
এটি ক্লাউড ফাংশনের একটি বিবরণ ফেরত দেবে, যার মধ্যে httpsTrigger এর জন্য একটি URL অন্তর্ভুক্ত থাকবে, যা ক্লাউড ফাংশনটি চালু করার জন্য HTTP(S) এন্ডপয়েন্ট। এটি দেখতে নিম্নলিখিতের মতো হবে: https://<region>-<project-id>.cloudfunctions.net/hello-monitor।
এখন থেকে ওই URL-টিতে curl কমান্ড ব্যবহার করেই ক্লাউড ফাংশনটি চালু করা যাবে।
$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor Hello World!
এখন ভেজিটা (Vegeta) ব্যবহার করুন, এটি একটি সহজ HTTP লোড-টেস্টিং টুল। এটি ইনস্টল করতে, ক্লাউড শেল (Cloud Shell) থেকে শুধু নিচের কমান্ডটি টাইপ করুন:
$ go get -u github.com/tsenart/vegeta
আপনার ক্লাউড ফাংশনে কিছু ট্র্যাফিক পাঠাতে (কয়েক মিনিটের জন্য প্রতি সেকেন্ডে পাঁচটি অনুরোধ), নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
৫. লগগুলোর মধ্যে দিয়ে নেভিগেট করুন
আপনার ক্লাউড ফাংশনের বিস্তারিত ভিউ থেকে, 'ভিউ লগস'-এ ক্লিক করুন।

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

আপনার ক্লাউড ফাংশনে পাঠানো সমস্ত অনুরোধের জবাবে ২০০ স্ট্যাটাস কোড ফেরত আসা উচিত।
লগগুলো দেখার সময়, আপনি নিম্নলিখিত কাজগুলো করতে পারেন:
- লগ লেভেল অনুযায়ী ফিল্টার করুন (আপনার ক্ষেত্রে, সব লগই
debugলেভেলের)। - একটি নির্দিষ্ট সময়সীমা (আপেক্ষিক বা পরম) নির্বাচন করুন।
- লগ স্ট্রিমিং সক্ষম করুন ( প্লে- এর সাথে)
স্ক্রিনের শীর্ষে) - লগ এন্ট্রির একটি লিঙ্ক কপি করুন (টিমের সদস্যদের সাথে শেয়ার করার জন্য)।
- রিসোর্স কনটেক্সটে একটি লগ এন্ট্রি দেখান।
- একটি লগ এন্ট্রি পিন করুন (দৃশ্যমান সংকেত হিসেবে)।
- লগগুলি BigQuery, ক্লাউড স্টোরেজ, বা Pub/Sub-এ এক্সপোর্ট করুন (অথবা সরাসরি JSON বা CSV ফাইল হিসাবে ডাউনলোড করুন)।
৬. ফাংশনটি আপডেট করুন
ক্লাউড কনসোল ব্যবহার করে, ফাংশন ডিটেইলস ভিউতে যান এবং আপনার লোড টেস্টার দিয়ে তৈরি করা প্রতি সেকেন্ডে ইনভোকেশনের সংখ্যা ও সেগুলোর এক্সিকিউশন টাইমের স্পাইকটি পর্যবেক্ষণ করুন।


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

node-emoji প্যাকেজের জন্য একটি ডিপেন্ডেন্সি যোগ করতে package.json ফাইলটি সম্পাদনা করুন।
{
"name": "sample-http",
"version": "0.0.1",
"dependencies": {
"node-emoji": "^1.8.1"
}
}
index.js ফাইলের বিষয়বস্তু নিম্নলিখিতভাবে পরিবর্তন করে মূল ফাংশনটি সম্পাদনা করুন:
const emoji = require('node-emoji');
exports.helloWorld = (req, res) => {
let message = req.query.message || req.body.message || 'Hello World!';
// add some latency, functions are too quick!
setTimeout(function() {
message += emoji.random().emoji;
res.status(200).send(message);
}, (3 * 100)); // 300ms
};
এটি ক্লাউড ফাংশনটি ৩০০ মিলিসেকেন্ড বিরতি নেওয়ার পর প্রাপ্ত মেসেজে একটি র্যান্ডম ইমোজি যোগ করে।
অবশেষে, GOOGLE_CLOUD_TRACE_ENABLED নামে একটি ক্লাউড ফাংশন এনভায়রনমেন্ট ভেরিয়েবল যোগ করুন এবং নিম্নরূপভাবে এটিকে true সেট করুন:

সংরক্ষণ করুন- এ ক্লিক করুন।
ক্লাউড শেলে ফিরে যান এবং নতুনভাবে ডেপ্লয় করা ক্লাউড ফাংশনে কিছু লোড তৈরি করার জন্য কমান্ডটি পুনরায় কল করুন:
$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \ | vegeta attack -rate=5 -duration=120s \ > results.bin
এখন আপনি অন্য কোনো সেটআপের প্রয়োজন ছাড়াই এবং আপনার কোডে কোনো নির্দিষ্ট ট্রেসিং লাইব্রেরি ছাড়াই উৎপাদিত ট্রেসগুলির তালিকা পর্যবেক্ষণ করতে প্রস্তুত!
৭. আপডেট করা ক্লাউড ফাংশনটি সনাক্ত করুন
বাম দিকের মেনু ব্যবহার করে ট্রেস লিস্টে ( স্ট্যাকড্রাইভার ট্রেস-এর অধীনে) যান।

আপনি নিচের স্ক্রিনশটটির মতো কিছু দেখতে পাবেন:

এতে এটা বেশ স্পষ্ট হয়ে যাওয়া উচিত যে, আপনার ক্লাউড ফাংশনে সৃষ্ট ল্যাটেন্সি প্রকৃতপক্ষে ৩০০ মিলিসেকেন্ড পরিমাপ করা হয়েছে।
গ্রাফের প্রতিটি বিন্দু হলো একটি অনুরোধ, যার বিস্তারিত তথ্য আপনি দেখতে পারেন; যেমন—টাইমস্ট্যাম্প, HTTP মেথড ও স্ট্যাটাস, এর লেবেল, সংশ্লিষ্ট লগ এন্ট্রির লিঙ্ক এবং ক্লাউড ফাংশন দ্বারা করা পরবর্তী যেকোনো RPC কল।

আপনি যদি জুম ইন করতে চান, তাহলে গ্রাফটির উপর ক্লিক করে ড্র্যাগ করুন। 
জুম আউট করতে, পৃষ্ঠার শীর্ষে থাকা ‘আনডু জুম’- এ ক্লিক করুন।
যেহেতু আপনি একটিমাত্র ক্লাউড ফাংশন স্থাপন করেছেন, গ্রাফটি শুধুমাত্র hello-monitor URI-এর GET অনুরোধগুলো দেখাচ্ছে, কিন্তু আপনি HTTP মেথড (GET, POST, DELETE), HTTP স্ট্যাটাস (2XX, 3XX) অথবা রিকোয়েস্ট ফিল্টার ব্যবহার করে ট্রেসগুলো ফিল্টার করতে পারেন।
বাম দিকের মেনুতে ওভারভিউ -তে যান:

এই সার্বিক চিত্র পৃষ্ঠা থেকে আপনি সাম্প্রতিক কার্যকলাপের চিহ্ন এবং অন্যান্য তথ্য খুঁজে পেতে পারেন।

এছাড়াও আপনি একটি URI রিকোয়েস্ট ফিল্টার, একটি HTTP মেথড, একটি HTTP স্ট্যাটাস এবং একটি টাইম রেঞ্জের সমন্বয়ে কাস্টম রিপোর্ট তৈরি করার সুবিধা পাবেন। এমনকি এটি আপনাকে তৈরি হওয়া মানগুলোকে একটি টাইম বেসলাইনের সাথে তুলনা করার সুযোগও দেয়।

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


এই ধরনের একটি কাস্টম রিপোর্ট ব্যবহার করে কখন কোনো পারফরম্যান্স সমস্যা দেখা দিয়েছিল তা খুঁজে বের করা যায় এবং এন্ড-ইউজার রিকোয়েস্ট ল্যাটেন্সির মতো সার্ভিস লেভেল ইন্ডিকেটর (SLI) ট্র্যাক করা যায়।
৮. সম্পদগুলো পরিষ্কার করার সময় হয়েছে।
এর মাধ্যমেই কোডল্যাবটি শেষ হলো!
যদিও ক্লাউড ফাংশন এবং স্ট্যাকড্রাইভার টুলগুলো সার্ভারবিহীন প্ল্যাটফর্ম এবং ব্যবহার না হলে এগুলোর জন্য কোনো খরচ হয় না, তবুও একজন ভালো ক্লাউড ব্যবহারকারী হিসেবে আপনার ক্লাউড ফাংশনটি ডিলিট করে দিন। এর জন্য, ওভারভিউ- এর অধীনে ক্লাউড ফাংশন- এ গিয়ে hello-monitor সিলেক্ট করুন এবং ডিলিট-এ ক্লিক করুন।

৯. এরপর কী?
এখানে আরও কিছু পড়ার বিষয় দেওয়া হলো:
/