Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

कुशल मोनोलिथिक मॉनिटरिंग: नेमस्पेस का उपयोग करके डेटा व्यवस्थित करें

नेमस्पेस क्या हैं?

AppSignal-मॉनिटर्ड एप्लिकेशन में जो कुछ भी होता है, उसे एक नेमस्पेस के तहत लॉग किया जाता है। नेमस्पेस फोल्डर की तरह काम करते हैं, घटनाओं, मुद्दों और मॉनिटरिंग डेटा को प्रबंधनीय टुकड़ों में समूहित करते हैं।

डिफ़ॉल्ट रूप से, प्रत्येक एप्लिकेशन तीन डिफ़ॉल्ट नेमस्पेस के साथ शुरू होता है: web, background, और frontend।

  • वेब नेमस्पेस आपके सभी HTTP अनुरोधों को रखता है। रेल्स या सिनाट्रा जैसे MVC-उन्मुख फ्रेमवर्क में, इसमें कंट्रोलर एक्शन शामिल हैं।
  • बैकग्राउंड नेमस्पेस बैकग्राउंड जॉब्स, लाइब्रेरी और कार्यों से गतिविधि को रखता है।
  • फ्रंटएंड नेमस्पेस AppSignal फॉर जावास्क्रिप्ट इंटीग्रेशन द्वारा भेजे गए इवेंट्स को लॉग करता है।

AppSignal प्रति-एप्लिकेशन और प्रति-इंटीग्रेशन नियमों का उपयोग करके आने वाले इवेंट्स को मैप करता है। हालांकि, आप इन मैपिंग को किसी भी समय बदल सकते हैं और यहां तक कि अपने एप्लिकेशन संरचना को मॉडल करने के लिए नए नेमस्पेस भी बना सकते हैं।

रूबी में नेमस्पेस आज़माना

आइए रूबी ऑन रेल्स (ROR) एप्लिकेशन पर नेमस्पेस आज़माएं। rails new के साथ एक नया रेल्स प्रोजेक्ट बनाने और रेल्स इंटीग्रेशन सेट करने के बाद, आप अपने डैशबोर्ड में web नेमस्पेस पाएंगे।

AppSignal किसी भी कंट्रोलर से लेनदेन प्राप्त होते ही नेमस्पेस दिखाता है।

बाकी डिफ़ॉल्ट नेमस्पेस तब तक दिखाई नहीं देंगे जब तक उनमें कुछ गतिविधि न हो। आइए चीजों को और दिलचस्प बनाने के लिए बैकग्राउंड नेमस्पेस में कुछ जोड़ें। यह वही है जो प्रोजेक्ट में Sidekiq जोड़ने के बाद डैशबोर्ड जैसा दिखता है (उदाहरण रिपॉजिटरी में कोड देखें)।

AppSignal एक्शन को बैकग्राउंड नेमस्पेस को असाइन करता है क्योंकि यह Sidekiq को जॉब प्रोसेसर के रूप में पहचानता है। AppSignal अधिकांश लोकप्रिय बैकग्राउंड प्रोसेसर के साथ इंटीग्रेट करता है, लेकिन यदि आपका छूट गया है, तो आप हमेशा अपने जॉब्स में मैन्युअल रूप से इंस्ट्रूमेंटेशन जोड़ सकते हैं।

कस्टम नेमस्पेस बनाना

बड़े मोनोलिथिक एप्लिकेशन पर, डिफ़ॉल्ट नेमस्पेस बहुत सामान्य महसूस हो सकते हैं। एक बड़ी वेबसाइट आमतौर पर स्थिर सामग्री, डायनामिक पेज, API एंडपॉइंट, अन्य वेब सेवाओं के बीच सेवा देती है। इसमें से अधिकांश web नेमस्पेस पर समाप्त हो जाएगी।

साथ ही, एप्लिकेशन के प्रत्येक भाग की एक अलग प्राथमिकता होती है। लॉगिन पेज में एक समस्या आंतरिक प्रशासन पैनल में एक समस्या की तुलना में बहुत अधिक जरूरी है। फिर भी AppSignal एक नेमस्पेस के भीतर सभी मुद्दों को समान मानता है। जब बहुत अधिक गतिविधि होती है, तो सबसे महत्वपूर्ण मुद्दों की पहचान करना कठिन हो सकता है।

इसलिए, हमें प्राथमिकता और जिम्मेदारी के क्षेत्रों द्वारा नेमस्पेस को व्यवस्थित करना चाहिए। फिर हम अलग-अलग अधिसूचना नीतियां संलग्न कर सकते हैं और केवल इच्छुक पक्षों को सतर्क कर सकते हैं। इस तर्क का पालन करते हुए, हम login_page, api_endpoints, और admin_panel के लिए कस्टम नेमस्पेस बना सकते हैं।

रूबी में एक नया नेमस्पेस बनाने के लिए, हम Appsignal.set_namespace का उपयोग करेंगे। निम्न कोड पर एक नज़र डालें, जो urgent_background नामक नेमस्पेस में एक जॉब बनाता है:

class FetchPricesWorker include Sidekiq::Worker def perform Appsignal.set_namespace("urgent_background") # वर्कर कोड ... end end

एक बार जब हमने यह परिवर्तन किया और ऐप को पुनरारंभ किया, तो ये नए जॉब नव-निर्मित नेमस्पेस में दिखाई देंगे:

हम डैशबोर्ड में एक्शन नाम की जांच करके पुष्टि कर सकते हैं कि वास्तविक जॉब लॉग किया गया है:

कस्टम नेमस्पेस सभी इंटीग्रेशन में भी काम करते हैं।

नेमस्पेस को अनदेखा करना

कस्टम नेमस्पेस का एक और लाभ यह है कि वे हमें एप्लिकेशन के उन हिस्सों से इवेंट्स को अनदेखा करने देते हैं जिनकी हमें परवाह नहीं है। उदाहरण के लिए, हम admin_panel से इवेंट्स को पूरी तरह से अनदेखा करना चुन सकते हैं।

नेमस्पेस को अनदेखा करने में तीन चरण लगते हैं:

  1. उन हिस्सों को असाइन करें जिन्हें हम मॉनिटर नहीं करना चाहते हैं एक कस्टम नेमस्पेस को।
  2. नेमस्पेस को अनदेखा करने के लिए इंटीग्रेशन को कॉन्फ़िगर करें।
  3. अपने ऐप को पुनरारंभ करें।

रूबी के लिए, AppSignal कॉन्फ़िग फ़ाइल में ignore_namespaces विकल्प जोड़ें:

production: ignore_namespaces: - "admin_panel"

नेमस्पेस को अनदेखा करने से स्रोत पर सभी लेनदेन और स्पैन डेटा छोड़ दिए जाते हैं। कस्टम मीट्रिक डेटा अभी भी रिपोर्ट किया जाता है।

Elixir और जावास्क्रिप्ट इंटीग्रेशन में समान विकल्प हैं। अधिक विवरण के लिए नेमस्पेस अनदेखा करने की गाइड देखें।

मोनोलिथिक एप्लिकेशन के लिए नेमस्पेस

अब जब हम जानते हैं कि नेमस्पेस कैसे काम करते हैं, आइए कुछ तरीकों की जांच करें जिनसे हम उनका उपयोग मोनोलिथिक एप्लिकेशन को विभाजित करने के लिए कर सकते हैं।

हालांकि कोई निर्धारित नियम नहीं हैं, विभाजन दो रणनीतियों तक सीमित हो जाता है। आप उनमें से एक या दोनों के मिश्रण को प्रारंभिक बिंदु के रूप में चुन सकते हैं:

  • भूमिका के अनुसार: हम प्रोजेक्ट के भीतर कार्यात्मक या तार्किक इकाइयों को नेमस्पेस असाइन करते हैं। इस प्रकार, billing, sign_in या sign_up, admin_panel, और homepage जैसे नेमस्पेस को परिभाषित करना समझ में आ सकता है। AppSignal डैशबोर्ड पर एक नज़र और आप समझ जाएंगे कि एप्लिकेशन के प्रत्येक भाग में क्या हो रहा है। यह दृष्टिकोण तब अच्छा काम करता है जब कोड को स्पष्ट सीमाओं द्वारा अच्छी तरह से विभाजित किया जा सकता है।
  • गंभीरता के अनुसार: यहां हम नेमस्पेस का उपयोग प्राथमिकता डिवाइस के रूप में करते हैं। यह आप पर निर्भर करता है कि आप कोड के किन हिस्सों को critical, important, medium, या low के रूप में स्थापित करते हैं। यह दृष्टिकोण आपको तुरंत यह छांटने देता है कि आप पहले किन समस्याओं को संबोधित करना चाहते हैं।

मान लें कि हमारे पास कंट्रोलर हैं जो उपयोगकर्ता साइन इन और पंजीकरण को संभालते हैं। भूमिका द्वारा विभाजन चुनते समय, हम उन्हें user_login नेमस्पेस में मैप कर सकते हैं।

# रेल्स में हम रिक्वेस्ट शुरू होने से पहले # नेमस्पेस बदलने के लिए before_action कॉलबैक का उपयोग करते हैं class LoginController < ApplicationController before_action :set_appsignal_namespace def set_appsignal_namespace # नेमस्पेस सेट करता है Appsignal.set_namespace("user_login") end # कंट्रोलर एक्शन ... end

लेकिन यदि आप प्राथमिकता नेमस्पेस का उपयोग करना पसंद करते हैं, तो बिलिंग के प्रभारी कंट्रोलर शायद critical नेमस्पेस में जाएगा।

class BillingPageController < ApplicationController before_action :set_appsignal_namespace def set_appsignal_namespace Appsignal.set_namespace("critical") end end

जो कंट्रोलर इनसे विरासत में मिले हैं, वे अपने माता-पिता के समान नेमस्पेस साझा करते हैं:

# LoginController से विरासत में मिले कोई भी कंट्रोलर # "user_login" नेमस्पेस का भी हिस्सा हैं class RegistrationController < LoginController # यहां before_action की आवश्यकता नहीं है # यह कंट्रोलर पहले से ही माता-पिता के नेमस्पेस को रिपोर्ट करता है end

जैसा कि हमने देखा, जॉब्स और कार्य स्वचालित रूप से background नेमस्पेस को असाइन किए जाते हैं। जब भी संभव हो, हमें उन्हें अधिक विशिष्ट नेमस्पेस में असाइन करना चाहिए। उदाहरण के लिए, एक डेटाबेस सफाई जॉब database नेमस्पेस में जा सकता है, जैसे:

class ActiveJobDatabaseCleanupJob < ActiveJob::Base queue_as :default def perform(argument = nil, options = {}) Appsignal.set_namespace("database")

प्राथमिकताएं जॉब्स के लिए भी काम करती हैं। हम इस Rake कार्य में जैसे महत्वहीन कार्यों को low असाइन कर सकते हैं:

task :unimportant_job do # इस rake जॉब को low नेमस्पेस में चलाएं Appsignal.set_namespace("low") # जॉब कोड ... end

कुछ मामलों में, आप मैन्युअल लेनदेन का उपयोग करके एक्शन लॉग करना चाहेंगे। आप इसे बनाते समय नेमस्पेस को परिभाषित कर सकते हैं, जैसे निम्न उदाहरण में, जो एक कस्टम मेलर जॉब को कोड करता है:

class Job def perform # इस जॉब के लिए एक लेनदेन बनाएं और नेमस्पेस सेट करें transaction = Appsignal::Transaction.create( SecureRandom.uuid, "mailer", Appsignal::Transaction::GenericRequest.new(ENV.to_hash) ) # जॉब कोड ... end end

नेमस्पेस और अधिसूचनाएं

टीम में हर किसी को हर समस्या के बारे में सूचित करने की आवश्यकता नहीं है। फ्रंटएंड विशेषज्ञ बैकएंड डेवलपर्स जितना बैकग्राउंड जॉब्स की परवाह नहीं करते। फिर भी, वे जानना चाह सकते हैं कि बैकएंड में कोई समस्या कब है। बैकएंड डेवलपर्स निश्चित रूप से web नेमस्पेस पर प्रदर्शन मुद्दों के बारे में सूचित होना पसंद करेंगे। नेमस्पेस हमें सही लोगों को अधिसूचनाएं रूट करने देते हैं।

प्रति-नेमस्पेस नोटिफायर्स सेट करना

हम अधिसूचना समूह बना सकते हैं जो केवल विशिष्ट नेमस्पेस के लिए सक्रिय हैं। उदाहरण के लिए, हम web नेमस्पेस में त्रुटियों के लिए ईमेल भेज सकते हैं, या frontend नेमस्पेस में मुद्दों के लिए #frontend स्लैक चैनल में संदेश भेज सकते हैं।

प्रति-नेमस्पेस अधिसूचना समूह बनाने के लिए, ऐप सेटिंग्स > अधिसूचनाएं > नोटिफायर्स पर जाएं और इंटीग्रेशन जोड़ें पर क्लिक करें।

इंटीग्रेशन में से एक का चयन करें और उसका नाम टाइप करें। चुनें कि किस प्रकार के संदेश भेजने हैं और किस नेमस्पेस के लिए। उदाहरण के लिए, आइए #frontend चैनल के लिए एक स्लैक अधिसूचना बनाएं।

जबकि हम अभी भी यहां हैं, बैकएंड डेवलपर्स के लिए दूसरी अधिसूचना बनाएं:

आप टीम को हर उस चीज़ के साथ अद्यतन रखने के लिए आवश्यकतानुसार कई नोटिफायर्स कॉन्फ़िगर कर सकते हैं जो हो रहा है।

प्रति-नेमस्पेस अधिसूचनाएं बदलना

जब कोई घटना बनाई जाती है, तो AppSignal एक अधिसूचना नीति लागू करेगा। यह नीति उस नेमस्पेस पर आधारित होती है जिससे त्रुटि आती है। हम प्रत्येक नेमस्पेस के लिए अलग-अलग नीतियां परिभाषित कर सकते हैं।

अपने एप्लिकेशन के लिए नेमस्पेस डिफ़ॉल्ट देखने के लिए, ऐप सेटिंग्स > अधिसूचनाएं > नेमस्पेस डिफ़ॉल्ट पर जाएं।

यहां, आपको हर नेमस्पेस के लिए त्रुटि और प्रदर्शन अधिसूचनाओं को अनुकूलित करने के विकल्प मिलेंगे:

  • हर घटना: हर बार एक घटना ट्रिगर होने पर सूचनाएं भेजता है, 5 मिनट के कूलडाउन के साथ।
  • डिप्लॉय पर पहली: एप्लिकेशन डिप्लॉय करने के बाद पहली त्रुटि के बारे में सूचित करता है।
  • बंद होने के बाद पहली: एक बंद मुद्दे के फिर से खुलने पर पहली बार सूचना भेजता है।
  • कभी सूचित न करें: अधिसूचनाओं को पूरी तरह से अक्षम करता है।

प्रति-नेमस्पेस ट्रिगर बनाना

ट्रिगर AppSignal को बताते हैं कि जब कोई मीट्रिक पूर्वनिर्धारित मान से ऊपर या नीचे जाता है तो एक घटना बनाएं और सूचनाएं भेजें। चूंकि एप्लिकेशन के विभिन्न हिस्सों में अलग-अलग थ्रेशोल्ड हो सकते हैं, हमें प्रत्येक नेमस्पेस के लिए अलग-अलग ट्रिगर बनाने चाहिए। क्लासिक उदाहरण एक ट्रिगर है जो हमें अलर्ट करता है जब web नेमस्पेस में थ्रूपुट बहुत कम है।

ट्रिगर बनाने के लिए, एनोमली डिटेक्शन > ट्रिगर पर जाएं, और अपना पहला ट्रिगर जोड़ें पर क्लिक करें।

बाएं मेनू पर एक्शन ट्रिगर प्रकार का चयन करें और प्रासंगिक नेमस्पेस चुनें। फिर, उन थ्रेशोल्ड को सेट करें जो अलर्ट को ट्रिगर करते हैं।

यहां आप यह भी परिभाषित कर सकते हैं कि किन समूहों को सूचित किया जाना चाहिए। अंतिम रूप देने के लिए, ट्रिगर सहेजें पर क्लिक करें।

निष्कर्ष

नेमस्पेस आपके एप्लिकेशन के मॉनिटरिंग डेटा को समझने देते हैं। वे सूक्ष्म स्तर पर सूचनाओं और घटनाओं को फायर करने, शोर को सीमित करने और झूठी सकारात्मकताओं से बचने के लिए भी अपरिहार्य हैं।

रूबी, Node.js, और Elixir पर कस्टम नेमस्पेस कैसे काम करते हैं, यह जांचने के बाद, सीखना जारी रखने के लिए इन्हें पढ़ें कि नेमस्पेस का उपयोग कैसे करें:

  • AppSignal में नेमस्पेस
  • नेमस्पेस के साथ ग्रुपिंग
  • वेबहुक और बैकग्राउंड जॉब्स की निगरानी में क्या अंतर है
  • जेम 2.2 - कस्टम नेमस्पेस!

  1. डेटा संरचना में चेनिंग के साथ हैशिंग (Hashing with Chaining) डेटा संरचना में चेनिंग के साथ हैशिंग (Hashing with Chaining)

    इस अनुभाग में हम देखेंगे कि चेनिंग (Chaining) के साथ हैशिंग क्या है। चेनिंग टकराव समाधान (collision resolution) की एक तकनीक है। हम टकराव से बच नहीं सकते, लेकिन हम टकराव को कम करने की कोशिश कर सकते हैं, और एक ही हैश मान के लिए कई तत्वों को संग्रहीत करने का प्रयास कर सकते हैं। इस तकनीक में मान लीजिए

  1. शक्तिशाली रूबी CLI टूल्स बनाएं: चरण-दर-चरण गाइड शक्तिशाली रूबी CLI टूल्स बनाएं: चरण-दर-चरण गाइड

    बहुत से लोग भूल जाते हैं कि रूबी वेब एप्लिकेशन के अलावा भी चीजें कर सकता है। इस लेख में, मैं आपको दिखाना चाहता हूं कि इस कमी को दूर करने के लिए कमांड-लाइन एप्लिकेशन कैसे बनाया जाए! यहाँ कुछ कमांड-लाइन एप्लिकेशन हैं जिनसे आप परिचित हो सकते हैं: psql rails bundler gem git कमांड-लाइन एप्लिकेशन बनाने

  1. एक्सेल मास्टरी के लिए 7 VBA-एन्हांस्ड डेटा सत्यापन ड्रॉप-डाउन सूचियां एक्सेल मास्टरी के लिए 7 VBA-एन्हांस्ड डेटा सत्यापन ड्रॉप-डाउन सूचियां

    डेटा सत्यापन ड्रॉप-डाउन सूचियां विभिन्न एक्सेल संबंधित कार्यों को करने के लिए एक बहुत उपयोगी विशेषता है। VBA लागू करना एक्सेल में किसी भी ऑपरेशन को चलाने का सबसे प्रभावी, तेज़ और सुरक्षित तरीका है। इस लेख में, हम आपको VBA मैक्रो के साथ एक्सेल में डेटा सत्यापन ड्रॉप-डाउन सूची के 7 अलग-अलग अनुप्रयोग द