ক্লাউড ফাংশন লগিং এবং ট্রেসিং কোডল্যাব

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

আমরা এখানে একটি এইচটিটিপি-ট্রিগারড ফাংশন ব্যবহার করব তবে আমরা যা কভার করি তা অন্যান্য ভাষা এবং অন্যান্য ইভেন্টগুলির দ্বারা ট্রিগার করা ফাংশনগুলির জন্যও প্রযোজ্য (স্টোরেজ বাকেট, পাব/সাব, ইত্যাদি)

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

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

2016-02-10 12:45:26.png এর স্ক্রিনশট

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

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

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

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

গুগল ক্লাউড শেল

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

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

Google ক্লাউড শেল সক্রিয় করতে, বিকাশকারী কনসোল থেকে উপরের ডানদিকের বোতামে ক্লিক করুন (এটি পরিবেশের সাথে সংযোগ করতে এবং সংযোগ করতে মাত্র কয়েক মুহূর্ত লাগবে):

activateCloudShell.png

"স্টার্ট ক্লাউড শেল" বোতামে ক্লিক করুন:

স্ক্রীন শট 2017-06-14 10.13.43 PM.png এ

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

gcloud auth list

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

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

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

[core]
project = <PROJECT_ID>

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

echo $GOOGLE_CLOUD_PROJECT

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

<PROJECT_ID>

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

gcloud config set project <PROJECT_ID>

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

Project_ID.png

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

gcloud config set compute/zone us-central1-f

আপনি বিভিন্ন জোন বিভিন্ন চয়ন করতে পারেন. অঞ্চল এবং অঞ্চল ডকুমেন্টেশনে আরও জানুন।

নিরীক্ষণ করার জন্য কিছু করার জন্য, আসুন একটি হ্যালো ওয়ার্ল্ড ক্লাউড ফাংশন তৈরি করি। কনসোলের বাম মেনুতে, ক্লাউড ফাংশনে ক্লিক করুন, তারপর " Create function " :

আপনার নতুন ফাংশনের নাম দিন " hello-monitor " :

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

অবশেষে, " Create " বোতামটি ব্যবহার করে ফাংশনটি তৈরি করুন:

একটি সংক্ষিপ্ত মুহুর্তের পরে আপনি আপনার ফাংশনটি আহ্বান করার জন্য প্রস্তুত হিসাবে তালিকাভুক্ত দেখতে পাবেন (সবুজ চেকমার্ক দ্বারা নির্দেশিত):

এখন যেহেতু ক্লাউড ফাংশন সফলভাবে স্থাপন করা হয়েছে আমরা কমান্ড লাইন থেকে এটি পরীক্ষা করব।

প্রথমে, ক্লাউড শেল ব্যবহার করে, নিম্নলিখিত কমান্ডটি নির্গত করুন:

$ gcloud functions describe hello-monitor

এটি httpsTrigger এর জন্য একটি URL সহ ফাংশনের একটি বিবরণ প্রদান করবে যা ফাংশনটি শুরু করার জন্য HTTP(S) এন্ডপয়েন্ট। এটি ফর্মের হওয়া উচিত: https://<region>-<project-id>.cloudfunctions.net/hello-monitor

ফাংশনটি ট্রিগার করা এখন এই ইউআরএলে curl করার মতো সহজ হওয়া উচিত:

$ curl https://<region>-<project-id>.cloudfunctions.net/hello-monitor
Hello World!

আমরা এখন Vegeta ব্যবহার করব, একটি সহজ HTTP লোড টেস্টিং টুল। এটি ইনস্টল করতে, ক্লাউড শেল থেকে, কেবল এই কমান্ডটি টাইপ করুন:

$ go get -u github.com/tsenart/vegeta

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

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

আপনার ফাংশন বিশদ দৃশ্য থেকে, "লগগুলি দেখুন" ডানদিকের মেনুতে ক্লিক করুন:

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

আশা করি আপনার ফাংশনে সমস্ত অনুরোধ একটি 200 স্ট্যাটাস কোড প্রদান করে।

এই লগ ভিউয়ার ব্যবহার করে, আপনি করতে পারেন:

  • লগ লেভেল দ্বারা ফিল্টার করুন (আমাদের ক্ষেত্রে সমস্ত লগই Debug -লেভেল)
  • একটি নির্দিষ্ট সময়সীমা নির্বাচন করুন (আপেক্ষিক বা পরম)
  • লগ স্ট্রিমিং সক্ষম করুন (স্ক্রীনের শীর্ষে "প্লে" বোতাম)
  • লগ এন্ট্রির একটি লিঙ্ক অনুলিপি করুন (টিমের সদস্যদের সাথে ভাগ করার জন্য)
  • সম্পদ প্রসঙ্গে একটি লগ এন্ট্রি দেখান
  • একটি লগ এন্ট্রি পিন করুন (একটি ভিজ্যুয়াল কিউ হিসাবে)
  • BigQuery, ক্লাউড স্টোরেজ বা ক্লাউড পাব/সাব-এ লগ এক্সপোর্ট করুন (অথবা JSON বা CSV ফর্ম্যাটে ডাউনলোড করুন)

এছাড়াও নোট করুন যে উপরের-বাম নির্বাচক আপনি ফাংশন দ্বারা লগ ফিল্টার করতে পারেন. আপনি উইন্ডোর শীর্ষে অনুসন্ধান বারে লেবেল বা একটি সম্পূর্ণ পাঠ্য অনুসন্ধানের জন্য অনুসন্ধান করতে পারেন। আমাদের ক্ষেত্রে লেবেলগুলি hello-monitor (ফাংশনের নাম) পাশাপাশি প্রতিটি অনুরোধের জন্য একটি এক্সিকিউশন শনাক্তকারী।

শেয়ার করার জন্য ফিল্টারও কপি করা যেতে পারে (সার্চ বক্সে ড্রপ-ডাউন মেনু দেখুন):

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

লেটেন্সি এবং RPC কলগুলি পর্যবেক্ষণ করার জন্য আরও একটি বিশদ সরঞ্জাম হল স্ট্যাকড্রাইভার ট্রেস বৈশিষ্ট্য, তবে আমরা এই বৈশিষ্ট্যটি ব্যবহার করার আগে আমাদের ফাংশনে কিছু পরিবর্তন করতে হবে, যথা:

  1. নির্ভরতা হিসাবে জীবন রক্ষাকারী node-emoji প্যাকেজ যোগ করুন
  2. নোড-ইমোজি মডিউল ব্যবহার করতে ফাংশন কোড আপডেট করুন এবং কিছু লেটেন্সি প্রবর্তন করুন
  3. ক্লাউড ফাংশনের জন্য স্ট্যাকড্রাইভার ট্রেস সক্ষম করতে একটি পরিবেশ পরিবর্তনশীল যোগ করুন

"ফাংশনের বিবরণ" পৃষ্ঠা থেকে, ফাংশনটি পরিবর্তন করতে সম্পাদনা ক্লিক করুন:

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
  
};

এটি 300 মিলিসেকেন্ডের জন্য বিরতির পরে ফাংশন দ্বারা ফিরে আসা বার্তাটিতে একটি এলোমেলো ইমোজি যুক্ত করবে৷

অবশেষে, GOOGLE_CLOUD_TRACE_ENABLED নামে একটি ক্লাউড ফাংশন এনভায়রনমেন্ট ভেরিয়েবল যোগ করুন এবং নিম্নরূপ true সেট করুন:

সংরক্ষণ ক্লিক করতে ভুলবেন না!

এখন ক্লাউড শেল-এ ফিরে যান এবং নতুন স্থাপন করা ফাংশনে কিছু লোড জেনারেট করতে কমান্ডটি স্মরণ করুন:

$ echo "GET https://<region>-<project-id>.cloudfunctions.net/hello-monitor" \
   | vegeta attack -rate=5 -duration=120s \
   > results.bin

আমরা এখন আপনার কোডে অন্য কোন সেটআপ প্রয়োজনীয়তা এবং কোন নির্দিষ্ট ট্রেসিং লাইব্রেরি ছাড়া উত্পাদিত ট্রেসের তালিকা পর্যবেক্ষণ করতে প্রস্তুত!

বাম-হাতের মেনু ব্যবহার করে, ট্রেস তালিকাতে নেভিগেট করুন (স্ট্যাকড্রাইভার ট্রেসের অধীনে):

আপনি এই পর্দা ক্যাপচার অনুরূপ কিছু দেখতে হবে:

এটি এটিকে বেশ সুস্পষ্ট করে তুলতে হবে যে আমাদের ফাংশনে প্রবর্তিত বিলম্বিতা প্রকৃতপক্ষে 300ms এ পরিমাপ করা হয়।

এই গ্রাফের প্রতিটি বিন্দু একটি অনুরোধ যার জন্য আপনি বিস্তারিত তথ্য দেখতে পারেন, যেমন টাইমস্ট্যাম্প, HTTP পদ্ধতি এবং স্থিতি, এর লেবেল, সংশ্লিষ্ট লগ এন্ট্রির একটি লিঙ্ক এবং ফাংশনটি যে কোনো পরবর্তী RPC কল করে:

আপনি যদি জুম ইন করতে চান তবে গ্রাফটিতে ক্লিক করুন এবং টেনে আনুন: ট্রেস গ্রাফে একটি কাস্টম সময় সীমা নির্বাচন করা হচ্ছে

জুম আউট করতে, পৃষ্ঠার শীর্ষে "আনডু জুম" বোতামে ক্লিক করুন।

যেহেতু আমরা একটি একক ফাংশন স্থাপন করেছি, গ্রাফটি শুধুমাত্র hello-monitor URI-তে GET অনুরোধগুলি দেখায়, তবে আপনি HTTP পদ্ধতি (GET, POST, DELETE, ...), HTTP স্থিতি (2XX, 3XX,) দ্বারা ট্রেস ফিল্টার করতে পারেন ...), অথবা অনুরোধ ফিল্টার ব্যবহার করে।

এখন বাম মেনুতে ট্রেসেস "ওভারভিউ" বিভাগে নেভিগেট করুন:

এই ওভারভিউ পৃষ্ঠা থেকে আপনি সাম্প্রতিক ট্রেস এবং অন্যান্য অন্তর্দৃষ্টি খুঁজে পেতে পারেন।

... সেইসাথে একটি URI অনুরোধ ফিল্টার, একটি HTTP পদ্ধতি, একটি HTTP স্থিতি, এবং একটি সময় সীমার সমন্বয়ের উপর ভিত্তি করে কাস্টম রিপোর্ট তৈরি করার ক্ষমতা। এমনকি এটি আপনাকে একটি সময় বেসলাইনের সাথে উত্পন্ন মানগুলির তুলনা করতে দেয়:

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

এই ধরনের একটি কাস্টম রিপোর্ট যখন একটি কর্মক্ষমতা সমস্যা প্রবর্তন করা হয়েছিল সেইসাথে একটি পরিষেবা স্তর নির্দেশক (SLI) যেমন শেষ-ব্যবহারকারীর অনুরোধের লেটেন্সি ট্র্যাক করতে ব্যবহার করা যেতে পারে৷

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

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

ক্লাউড ফাংশন ওভারভিউ পৃষ্ঠায় কেবল hello-monitor ফাংশনটি নির্বাচন করুন এবং "মুছুন" এ ক্লিক করুন৷

এটি ক্লাউড ফাংশন লগিং এবং ট্রেস সহ এই সহজ শুরু কোডল্যাবটি শেষ করে!

এখানে কিছু ফলো-আপ পড়া আছে:

/