नेमस्पेस क्या हैं?
ऐपसिग्नल-मॉनिटर किए गए एप्लिकेशन में जो कुछ भी होता है वह नामस्थान के तहत लॉग होता है। नेमस्पेस फोल्डर की तरह काम करते हैं, इवेंट्स, इश्यूज और मॉनिटरिंग डेटा को मैनेज करने योग्य टुकड़ों में बांटते हैं।
डिफ़ॉल्ट रूप से, प्रत्येक एप्लिकेशन तीन डिफ़ॉल्ट नामस्थानों से शुरू होता है:web
, background
, और frontend
।
- वेब नेमस्पेस आपके सभी HTTP अनुरोधों को रखता है। रेल या सिनात्रा जैसे एमवीसी-उन्मुख ढांचे में, इसमें नियंत्रक क्रियाएं शामिल हैं।
- पृष्ठभूमि नेमस्पेस पृष्ठभूमि नौकरियों, पुस्तकालयों और कार्यों से गतिविधि रखता है।
- फ्रंटएंड नेमस्पेस, JavaScript एकीकरण के लिए AppSignal द्वारा भेजे गए ईवेंट को लॉग करता है।
ऐपसिग्नल बिल्ट-इन प्रति-एप्लिकेशन और प्रति-एकीकरण नियमों का उपयोग करके आने वाली घटनाओं को मैप करता है। हालांकि, आप इन मैपिंग को किसी भी समय बदल सकते हैं और यहां तक कि अपनी एप्लिकेशन संरचना को मॉडल करने के लिए नए नामस्थान भी बना सकते हैं।
रूबी में नेमस्पेस आज़माना
आइए रूबी ऑन रेल्स (आरओआर) एप्लिकेशन पर नेमस्पेस आज़माएं। rails new
. के साथ एक नया रेल प्रोजेक्ट बनाने के बाद और रेल एकीकरण की स्थापना, आपको web
. मिलेगा आपके डैशबोर्ड में नेमस्पेस.
ऐपसिग्नल किसी भी नियंत्रक से लेनदेन प्राप्त करते ही नाम स्थान दिखाता है।
शेष डिफ़ॉल्ट नामस्थान तब तक प्रकट नहीं होंगे जब तक उनमें कुछ गतिविधि न हो। आइए चीजों को और दिलचस्प बनाने के लिए बैकग्राउंड नेमस्पेस में कुछ जोड़ें। प्रोजेक्ट में साइडकीक को जोड़ने के बाद डैशबोर्ड इस तरह दिखता है (उदाहरण रिपॉजिटरी में कोड की जांच करें)।
ऐपसिग्नल बैकग्राउंड नेमस्पेस को एक्शन असाइन करता है क्योंकि यह साइडकीक को जॉब प्रोसेसर के रूप में पहचानता है। AppSignal वहां मौजूद अधिकांश लोकप्रिय पृष्ठभूमि प्रोसेसर के साथ एकीकृत हो जाता है, लेकिन यदि आपका छोड़ दिया जाता है, तो आप हमेशा अपने काम में मैन्युअल रूप से इंस्ट्रूमेंटेशन जोड़ सकते हैं।
कस्टम नाम स्थान बनाना
बड़े अखंड अनुप्रयोगों पर, डिफ़ॉल्ट नामस्थान बहुत सामान्य महसूस कर सकते हैं। एक बड़ी वेबसाइट आमतौर पर अन्य वेब सेवाओं के बीच स्थिर सामग्री, गतिशील पृष्ठ, एपीआई समापन बिंदु प्रदान करती है। इनमें से अधिकांश 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")
# worker code ...
end
end
एक बार जब हमने यह परिवर्तन कर दिया और ऐप को फिर से शुरू कर दिया, तो ये नई नौकरियां नए बनाए गए नाम स्थान में दिखाई देंगी:
हम पुष्टि कर सकते हैं कि वास्तविक कार्य को डैशबोर्ड में कार्रवाई के नाम की जांच करके लॉग किया गया है:
कस्टम नाम स्थान सभी एकीकरणों में भी काम करते हैं।
नामस्थानों को अनदेखा करना
कस्टम नेमस्पेस का एक अन्य लाभ यह है कि वे हमें एप्लिकेशन के उन हिस्सों की घटनाओं की अवहेलना करने देते हैं जिनकी हम परवाह नहीं करते हैं। उदाहरण के लिए, हम admin_panel
. की घटनाओं को अनदेखा करना चुन सकते हैं पूरी तरह से।
किसी नाम स्थान को नज़रअंदाज़ करने में तीन चरण लगते हैं:
- उन हिस्सों को असाइन करें जिन्हें हम एक कस्टम नेमस्पेस पर मॉनिटर नहीं करना चाहते हैं।
- नाम स्थान को अनदेखा करने के लिए एकीकरण को कॉन्फ़िगर करें।
- अपना ऐप रीस्टार्ट करें।
रूबी के लिए, AppSignal कॉन्फ़िग फ़ाइल में इग्नोर_नामस्पेस विकल्प जोड़ें:
production:
ignore_namespaces:
- "admin_panel"
नेमस्पेस को अनदेखा करने से सभी लेन-देन और स्रोत पर डेटा की अवधि समाप्त हो जाती है। कस्टम मीट्रिक डेटा अभी भी रिपोर्ट किया जाता है।
अमृत और जावास्क्रिप्ट एकीकरण में समान विकल्प हैं। अधिक विवरण के लिए अनदेखी नामस्थान मार्गदर्शिका देखें।
अखंड अनुप्रयोगों के लिए नामस्थान
अब जबकि हम जानते हैं कि नेमस्पेस कैसे काम करता है, आइए कुछ तरीकों की जांच करें जिनका उपयोग हम एक मोनोलिथिक एप्लिकेशन को विभाजित करने के लिए कर सकते हैं।
जबकि कोई निर्धारित नियम नहीं हैं, विभाजन दो रणनीतियों तक उबाल जाता है। आप उनमें से एक या दोनों के मिश्रण को शुरुआती बिंदु के रूप में चुन सकते हैं:
- भूमिका के अनुसार :हम परियोजना के भीतर कार्यात्मक या तार्किक इकाइयों को नाम स्थान प्रदान करते हैं। इस प्रकार, हमें
billing
. जैसे नामस्थानों को परिभाषित करने में समझदारी हो सकती है ,sign_in
याsign_up
,admin_panel
, औरhomepage
. AppSigal डैशबोर्ड पर एक नज़र और आप समझ जाएंगे कि एप्लिकेशन के प्रत्येक भाग में क्या हो रहा है। यह दृष्टिकोण तब अच्छा काम करता है जब कोड को स्पष्ट सीमाओं द्वारा अच्छी तरह से तोड़ा जा सकता है। - गंभीरता से :यहां हम नेमस्पेस को प्राथमिकता देने वाले उपकरण के रूप में उपयोग करते हैं। कोड के कौन से हिस्से
critical
हैं, यह आप पर निर्भर करता है ,critical
,medium
, याlow
. यह दृष्टिकोण आपको तुरंत उन समस्याओं को हल करने देता है जिन्हें आप पहले संबोधित करना चाहते हैं।
मान लीजिए कि हमारे पास एक नियंत्रक है जो उपयोगकर्ता साइन इन और पंजीकरण को संभालता है। भूमिका के आधार पर विभाजन चुनते समय, हम उन्हें user_login
. पर मैप कर सकते हैं नाम स्थान।
# in Rails we use before_action callback to change
# the namespace before the request starts
class LoginController < ApplicationController
before_action :set_appsignal_namespace
def set_appsignal_namespace
# Sets the namespace
Appsignal.set_namespace("user_login")
end
# controller actions ...
end
लेकिन यदि आप प्राथमिकता वाले नामस्थानों का उपयोग करना पसंद करते हैं, तो बिलिंग का प्रभारी नियंत्रक संभवत:critical
में जाएगा नाम स्थान।
class BillingPageController < ApplicationController
before_action :set_appsignal_namespace
def set_appsignal_namespace
Appsignal.set_namespace("critical")
end
end
इनसे प्राप्त होने वाले नियंत्रक अपने माता-पिता के समान नाम स्थान साझा करते हैं:
# any controllers that inherit from LoginController
# are also part of the "user_login" namespace
class RegistrationController < LoginController
# there’s no need for before_action here
# this controller already reports to the parent’s namespace
end
जैसा कि हमने देखा, कार्य और कार्य स्वचालित रूप से background
. को सौंपे जाते हैं नाम स्थान। जब भी संभव हो, हमें उन्हें और अधिक विशिष्ट में निर्दिष्ट करना चाहिए। उदाहरण के लिए, एक डेटाबेस क्लीनअप कार्य database
. में जा सकता है नाम स्थान, इस तरह:
class ActiveJobDatabaseCleanupJob < ActiveJob::Base
queue_as :default
def perform(argument = nil, options = {})
Appsignal.set_namespace("database")
प्राथमिकताएं नौकरियों के लिए भी काम करती हैं। हम महत्वहीन कार्यों को low
. पर असाइन कर सकते हैं उदाहरण के लिए, जैसा कि इस रेक कार्य में है:
task :unimportant_job do
# Run this rake job in the low namespace
Appsignal.set_namespace("low")
# job code ...
end
कुछ मामलों में, आप मैन्युअल लेन-देन का उपयोग करके क्रियाओं को लॉग करना चाहेंगे। आप नाम स्थान को बनाते समय परिभाषित कर सकते हैं, जैसे निम्न उदाहरण में, जो एक कस्टम मेलर कार्य को कोड करता है:
class Job
def perform
# Create a transaction for this job and set the namespace
transaction = Appsignal::Transaction.create(
SecureRandom.uuid,
"mailer",
Appsignal::Transaction::GenericRequest.new(ENV.to_hash)
)
# job code ...
end
end
नामस्थान और सूचनाएं
टीम में सभी को हर समस्या के बारे में सूचित करने की आवश्यकता नहीं है। फ्रंटएंड विशेषज्ञ बैकएंड डेवलपर्स की तरह पृष्ठभूमि की नौकरियों की परवाह नहीं करते हैं। फिर भी, वे जानना चाह सकते हैं कि बैकएंड में कब कोई समस्या है। बैकएंड डेवलपर्स निश्चित रूप से web
. पर प्रदर्शन के मुद्दों के बारे में अधिसूचित होना पसंद करेंगे नाम स्थान। नेमस्पेस हमें सूचनाओं को सही लोगों तक पहुंचाने देता है।
प्रति-नेमस्पेस नोटिफ़ायर सेट करना
हम अधिसूचना समूह बना सकते हैं जो केवल विशिष्ट नामस्थानों के लिए सक्रिय हैं। उदाहरण के लिए, हम web
. में त्रुटियों के लिए ईमेल भेज सकते हैं नाम स्थान, या frontend
. में समस्याओं के लिए #frontend Slack चैनल में संदेश भेजें नाम स्थान।
प्रति-नाम स्थान सूचना समूह बनाने के लिए, ऐप सेटिंग> सूचनाएं> नोटिफ़ायर पर जाएं और एकीकरण जोड़ें पर क्लिक करें ।
किसी एक एकीकरण का चयन करें और उसका नाम लिखें। चुनें कि किस प्रकार के संदेश भेजने हैं और किस नामस्थान के लिए। उदाहरण के लिए, आइए #frontend
. के लिए एक स्लैक नोटिफिकेशन बनाएं चैनल।
जब तक हम यहां हैं, बैकएंड डेवलपर के लिए दूसरी सूचना बनाएं:
जो कुछ भी हो रहा है, उसके साथ टीम को अप टू डेट रखने के लिए आप जितने चाहें उतने नोटिफ़ायर कॉन्फ़िगर कर सकते हैं।
प्रति-नेमस्पेस नोटिफिकेशन बदलना
जब कोई घटना बनती है, तो AppSignal एक अधिसूचना नीति लागू करेगा। यह नीति उस नाम स्थान पर आधारित है जिससे त्रुटि आई है। हम प्रत्येक नाम स्थान के लिए अलग नीतियों को परिभाषित कर सकते हैं।
अपने एप्लिकेशन के लिए नेमस्पेस डिफॉल्ट्स देखने के लिए, ऐप सेटिंग> नोटिफिकेशन> नेमस्पेस डिफॉल्ट्स पर जाएं। ।
यहां, आपको प्रत्येक नाम स्थान के लिए त्रुटि और प्रदर्शन सूचनाओं को अनुकूलित करने के विकल्प मिलेंगे:
- हर घटना :5 मिनट के कूलडाउन के साथ हर बार कोई घटना होने पर सूचनाएं भेजता है।
- पहले तैनाती पर :आपको एप्लिकेशन को परिनियोजित करने के बाद पहली त्रुटि के बारे में सूचित करता है।
- पहले बंद करने के बाद :किसी बंद मुद्दे को पहली बार फिर से खोलने पर सूचना भेजता है।
- कभी सूचित न करें :सूचनाओं को पूरी तरह से निष्क्रिय कर देता है।
प्रति-नेमस्पेस ट्रिगर बनाना
ट्रिगर ऐपसिग्नल को एक घटना बनाने और किसी मीट्रिक के पूर्वनिर्धारित मान के ऊपर या नीचे जाने पर सूचनाएं भेजने के लिए कहते हैं। चूंकि किसी एप्लिकेशन के अलग-अलग हिस्सों में अलग-अलग थ्रेसहोल्ड हो सकते हैं, इसलिए हमें प्रत्येक नेमस्पेस के लिए अलग-अलग ट्रिगर्स बनाना चाहिए। क्लासिक उदाहरण एक ट्रिगर है जो web
. में थ्रूपुट बहुत कम होने पर हमें सचेत करता है नाम स्थान।
ट्रिगर बनाने के लिए, विसंगति का पता लगाना> ट्रिगर पर जाएं और अपना पहला ट्रिगर जोड़ें पर क्लिक करें। ।
बाएं मेनू पर एक क्रिया ट्रिगर प्रकार चुनें और प्रासंगिक नामस्थान चुनें। फिर, अलर्ट को ट्रिगर करने वाली थ्रेशोल्ड सेट करें।
यहां आप यह भी परिभाषित कर सकते हैं कि किन समूहों को अधिसूचित किया जाना चाहिए। अंतिम रूप देने के लिए, ट्रिगर सहेजें . पर क्लिक करें ।
निष्कर्ष
नेमस्पेस आपके एप्लिकेशन के मॉनिटरिंग डेटा को समझने देता है। वे सूक्ष्म स्तर पर सूचनाओं और घटनाओं को सक्रिय करने, शोर को सीमित करने और झूठी सकारात्मकता से बचने के लिए भी अपरिहार्य हैं।
रूबी, Node.js और Elixir पर कस्टम नेमस्पेस कैसे काम करते हैं, इसकी जाँच करने के बाद, नेमस्पेस का उपयोग करना सीखना जारी रखने के लिए इन्हें आगे पढ़ें:
- AppSignal में नेमस्पेस
- नामस्थानों के साथ समूह बनाना
- वेबहुक और बैकग्राउंड जॉब की निगरानी में क्या अंतर है
- जेम 2.2 - कस्टम नेमस्पेस!