सूचनाएं: Pub/Sub विषयों के लॉग-आधारित गड़बड़ियां

1. परिचय

पिछली बार अपडेट किए जाने की तारीख: 21 जून, 2023

उपलब्धता की जानकारी के लिए, लॉग के हिसाब से होने वाली गड़बड़ियों के बारे में सूचना देना

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

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

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

चेतावनी की सूचना देने वाले चैनल के तौर पर Pub/Sub विषयों की जानकारी

Pub/Sub सदस्यता को सूचनाएं भेजने के लिए, किसी Pub/Sub विषय का इस्तेमाल Google Cloud निगरानी के सूचना चैनल के तौर पर किया जा सकता है. इससे आपको क्लाउड मॉनिटरिंग से मिलने वाली सूचनाओं को अन्य सिस्टम के साथ इंटिग्रेट करने में मदद मिलती है. इनमें तीसरे पक्ष की सूचना सेवाएं भी शामिल हैं.

किसी Pub/Sub विषय का इस्तेमाल सूचना चैनल के तौर पर करने के लिए, आपको सबसे पहले एक Pub/Sub विषय और एक Pub/Sub सदस्यता बनानी होगी. इसके बाद, आपको क्लाउड निगरानी की सुविधा की सूचना का एक ऐसा चैनल बनाना होगा जो डेस्टिनेशन के तौर पर Pub/Sub विषय का इस्तेमाल करता हो.

कोई चेतावनी ट्रिगर होने पर, Cloud मॉनिटर, Pub/Sub विषय पर एक मैसेज भेजेगा. इसके बाद, Pub/Sub सदस्यता का सदस्य मैसेज को प्रोसेस कर सकता है और ज़रूरी कार्रवाई कर सकता है.

आपको क्या बनाना होगा

इस कोडलैब में, एक ऐप्लिकेशन डिप्लॉय किया जाएगा, Pub/Sub विषय बनाया जाएगा, और लॉग के हिसाब से सूचना बनाई जाएगी. यह सूचना, ऐप्लिकेशन के किसी खास हिस्से में गड़बड़ियों की जांच करेगी और Pub/Sub विषय का इस्तेमाल सूचना चैनल के तौर पर करेगी.

आपको इनके बारे में जानकारी मिलेगी

  • Pub/Sub के लिए विषय बनाने का तरीका
  • लॉग-आधारित सूचना बनाने का तरीका

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

आपको इन चीज़ों की ज़रूरत होगी

  • आपके पास ऐसा Google Cloud खाता होना चाहिए जिसके पास ये अनुमतियां हों:
  • क्लाउड रन ऐप्लिकेशन डिप्लॉय करें
  • Pub/Sub विषय बनाना
  • सूचनाएं बनाएं

2. सेट अप किया जा रहा है

Google Cloud प्रोजेक्ट चुनना या बनाना

किसी मौजूदा प्रोजेक्ट को चुनने के लिए, ड्रॉपडाउन का इस्तेमाल करें:

b35bf95b8bf3d5d8.png

Google Cloud में नया प्रोजेक्ट बनाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Platform Console पर जाएं.
  2. प्रोजेक्ट बनाएं बटन पर क्लिक करें.
  3. अपने प्रोजेक्ट का नाम डालें.
  4. अपने प्रोजेक्ट के लिए कोई बिलिंग खाता चुनें.
  5. बनाएं बटन पर क्लिक करें.

आपका प्रोजेक्ट बनाया जाएगा और आपको प्रोजेक्ट के डैशबोर्ड पर ले जाया जाएगा. यहां से, Google Cloud की सेवाओं का इस्तेमाल किया जा सकता है.

यहां हर चरण के बारे में अतिरिक्त जानकारी दी गई है:

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

ज़्यादा जानकारी के लिए, कृपया प्रोजेक्ट बनाने से जुड़ा Google Cloud का दस्तावेज़ देखें.

3. एपीआई ऐप्लिकेशन डिप्लॉय करें

सैंपल ऐप्लिकेशन या एपीआई किस बारे में है?

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

एपीआई को डिप्लॉय करने और यह मानने के बाद कि उसे https://<somehost> पर होस्ट किया गया है, हम एपीआई एंडपॉइंट को इस तरह ऐक्सेस कर सकते हैं:

https://<somehost>/inventory

इससे वे सभी प्रॉडक्ट आइटम लिस्ट हो जाएंगे जो इन्वेंट्री लेवल पर होंगे.

https://<somehost>/inventory/{productid}

इससे उस प्रॉडक्ट के लिए productid और उस प्रॉडक्ट की इन्वेंट्री के लेवल पर, एक ही रिकॉर्ड मिलेगा.

रिस्पॉन्स के तौर पर मिलने वाला डेटा, JSON फ़ॉर्मैट में होता है.

ध्यान दें: यह एपीआई ऐप्लिकेशन सिर्फ़ डेमो के लिए है. यह एपीआई को सुरक्षित और बेहतर तरीके से लागू नहीं करता. इसका मकसद लैब के मुख्य मकसद को एक्सप्लोर करने के लिए, हमें एक ऐप्लिकेशन उपलब्ध कराना है. जैसे, Google Cloud Operations.

सैंपल डेटा और एपीआई अनुरोध/जवाब

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

प्रॉडक्ट आईडी

ऑन-हैंड इन्वेंट्री लेवल

I-1

10

I-2

20

I-3

30

एपीआई अनुरोध और उसके रिस्पॉन्स का उदाहरण नीचे दिया गया है:

एपीआई अनुरोध

एपीआई से मिला रिस्पॉन्स

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

डेटा स्टोर करने की जगह का क्लोन बनाएं

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

GCP कंसोल में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:

bce75f34b2c53987.png

प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:

f6ef2b5f13479f3a.png

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

gcloud सेट अप करें

क्लाउड शेल में अपना प्रोजेक्ट आईडी सेट करें और उसे PROJECT_ID वैरिएबल के रूप में सेव करें.

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

अब, नीचे दिए गए निर्देश को एक्ज़ीक्यूट करें:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

इससे इस फ़ोल्डर में, cloud-code-sample-repository नाम से एक फ़ोल्डर बन जाएगा.

(ज़रूरी नहीं) Cloud Shell पर ऐप्लिकेशन चलाएं

आप इन चरणों का पालन करके ऐप्लिकेशन को स्थानीय तौर पर चला सकते हैं:

  1. टर्मिनल से, नीचे दिए गए कमांड की मदद से एपीआई के Python वर्शन पर जाएं:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. टर्मिनल में, यह निर्देश दें (लिखते समय, Cloud Shell के साथ Python 3.9.x इंस्टॉल होना चाहिए और हम डिफ़ॉल्ट वर्शन का इस्तेमाल करेंगे. अगर आपको इसे अपने लैपटॉप पर स्थानीय तौर पर चलाना है, तो Python 3.8+ का इस्तेमाल करें) :

$ python app.py

  1. Python सर्वर को स्थानीय तौर पर शुरू करने के लिए, यहां दिया गया कमांड चलाएं.

1f798fbddfdc2c8e.png 46edf454cc70c5a6.png

पोर्ट 8080 पर 'झलक देखें' पर क्लिक करें. 5. इससे एक ब्राउज़र विंडो खुल जाएगी. आपको 404 कोड वाली गड़बड़ी दिखेगी. यूआरएल में बदलाव करें और इसे बदल कर होस्ट नाम के बाद बस /inventory डालें.

उदाहरण के लिए मेरी मशीन पर, यह इस तरह दिखता है:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

इससे इन्वेंट्री आइटम की सूची दिखेगी, जैसा कि पहले बताया गया है:

709d57ee2f0137e4.png

  1. अब आप टर्मिनल पर जाकर और Ctrl-C दबाकर सर्वर को बंद कर सकते हैं

ऐप्लिकेशन को डिप्लॉय करना

अब हम इस एपीआई ऐप्लिकेशन को Cloud Run पर डिप्लॉय करेंगे. Cloud Run में कोड को डिप्लॉय करने के लिए, कमांड चलाने के लिए gcloud कमांड लाइन क्लाइंट का इस्तेमाल करना इस प्रक्रिया में शामिल है.

टर्मिनल से, नीचे दिया गया gcloud निर्देश दें:

$ gcloud run deploy --source .

इसमें आपसे कई सवाल पूछे जाएंगे और कुछ बातों के बारे में नीचे बताया गया है:

  1. सेवा का नाम (Python-flask-api): या तो इस डिफ़ॉल्ट सेवा का इस्तेमाल करें या my-inventory-api जैसा कुछ चुनें
  2. प्रोजेक्ट पर एपीआई [run.googleapis.com] चालू नहीं है [613162942481]. क्या आपको इसे चालू करके, फिर से कोशिश करनी है (इसमें कुछ मिनट लगेंगे)? (हां/नहीं)? Y
  3. कृपया देश या इलाके की जानकारी दें: 31 चुनें (us-west-1)
  4. प्रोजेक्ट पर एपीआई [artifactregistry.googleapis.com] चालू नहीं है [613162942481]. क्या आपको इसे चालू करके, फिर से कोशिश करनी है (इसमें कुछ मिनट लगेंगे)? (हां/नहीं)? Y
  5. बनाए गए कंटेनर को स्टोर से डिप्लॉय करने के लिए, Artifact Registry Docker डेटा स्टोर करने की जगह की ज़रूरत होती है. [us-west1] क्षेत्र में [cloud-run-source-deploy] नाम की एक रिपॉज़िटरी बनाई जाएगी.
  6. क्या आपको जारी रखना है (हां/नहीं)? Y
  7. [my-inventory-api] (y/N) में, बिना पुष्टि वाले अनुरोध भेजने की अनुमति देनी है? Y

आखिर में, इससे आपका सोर्स कोड लेने, उसे कंटेनर में रखने, और उसे Artifact Registry में भेजने की प्रोसेस शुरू हो जाएगी. इसके बाद, Cloud Run सेवा + वर्शन को डिप्लॉय किया जाएगा. इस प्रोसेस को पूरा करने के लिए आपको थोड़ा इंतज़ार करना होगा. इसमें तीन से चार मिनट लग सकते हैं. आपको दिखाए गए 'सेवा का यूआरएल' सुविधा की मदद से, प्रोसेस पूरी होती जाएगी.

दौड़ का सैंपल नीचे दिखाया गया है:

87ba8dbf88e8cfa4.png

ऐप्लिकेशन की जांच करें

अब हमने ऐप्लिकेशन को Cloud Run पर डिप्लॉय कर दिया है, इसलिए एपीआई ऐप्लिकेशन को इस तरह ऐक्सेस किया जा सकता है:

  1. पिछले चरण में दिए गए सेवा यूआरएल को नोट करें. उदाहरण के लिए, मेरे सेटअप पर, यह https://my-inventory-api-bt2r5243dq-uw.a.run.app के तौर पर दिखता है. चलिए, इसे <SERVICE_URL> नाम देते हैं.
  2. ब्राउज़र खोलें और एपीआई एंडपॉइंट के लिए, नीचे दिए गए तीन यूआरएल ऐक्सेस करें:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

यह एपीआई अनुरोध और जवाब के सैंपल के साथ, पिछले सेक्शन में दिए गए निर्देशों के मुताबिक होनी चाहिए.

Cloud Run से सेवा की जानकारी पाना

हमने अपनी एपीआई सेवा को Cloud Run पर डिप्लॉय किया. यह बिना सर्वर वाला कंप्यूट एनवायरमेंट है. हम किसी भी समय Google Cloud कंसोल के ज़रिए, Cloud Run सेवा पर जा सकते हैं.

मुख्य मेन्यू से Cloud Run पर जाएं. इससे उन सेवाओं की सूची दिखाई देगी जो आप Cloud Run में चला रही हैं. आपको वह सेवा दिखेगी जिसे आपने अभी-अभी डिप्लॉय किया है. आपने जो नाम चुना है उसके आधार पर, आपको कुछ ऐसा दिखना चाहिए:

2633965c4bc957cc.png

जानकारी देखने के लिए, सेवा के नाम पर क्लिक करें. सैंपल की जानकारी नीचे दी गई है:

33042ae64322ce07.png

ध्यान दें कि यूआरएल, सेवा के उस यूआरएल के अलावा और कुछ नहीं है जिसे ब्राउज़र में पंच किया जा सकता है और उस Inventory API को ऐक्सेस किया जा सकता है जिसे हमने अभी-अभी डिप्लॉय किया है. मेट्रिक और अन्य जानकारी देखें.

चलिए, अब Google Cloud Operations Suite के साथ शुरुआत करते हैं.

4. सूचना की सूचना पाने के लिए, Pub/Sub विषय बनाएं

Pub/Sub विषय बनाने के लिए, Google Cloud Console में यह तरीका अपनाएं:

  1. खोज बॉक्स में Pub/Sub खोजें और Pub/Sub पर जाएं. 935028bd8f6328ef.png
  2. अगर आप पहले से विषय टैब पर नहीं हैं, तो उस पर क्लिक करें. 7fd8bf91386a88fd.png
  3. विषय बनाएं बटन पर क्लिक करें. cd9d197f9023c41b.png
  4. अपने विषय के लिए कोई ऐसा नाम डालें जिसे आसानी से पहचाना जा सके.

173f313b4a3c4934.png

  1. बनाएं बटन पर क्लिक करें. ca9a02477da21a44.png
  2. 'कॉपी करें' आइकॉन बटन का इस्तेमाल करके, विषय का नाम कॉपी करें. आपको अगले सेक्शन के लिए इसकी ज़रूरत होगी.

20848252ee83df93.png

5. गड़बड़ियों के लिए चेतावनी की नीति बनाएं

गड़बड़ी के लॉग एक्सप्लोर करना

ऐप्लिकेशन के गड़बड़ी लॉग देखने के लिए:

लॉगिंग टैब पर क्लिक करें.

ऐसा करने पर, एक लॉग इंटरफ़ेस दिखेगा. यहां ज़रूरत के हिसाब से लॉग मैसेज को फ़िल्टर करने के लिए, लॉग लेवल के साथ-साथ कई रिसॉर्स (प्रोजेक्ट, Google क्लाउड से जुड़े संसाधन, सेवा के नाम वगैरह) को खास तौर पर चुना जा सकता है या उनसे चुने हुए का निशान हटाया जा सकता है.

6605b68395185b89.png

इन्वेंट्री सेवा में कुछ अमान्य अनुरोधों को सिम्युलेट करें. इसके लिए, ऐसे प्रॉडक्ट आईडी दें जो I-1, I-2, और I-3 में से एक न हों. उदाहरण के लिए एक गलत अनुरोध है:

https://&lt;SERVICE_URL&gt;/inventory/I-999

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

गड़बड़ियों के लिए कस्टम लॉग पर आधारित सूचना की नीति बनाना

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

  1. क्वेरी बॉक्स में, ये क्वेरी पैरामीटर डालें:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~ "ऐप्लिकेशन में चेतावनी: गलत productid के लिए इन्वेंट्री अनुरोध मिला"

यह कुछ ऐसी नज़र आनी चाहिए:

f672154cfebf0051.png

  1. 'क्वेरी चलाएं' पर क्लिक करें. इसके बाद, आपको वे सभी अनुरोध दिखेंगे जिनमें यह समस्या है.

77c190e3a2fab6bf.png

  1. ऊपर दिए गए तरीके को सूचना में बदलने के लिए, क्वेरी फ़ील्ड के ठीक नीचे लॉग एक्सप्लोरर में दिखने वाले सूचना बनाएं बटन पर क्लिक करें. यह बटन दाईं ओर मौजूद है:

4cd3fcf142189376.png

  1. इससे लॉग-आधारित सूचना नीति बनाने के लिए फ़ॉर्म खुलेगा.

b82446854bad87fc.png

  1. सूचना में शामिल करने के लिए, लॉग के लिए शुरुआती क्वेरी का इस्तेमाल करें:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. सूचना की फ़्रीक्वेंसी और घटना का कुल समय सेट करें. उदाहरण के लिए, हर एक के लिए कम से कम वैल्यू का इस्तेमाल किया जा सकता है:

bb3d96448ec998a1.png

  1. आखिर में, "किसे सूचना दी जानी चाहिए?" सेक्शन के लिए. Pub/Sub सूचना के उस चैनल को चुनें जिसे आपने पहले बनाया था:

3593c48c29d4b76c.png

  1. सेव करें पर क्लिक करें. सूचना से जुड़ी नीति देखने और मैनेज करने के लिए, चेतावनी वाले पेज पर जाएं. इसके बाद, नीतियां देखें: ca08ea380fb37c91.png

6. बधाई हो

बधाई हो, आपने Pub/Sub को सूचनाएं भेजने के लिए, अपने अपटाइम चेक को कॉन्फ़िगर कर लिया है!