क्लाउड फ़ंक्शन के लिए स्टैकड्राइवर लॉगिंग और स्टैकड्राइवर ट्रेस का इस्तेमाल करें

1. परिचय

इस कोडलैब में, आपको Cloud Functions के साथ काम करने वाले सभी डेवलपर के लिए उपलब्ध, लॉगिंग और मॉनिटरिंग टूल का इस्तेमाल करने के बारे में जानकारी मिलेगी. ये टूल, इस्तेमाल की जा सकने वाली सभी भाषाओं में डिप्लॉय किए जाने वाले हर Cloud Function के साथ उपलब्ध हैं. साथ ही, बिना सर्वर वाले कोड को लिखने और इस्तेमाल करने के दौरान, ये टूल आपको ज़्यादा बेहतर तरीके से काम करने में मदद करते हैं.

5815064fec87444b.png

आपको एचटीटीपी से ट्रिगर किए गए Cloud फ़ंक्शन का इस्तेमाल करना होगा. हालांकि, आपकी ओर से कवर की जाने वाली सभी चीज़ें दूसरी भाषाओं और अन्य इवेंट से ट्रिगर किए गए Cloud Functions पर भी लागू होंगी.

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. (अगर आपके पास पहले से Gmail या G Suite खाता नहीं है, तो आपको एक खाता बनाना होगा.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

प्रोजेक्ट आईडी याद रखें. यह Google Cloud के सभी प्रोजेक्ट के लिए एक खास नाम होता है (ऊपर दिया गया नाम पहले ही ले लिया गया है और यह आपके लिए काम नहीं करेगा!). बाद में, इस कोडलैब को इस कोडलैब में PROJECT_ID के तौर पर दिखाया जाएगा.

  1. इसके बाद, आपको Google Cloud के संसाधनों का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी.

इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. "साफ़ करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें सेक्शन में, संसाधनों को बंद करने का तरीका बताया गया है. इससे इस ट्यूटोरियल के अलावा बिलिंग की सुविधा नहीं मिलेगी. Google Cloud के नए उपयोगकर्ता, 300USD डॉलर के मुफ़्त में आज़माने वाले प्रोग्राम में हिस्सा ले सकते हैं.

क्लाउड शेल

हालांकि, Cloud Functions और इसकी लॉगिंग और निगरानी की क्षमताओं का इस्तेमाल आपके लैपटॉप से दूर से किया जा सकता है, लेकिन आप Google Cloud में चल रहे Cloud Shell का इस्तेमाल करेंगे. यह कमांड-लाइन सुविधा है.

Debian आधारित इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस को बेहतर बनाता है. इसका मतलब है कि इस कोडलैब के लिए आपको सिर्फ़ एक ब्राउज़र की ज़रूरत होगी. हां, यह Chromebook पर काम करता है.

  1. Cloud Console से Cloud Shell को चालू करने के लिए, Cloud Shell को चालू करें fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7zSwz7p6ItNgx4tXqQjag7BfWPcZN5kP-X3Q पर क्लिक करें. प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा.

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

14-06-2017 को 10.13.43 PM.png पर स्क्रीन शॉट लिया गया

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 चाहिए? देखें कि आपने सेटअप के चरणों में किस आईडी का इस्तेमाल किया है या इसे Cloud Console के डैशबोर्ड में देखें:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93Drxccyj2-5zz4AxL-G3hzxZ4PsM5HHQ

Cloud Shell, डिफ़ॉल्ट रूप से कुछ एनवायरमेंट वैरिएबल सेट करता है. ये वैरिएबल, आने वाले समय में कमांड चलाने के दौरान काम आ सकते हैं.

echo $GOOGLE_CLOUD_PROJECT

कमांड आउटपुट

<PROJECT_ID>
  1. आखिर में, डिफ़ॉल्ट ज़ोन और प्रोजेक्ट कॉन्फ़िगरेशन सेट करें.
gcloud config set compute/zone us-central1-f

आपके पास कई तरह के ज़ोन चुनने का विकल्प होता है. ज़्यादा जानकारी के लिए, क्षेत्र और ज़ोन.

3. आसान Cloud फ़ंक्शन डिप्लॉय करें

किसी चीज़ की निगरानी करने के लिए, "नमस्ते, दुनिया" बनाएं Cloud फ़ंक्शन. Google Cloud Console के बाएं मेन्यू में, Cloud Functions पर क्लिक करें, फिर फ़ंक्शन बनाएं पर क्लिक करें.

3c13aa20af602aa7.png

"हैलो-मॉनिटर" डालें अपने नए Cloud Function का नाम डालें.

fa6816c96d6d5b94.png

सोर्स कोड की सभी डिफ़ॉल्ट सेटिंग रखें. हालांकि, आपके पास कोई दूसरी भाषा/रनटाइम चुनने का विकल्प होता है.

7aadf164450484e.png

आखिर में, बनाएं पर क्लिक करें.

dc74cd21000d6c91.png

आपको अपने Cloud Function के बगल में हरे रंग का सही का निशान दिखेगा, जिसका मतलब है कि यह शुरू किए जाने के लिए तैयार है.

5363a34eb001d5ed.png

4. Cloud फ़ंक्शन की जांच करें और लोड जनरेटर का इस्तेमाल करके ट्रैफ़िक भेजें

अब Cloud Function डिप्लॉय हो गया है, इसलिए कमांड लाइन से उसकी जांच करें.

सबसे पहले, Cloud Shell का इस्तेमाल करके, यह निर्देश दें:

$ gcloud functions describe hello-monitor

इससे Cloud Function का ब्यौरा दिखना चाहिए. इसमें httpsTrigger का यूआरएल भी शामिल होना चाहिए, जो Cloud फ़ंक्शन को शुरू करने के लिए एचटीटीपी(S) एंडपॉइंट है. यह ऐसा दिखना चाहिए: https://<region>-<project-id>.cloudFunctions.net/hello-monitor.

Cloud फ़ंक्शन को ट्रिगर करना, अब यूआरएल पर curl कमांड का इस्तेमाल करने जितना आसान होना चाहिए.

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

अब Vegeta का इस्तेमाल करें. यह एक आसान एचटीटीपी लोड टेस्टिंग टूल है. Cloud Shell से इसे इंस्टॉल करने के लिए, नीचे दिया गया कमांड टाइप करें :

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

अपने Cloud Function पर कुछ ट्रैफ़िक भेजने के लिए (कुछ मिनट के लिए प्रति सेकंड पांच अनुरोध), इस निर्देश का इस्तेमाल करें:

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

5. लॉग में नेविगेट करें

अपने Cloud Function की जानकारी वाले व्यू से, लॉग देखें पर क्लिक करें.

b24157fd3376e6a8.png

इससे आपको अपने प्रोजेक्ट के Stackdriver Logging सेक्शन पर जाना होगा, जहां आपको सिर्फ़ Cloud Function लॉग दिखेंगे.

5a36fa75d2fb0165.png

आपके Cloud फ़ंक्शन के सभी अनुरोधों पर 200 स्टेटस कोड दिखना चाहिए.

लॉग देखते समय, ये काम किए जा सकते हैं:

  • लॉग लेवल के हिसाब से फ़िल्टर करें (आपके मामले में, सभी लॉग debug लेवल के होते हैं).
  • किसी खास समयसीमा (रिलेटिव या ऐब्सलूट) को चुनें.
  • लॉग स्ट्रीमिंग चालू करें (स्क्रीन के सबसे ऊपर Play 751a4600016f34a7.pngपर).
  • लॉग एंट्री का लिंक कॉपी करें (टीम के सदस्यों के साथ शेयर करने के लिए).
  • संसाधन के कॉन्टेक्स्ट में लॉग एंट्री दिखाएं.
  • लॉग एंट्री को पिन करें (विज़ुअल क्यू के तौर पर).
  • BigQuery, Cloud Storage या Pub/Sub में लॉग एक्सपोर्ट करें (या उन्हें JSON या CSV फ़ाइलों के तौर पर डाउनलोड करें).

6. फ़ंक्शन को अपडेट करें

Cloud Console का इस्तेमाल करके, फ़ंक्शन की जानकारी व्यू पर जाएं. इसके बाद, उपयोगकर्ताओं की संख्या प्रति सेकंड और उनके लागू होने के समय के आधार पर, लोड टेस्टर की मदद से देखें कि बढ़ोतरी में कितनी बढ़ोतरी हुई.

aaee3159bbe395d3.png 7ed347101da5eca0.png

इंतज़ार का समय और आरपीसी कॉल देखने के लिए, Stackdriver Trace की मदद से ज़्यादा जानकारी देने वाला टूल है. हालांकि, इसका इस्तेमाल करने से पहले आपको अपने Cloud Functions में कुछ बदलाव करने होंगे. तो निम्न कार्य करें:

  1. ज़िंदगी बचाने वाले node-emoji पैकेज को डिपेंडेंसी के तौर पर जोड़ें.
  2. नोड-इमोजी मॉड्यूल का इस्तेमाल करने और कुछ इंतज़ार का समय बताने के लिए, फ़ंक्शन कोड को अपडेट करें.
  3. Cloud Functions के लिए स्टैकड्राइवर ट्रेस चालू करने के लिए, एनवायरमेंट वैरिएबल जोड़ें.

फ़ंक्शन की जानकारी में जाकर, फ़ंक्शन में बदलाव करने के लिए बदलाव करें पर क्लिक करें.

39b0f8f98b18a6c0.png

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 मिलीसेकंड तक रुकने के बाद, Cloud Function से मिलने वाले मैसेज में एक रैंडम इमोजी जुड़ जाता है.

आखिर में, GOOGLE_CLOUD_TRACE_ENABLED नाम का Cloud फ़ंक्शन का एनवायरमेंट वैरिएबल जोड़ें और true पर इस तरह से सेट करें:

9205bd277b76aa21.png

सेव करें पर क्लिक करें.

Cloud Shell पर वापस जाएं और डिप्लॉय किए गए नए Cloud फ़ंक्शन पर कुछ लोड जनरेट करने के लिए, निर्देश को याद करें:

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

अब आप ट्रेस की वह सूची देखने के लिए तैयार हैं जिसे सेटअप करने की कोई अन्य ज़रूरत नहीं है और न ही आपके कोड में कोई खास ट्रेसिंग लाइब्रेरी नहीं है!

7. अपडेट किए गए Cloud फ़ंक्शन को ट्रेस करना

बाईं ओर दिए गए मेन्यू का इस्तेमाल करके, ट्रेस लिस्ट (स्टैकड्राइवर ट्रेस में) पर जाएं.

576373f38cad6f8.png

आपको इस स्क्रीनशॉट की तरह कुछ दिखेगा:

44a36b758b49f88f.png

इससे यह साफ़ तौर पर पता चल जाएगा कि आपके Cloud Function में शुरू होने वाली देरी को 300 मिलीसेकंड पर मापा जाता है.

ग्राफ़ पर मौजूद हर बिंदु एक ऐसा अनुरोध है जिसके लिए आपको टाइमस्टैंप, एचटीटीपी तरीका और स्थिति, उसके लेबल, उससे जुड़ी लॉग एंट्री का लिंक, और Cloud फ़ंक्शन की ओर से किए जाने वाले बाद के किसी भी RPC कॉल जैसी ज़्यादा जानकारी दिख सकती है.

5815064fec87444b.png

अगर आप ज़ूम इन करना चाहें, तो बस ग्राफ़ पर क्लिक करें और खींचें. ट्रेस ग्राफ़ में पसंद के मुताबिक समयसीमा चुनना अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

ज़ूम आउट करने के लिए, पेज के सबसे ऊपर मौजूद ज़ूम को वापस लाएं पर क्लिक करें.

आपने एक Cloud Function डिप्लॉय किया है, इसलिए ग्राफ़ hello-monitor यूआरआई पर सिर्फ़ GET अनुरोध दिखाता है, लेकिन आप एचटीटीपी स्थिति (2XX, 3XX) या अनुरोध फ़िल्टर का इस्तेमाल करके एचटीटीपी तरीके (GET, POST, DELETE) के ज़रिए ट्रेस को फ़िल्टर कर सकते हैं.

बाईं ओर दिए गए मेन्यू में, खास जानकारी पर जाएं:

e920cfca2a50899e.png

इस खास जानकारी वाले पेज से, आपको हाल ही में हासिल किए गए ट्रेस और अन्य अहम जानकारी मिल सकती है.

ef5a45647967d275.png

यूआरआई अनुरोध फ़िल्टर, एचटीटीपी तरीके, एचटीटीपी स्टेटस, और समयसीमा के कॉम्बिनेशन के आधार पर भी कस्टम रिपोर्ट बनाई जा सकती हैं. इसकी मदद से, जनरेट की गई वैल्यू की तुलना टाइम बेसलाइन से भी की जा सकती है.

5bd34e9d13b47fb6.png

अगर ज़रूरी डेटा पॉइंट के साथ सही समयसीमाएं सेट अप की जा रही हैं, तो एक ऐसी रिपोर्ट बनाई जा सकती है जिसमें शुरुआती Cloud फ़ंक्शन और नए Cloud Function के बीच, इंतज़ार के समय में हुए अहम बदलावों को दिखाया जा रहा हो.

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

इस तरह की कस्टम रिपोर्ट का इस्तेमाल, परफ़ॉर्मेंस की समस्या का पता लगाने और सेवा स्तर के इंडिकेटर (एसएलआई) को ट्रैक करने के लिए किया जा सकता है. जैसे, असली उपयोगकर्ता के अनुरोध के लिए इंतज़ार का समय.

8. संसाधनों को सुरक्षित रखने का समय आ गया है

कोडलैब का यह सेशन खत्म होता है!

Cloud Functions और Stackdriver टूल, सर्वर-रहित प्लैटफ़ॉर्म हैं, जिनका इस्तेमाल न किए जाने पर शुल्क नहीं लिया जाता है, फिर भी एक अच्छे क्लाउड नागरिक बनें और अपने Cloud Function को मिटा दें. इसके लिए, Cloud Functions में जाकर, खास जानकारी में जाकर hello-monitor को चुनें. इसके बाद, मिटाएं पर क्लिक करें.

aceb633cf70a4a27.png

9. आगे क्या करना है?

यहां इससे जुड़ी कुछ और जानकारी दी गई है:

/