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

1. परिचय

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

5815064fec87444b.png

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

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

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

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

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZwci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

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

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

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

Cloud Shell

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

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

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

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1CYaE11jdpSTYNNIYARe01AScreen 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 Function को ट्रिगर करना उतना ही आसान होना चाहिए जितना उस यूआरएल पर 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 Functions के जवाब में एक रैंडम इमोजी जुड़ जाता है. हालांकि, ऐसा 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 यूआरआई पर किए गए hello-monitor अनुरोध दिख रहे हैं. हालांकि, एचटीटीपी स्टेटस (2XX, 3XX) या अनुरोध फ़िल्टर का इस्तेमाल करके, एचटीटीपी तरीके (GET, POST, DELETE) के हिसाब से ट्रेस फ़िल्टर किए जा सकते हैं.

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

e920cfca2a50899e.png

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

ef5a45647967d275.png

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

5bd34e9d13b47fb6.png

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

2cc0e9a3212b91bb.png2e7b1ebf2f0a2b4f.png

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

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

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

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

aceb633cf70a4a27.png

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

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

/