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

1. परिचय

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

5815064fec87444b.png

आपको एचटीटीपी ट्रिगर किए गए Cloud Functions का इस्तेमाल करना होगा. हालांकि, आपने जो भी सीखा है वह अन्य भाषाओं और अन्य इवेंट से ट्रिगर किए गए 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 के नए उपयोगकर्ता, मुफ़्त में आज़माने के लिए 300 डॉलर के प्रोग्राम में शामिल हो सकते हैं.

Cloud Shell

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01A

Screen Shot 2017-06-14 at 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 फ़ंक्शन डिप्लॉय करना

मॉनिटर करने के लिए, "Hello, World" Cloud फ़ंक्शन बनाएं. Google Cloud Console के बाईं ओर मौजूद मेन्यू में, Cloud Functions पर क्लिक करें. इसके बाद, Create Function पर क्लिक करें.

3c13aa20af602aa7.png

अपनी नई Cloud फ़ंक्शन का नाम "hello-monitor" डालें.

fa6816c96d6d5b94.png

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

7aadf164450484e.png

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

dc74cd21000d6c91.png

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

5363a34eb001d5ed.png

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

Cloud Functions को डिप्लॉय करने के बाद, कमांड लाइन से इसकी जांच करें.

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

$ gcloud functions describe hello-monitor

इससे Cloud Function का ब्यौरा मिलता है. इसमें httpsTrigger का यूआरएल भी शामिल होता है. यह Cloud Function को शुरू करने के लिए एचटीटीपी(एस) एंडपॉइंट होता है. यह ऐसा दिखना चाहिए: 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 फ़ंक्शन पर कुछ ट्रैफ़िक भेजने के लिए, यहां दिए गए निर्देश का इस्तेमाल करें. इससे कुछ मिनटों तक हर सेकंड में पांच अनुरोध भेजे जा सकेंगे:

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

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

Cloud Functions की जानकारी वाले पेज पर, लॉग देखें पर क्लिक करें.

b24157fd3376e6a8.png

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

5a36fa75d2fb0165.png

आपकी Cloud Function को किए गए सभी अनुरोधों के लिए, 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. node-emoji मॉड्यूल का इस्तेमाल करने के लिए, फ़ंक्शन कोड को अपडेट करें और कुछ समय के लिए इंतज़ार करें.
  3. Cloud Functions के लिए Stackdriver Trace चालू करने के लिए, एनवायरमेंट वैरिएबल जोड़ें.

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

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

इससे Cloud Function के जवाब में एक रैंडम इमोजी जुड़ जाता है. हालांकि, ऐसा 300 मिलीसेकंड के बाद होता है.

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

9205bd277b76aa21.png

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

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

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

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

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

बाईं ओर मौजूद मेन्यू का इस्तेमाल करके, ट्रेस की सूची पर जाएं. यह Stackdriver Trace में मौजूद है.

576373f38cad6f8.png

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

44a36b758b49f88f.png

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

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

5815064fec87444b.png

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

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

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

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

e920cfca2a50899e.png

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

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png

2e7b1ebf2f0a2b4f.png

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

8. संसाधन हटाने का समय

यह कोडलैब यहीं खत्म होता है!

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

aceb633cf70a4a27.png

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

यहां कुछ और जानकारी दी गई है:

/