03 जुल॰ 2025·8 मिनट पढ़ने में

OpenTelemetry बनाम प्रोप्राइटरी APM एजेंट: क्या चुनें

OpenTelemetry और प्रोप्राइटरी APM एजेंट्स की तुलना — वेंडर लॉक-इन जोखिम, लॉग्स-मैट्रिक्स-ट्रेसेज़ की क्वालिटी, और डैशबोर्ड व अलर्ट बनाने की असली मेहनत।

OpenTelemetry बनाम प्रोप्राइटरी APM एजेंट: क्या चुनें

आप APM से कौन सी समस्या हल करना चाह रहे हैं?

टीमें आमतौर पर तब APM रोल आउट करती हैं जब कुछ पहले से ही दर्द दे रहा होता है: पेज धीमे हैं, यादृच्छिक एरर आ रहे हैं, या आउटेज समझने में बहुत समय लग रहा है। पहली हफ्ते में चीज़ें ठीक लग सकती हैं — आप आखिरकार ट्रेसेज़, कुछ चार्ट और एक सुंदर “service health” स्क्रीन देख पाते हैं। फिर अगला इन्सिडेंट आता है और समझने में फिर घंटे लगते हैं, अलर्ट बिना वजह बजते हैं, और लोग डैशबोर्ड पर भरोसा करना बंद कर देते हैं।

उपयोगी ऑब्ज़रवेबिलिटी का मतलब सिर्फ़ ज्यादा डेटा इकट्ठा करना नहीं है। इसका मतलब है तेज़ी से जवाब पाना, इतना संदर्भ मिलना कि आप कार्रवाई कर सकें। एक अच्छा सेटअप आपको ठीक वह फेलिंग रिक्वेस्ट ढूंढने, क्या बदला यह देखने, और पुष्टि करने में मदद करता है कि उपयोगकर्ता प्रभावित हैं या नहीं। यह फॉल्स अलार्म भी कम करता है ताकि टीम वही जवाब दे जब ज़रूरी हो।

अधिकांश समय एजेंट इंस्टॉल करने में नहीं जाता। यह कच्चे सिग्नल्स को भरोसेमंद चीज़ों में बदलने में जाता है: क्या इंस्ट्रूमेंट करना है (और क्या शोर है), किस तरह के कंसिस्टेंट टैग जैसे env और version जोड़ने हैं, टीम की सोच के अनुरूप डैशबोर्ड बनाना, अलर्ट ट्यून करना, और लोगों को यह सिखाना कि “अच्छा” कैसा दिखता है।

यहीं पर OpenTelemetry बनाम प्रोप्राइटरी APM एजेंट का चुनाव वास्तविक बनता है। एक प्रोप्राइटरी एजेंट आप तक “पहला डेटा” जल्दी ला सकता है, लेकिन अक्सर वह आपको उसी विक्रेता के नामकरण, सैंपलिंग और पैकेजिंग में धकेल देता है। महीनों बाद, जब आप नया बैकेंड जोड़ते हैं, क्लाउड बदलते हैं, या लॉग्स हैंडलिंग बदलते हैं, तो आप पाते हैं कि डैशबोर्ड और अलर्ट विक्रेता-विशिष्ट व्यवहार पर निर्भर हैं।

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

लक्ष्य “सबसे अच्छा” टूल चुनना नहीं है। लक्ष्य ऐसा तरीका चुनना है जो डिबगिंग तेज़ रखे, अलर्टिंग शांत रखे, और भविष्य के बदलाव सस्ते बनाए।

Quick definitions: OpenTelemetry और प्रोप्राइटरी एजेंट

जब लोग OpenTelemetry बनाम प्रोप्राइटरी APM एजेंट की तुलना करते हैं, तो वे दो अलग विचारों की तुलना कर रहे होते हैं: एक साझा मानक जो ऑब्ज़रवेबिलिटी डेटा इकट्ठा करने के लिए है बनाम एक पैकेज्ड, विक्रेता-स्वामित्व वाला मॉनिटरिंग स्टैक।

OpenTelemetry (अक्सर OTel कहा जाता है) एक ओपन स्टैंडर्ड और टूल्स का सेट है जो टेलीमेट्री डेटा बनाता और भेजता है। यह तीन मुख्य सिग्नल कवर करता है: ट्रेसेज़ (सर्विसेज़ के पार क्या हुआ), मैट्रिक्स (समय के साथ सिस्टम कैसा बर्ताव कर रहा है), और लॉग्स (किसी समय पर सिस्टम ने क्या कहा)। मुख्य बात यह है कि OpenTelemetry कोई एकल मॉनिटरिंग विक्रेता नहीं है। यह सिग्नल्स जनरेट और मूव करने का एक सामान्य तरीका है ताकि आप चुन सकें कि वे कहाँ जाएँ।

एक प्रोप्राइटरी APM एजेंट वह विक्रेता-विशिष्ट लाइब्रेरी या प्रोसेस है जिसे आप अपने ऐप में (या होस्ट पर) इंस्टॉल करते हैं। यह डेटा उस फ़ॉर्मैट में इकट्ठा करता जिसकी वह विक्रेता उम्मीद करता है, और आमतौर पर यह तब सबसे अच्छा काम करता है जब आप उसी विक्रेता का बैकेंड, डैशबोर्ड और अलर्टिंग भी उपयोग करते हैं।

कलेक्टर्स, गेटवे और बैकेंड (साधारण शब्दों में)

ज़्यादातर टेलीमेट्री पाइपलाइन्स के तीन हिस्से होते हैं:

  • इंस्ट्रूमेंटेशन: कोड या एजेंट जो ट्रेसेज़, मैट्रिक्स और लॉग्स बनाता है।
  • कलेक्टर (या गेटवे): एक मध्य सेवा जो सिग्नल्स को रिसीव करता है, बैच बनाता है, फ़िल्टर करता है और फॉरवर्ड करता है।
  • बैकेंड: जहाँ डेटा स्टोर, क्वेरी और डैशबोर्ड व अलर्ट्स में बदलता है।

OpenTelemetry के साथ, कलेक्टर सामान्य होता है क्योंकि यह आपको बाद में बैकेंड बदलने देता है बिना ऐप कोड बदले। प्रोप्राइटरी एजेंट्स में कलेक्टर भूमिका एजेंट में बंडल हो सकती है, या डेटा सीधे विक्रेता के बैकेंड को जा सकता है।

“इंस्ट्रूमेंटेशन” वास्तव में क्या है

इंस्ट्रूमेंटेशन यह बताती है कि आपका सॉफ़्टवेयर क्या कर रहा है।

बैकेंड सेवाओं के लिए, इसका मतलब आमतौर पर SDK या ऑटो-इंस्ट्रूमेंटेशन को सक्षम करना और प्रमुख स्पैन्स का नामकरण करना (जैसे “checkout” या “login”) होता है। वेब ऐप्स के लिए, इसमें पेज लोड्स, फ्रंटएंड रिक्वेस्ट और यूज़र एक्शन्स शामिल हो सकते हैं (गोपनीयता के लिहाज़ से सावधानी से)। मोबाइल ऐप्स के लिए, यह अक्सर धीमी सcreens, नेटवर्क कॉल्स और क्रैश को कवर करता है।

यदि आप AppMaster (appmaster.io) जैसी प्लेटफ़ॉर्म पर ऐप बनाते हैं (जो Go बैकेंड, Vue3 वेब ऐप और Kotlin/SwiftUI मोबाइल ऐप जनरेट करता है), तो वही निर्णय लागू होते हैं। आपको स्कैफोल्डिंग पर कम समय खर्च करना होगा और कंसिस्टेंट नामकरण, किस इवेंट का महत्व है, और डेटा को किस बैकेंड तक रूट करना इस पर ज़्यादा समय लगेगा।

वेंडर लॉक-इन: व्यवहार में यह कैसा दिखता है

लॉक-इन आमतौर पर इस बारे में नहीं होता कि क्या आप एजेंट अनइंस्टॉल कर सकते हैं। यह उन सब चीज़ों के बारे में होता है जो आपने उसके चारों ओर बनाई हैं: डैशबोर्ड, अलर्ट्स, नामकरण के नियम, और जिस तरह आपकी टीम इन्सिडेंट्स की जांच करती है।

रोज़मर्रा में लॉक-इन कहाँ दिखता है

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

दूसरा ट्रैप है कोड और कॉन्फ़िग में कप्लिंग। OpenTelemetry भी कप्लिंग पैदा कर सकता है अगर आप विक्रेता-विशिष्ट एक्सपोर्टर्स और मेटाडेटा पर निर्भर होते हैं, पर प्रोप्राइटरी एजेंट अक्सर कस्टम APIs के साथ आगे बढ़ते हैं जैसे एरर, यूज़र सेशन्स, RUM, या डेटाबेस “एक्स्ट्राज़” के लिए। जितना अधिक आपका ऐप कोड उन APIs को कॉल करेगा, उतना ही बाद में स्विच करना रीफैक्टरिंग बन जाता है।

प्राइसिंग भी लॉक-इन पैदा कर सकती है। पैकेजिंग बदलाव, हाई-कार्डिनैलिटी प्राइसिंग, या ट्रेसेज़ बनाम लॉग्स के लिए अलग दरें लागत को उस समय बढ़ा सकती हैं जब उपयोग बढ़ता है। अगर आपकी इन्सिडेंट रिस्पॉन्स विक्रेता UI पर निर्भर है, तो नेगोशिएट करना कठिन हो जाता है।

कॉम्प्लायंस और गवर्नेंस भी महत्वपूर्ण हैं। आपको स्पष्ट उत्तर चाहिए कि डेटा कहाँ जा रहा है, कितने समय तक स्टोर होगा, और संवेदनशील फ़ील्ड्स कैसे हैंडल होंगे। मल्टी-क्लाउड सेटअप या सख्त क्षेत्रीय आवश्यकता होने पर यह ज़रूरी हो जाता है।

जो संकेत बताते हैं कि आप फंस रहे हैं:

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

एक निकास रणनीति ज्यादातर प्रारंभिक डॉक्युमेंटेशन है। अपने प्रमुख SLOs, नामकरण कन्वेंशन्स, और अलर्ट थ्रेशहोल्ड्स रिकॉर्ड करें। यह छोटी सी मैप रखें कि कौन से सिग्नल किन अलर्ट्स को पॉवर करते हैं। अगर कभी आप चले जाएँ, तो आप व्यूज़ फिर से बनाना चाहेंगे, सिस्टम को फिर से लिखना नहीं।

सिग्नल क्वालिटी: लॉग्स, मैट्रिक्स और ट्रेसेज़ की तुलना

सिग्नल क्वालिटी उपकरण पर कम और कंसिस्टेंसी पर ज़्यादा निर्भर करती है। व्यावहारिक फर्क यह है कि नियम कौन सेट करता है: एक विक्रेता एजेंट आपको “पर्याप्त अच्छे” डिफ़ॉल्ट दे सकता है, जबकि OpenTelemetry आपको नियंत्रण देता है पर उम्मीद करता है कि आप कन्वेंशन्स परिभाषित करेंगे।

लॉग्स: स्ट्रक्चर और संदर्भ

लॉग्स तब ही दबाव में टिकते हैं जब वे स्ट्रक्चर्ड हों और कंसिस्टेंट संदर्भ रखें। प्रोप्राइटरी एजेंट कभी-कभी लॉग्स को ऑटो-एनरिच करते हैं (सर्विस नाम, एनवायरनमेंट, रिक्वेस्ट ID) अगर आप उनका लॉगिंग सेटअप उपयोग करते हैं। OpenTelemetry भी यह कर सकता है, पर आपको सर्विसेज़ के बीच फ़ील्ड्स स्टैंडर्डाइज़ करनी होंगी।

एक अच्छा बेसलाइन: हर लॉग लाइन में एक trace ID (और संभव हो तो span ID), साथ में उपयुक्त होने पर यूज़र या टेनेंट पहचानकर्ता शामिल हों। अगर एक सर्विस JSON लॉग लिखती है और दूसरी सादा टेक्स्ट, तो कॉरिलेशन अनुमान लगाने जैसा हो जाता है।

मैट्रिक्स: नामकरण और कार्डिनैलिटी

मैट्रिक्स चुपचाप फेल हो जाते हैं। आप बहुत सारे चार्ट रख सकते हैं और फिर भी उस एक डायमेंशन को मिस कर सकते हैं जो इन्सिडेंट में काम आता। विक्रेता एजेंट अक्सर प्री-मेड मैट्रिक्स, स्थिर नाम और समझदार लेबल्स के साथ आते हैं। OpenTelemetry से आप वही गुणवत्ता पा सकते हैं, पर आपको टीमों में नामकरण और लेबल्स लागू करने होंगे।

दो सामान्य ट्रैप:

  • हाई-कार्डिनैलिटी लेबल्स (पूरे यूज़र IDs, ईमेल, रिक्वेस्ट पाथ्स जिनमें IDs एम्बेड हैं) जो लागत फटा देते हैं और क्वेरीज़ को धीमा कर देते हैं।
  • मिसिंग डायमेंशन्स, जैसे लेटेंसी ट्रैक करना पर उसे एंडपॉइंट या डिपेंडेंसी के हिसाब से ब्रेक न करना।

ट्रेसेज़: कवरेज, सैंपलिंग और पूर्णता

ट्रेसिंग क्वालिटी स्पैन कवरेज पर निर्भर करती है। ऑटो-इंस्ट्रूमेंटेशन (जो प्रोप्राइटरी एजेंट्स में अक्सर मजबूत होता है) बहुत कुछ जल्दी कैप्चर कर सकता है: वेब रिक्वेस्ट्स, डेटाबेस कॉल्स, और सामान्य फ्रेमवर्क्स। OpenTelemetry ऑटो-इंस्ट्रूमेंटेशन भी मजबूत हो सकता है, पर बिज़नेस स्टेप्स को पकड़ने के लिए आपको मैन्युअल स्पैन्स जोड़ने की ज़रूरत पड़ सकती है।

सैंपलिंग वह जगह है जहाँ टीमें चकित होती हैं। भारी सैंपलिंग पैसे बचाती है पर ऐसे टूटी हुई कहानियाँ छोड़ देती है जहाँ महत्वपूर्ण रिक्वेस्ट गायब होती है। एक व्यावहारिक तरीका है कि सामान्य ट्रैफ़िक सैंपल करें जबकि एरर और धीमी रिक्वेस्ट्स को उच्च दर पर रखें।

क्रॉस-सर्विस कोरिलेशन असली परीक्षण है: क्या आप एक अलर्ट से उस सटीक ट्रेस तक और उसी रिक्वेस्ट के लॉग्स तक कूद सकते हैं? यह तभी काम करता है जब propagation हेडर्स कंसिस्टेंट हों और हर सर्विस उन्हें सम्मान दे।

अगर आप बेहतर सिग्नल चाहते हैं, तो बेहतर कन्वेंशन्स से शुरू करें:

  • स्टैंडर्ड लॉग फ़ील्ड्स (trace_id, service, env, request_id)
  • मैट्रिक नाम और अनुमत लेबल्स (साथ में प्रतिबंधित हाई-कार्डिनैलिटी लेबल्स की सूची)
  • एक न्यूनतम ट्रेसिंग पॉलिसी (क्या ट्रेस होना चाहिए, और एरर्स के लिए सैंपलिंग कैसे बदलती है)
  • एनवायरनमेंट्स में कंसिस्टेंट सर्विस नामिंग
  • प्रमुख बिज़नेस वर्कफ़्लोज़ में मैनुअल स्पैन्स की योजना

प्रयास और रखरखाव: निर्णय का छिपा हुआ हिस्सा

डिप्लॉयमेंट बाद में चुनें
अपने क्लाउड पर डिप्लॉय करें या आवश्यकता बदलने पर सोर्स कोड एक्सपोर्ट करें।
ऐप बनाएं

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

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

किसी भी अप्रोच में इंस्ट्रूमेंटेशन शायद 100% ऑटोमेटिक नहीं होती। ऑटो-इंस्ट्रूमेंटेशन सामान्य फ्रेमवर्क्स को कवर करती है, पर गैप जल्दी दिखते हैं: इंटरनल क्यूज़, कस्टम मिडलवेयर, बैकग्राउंड जॉब्स, और बिज़नेस-विशिष्ट स्टेप्स। सबसे उपयोगी टेलीमेट्री आमतौर पर थोड़े से मैन्युअल काम से आती है: प्रमुख वर्कफ़्लोज़ के चारों ओर स्पैन्स जोड़ना (checkout, ticket creation, report generation) और सही एट्रिब्यूट रिकॉर्ड करना।

सर्विस नामकरण और एट्रिब्यूट्स निर्धारण करते हैं कि डैशबोर्ड उपयोगी होंगे या नहीं। अगर एक सर्विस api कहलाती है, दूसरी api-service, और तीसरी backend-prod, तो हर चार्ट पहेली बन जाता है। यही समस्या environment, region, और version टैग्स के साथ भी दिखती है।

एक व्यावहारिक नामकरण बेसलाइन:

  • हर डिप्लॉयेबल यूनिट के लिए एक स्थिर सर्विस नाम चुनें
  • environment (prod, staging, dev) और version स्टैंडर्डाइज़ करें
  • मैट्रिक लेबल्स में हाई-कार्डिनैलिटी वैल्यूज़ रखें
  • कंसिस्टेंट एरर फ़ील्ड्स का उपयोग करें (type, message, status)

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

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

चरण-दर-चरण: अपने सिस्टम में दोनों विकल्पों का आकलन कैसे करें

एक क्रिटिकल वर्कफ़्लो टेस्ट करें
एक प्रमुख यूज़र जर्नी को कार्यशील ऐप में बदलें जिसे आप end-to-end ट्रेस कर सकें।
अभी बनाएं

पहले सब कुछ इंस्ट्रूमेंट न करें। इससे पहले कि आप कुछ और सीखें, आप डेटा में डूब जाएंगे। एक निष्पक्ष तुलना एक छोटे, वास्तविक हिस्से से शुरू होती है जो उपयोगकर्ताओं की समस्याओं के अनुभव से मेल खाता हो।

एक या दो महत्वपूर्ण यूज़र जर्नी चुनें जो व्यवसाय के लिए मायने रखती हैं और जिन्हें टूटने पर आसानी से पहचाना जा सके, जैसे “यूज़र लॉग इन करता है और डैशबोर्ड लोड होता है” या “चेकआउट पूरा होता है और रिसीipt ईमेल भेजा जाता है।” ये फ्लोज़ कई सर्विसेज़ को पार करते हैं और स्पष्ट सफलता और विफलता संकेत बनाते हैं।

अधिक डेटा इकट्ठा करने से पहले, एक बेसिक सर्विस मैप और नामकरण नियमों पर सहमति बनाएं। तय करें कि सर्विस क्या मानी जाएगी, उसका नाम कैसे होगा (मानवीय-फ्रेंडली, स्थिर नाम), और आप एनवायरनमेंट्स को कैसे अलग करेंगे (prod बनाम staging)। यह एक बार की अनुशासन वही गलतियाँ पाँच अलग नामों में दिखने से रोकता है।

एक न्यूनतम एट्रिब्यूट सेट रखें ताकि आप इवेंट्स को फ़िल्टर और कनेक्ट कर सकें बिना लागत बढ़ाये: env, version, tenant (अगर मल्टी-टेनेंट), और एक रिक्वेस्ट ID (या trace ID) जिसे आप किसी एरर से कॉपी करके end-to-end फॉलो कर सकें।

एक व्यावहारिक पायलट योजना (1–2 हफ्ते)

  • 1–2 जर्नी को end-to-end इंस्ट्रूमेंट करें (फ्रंटएंड, API, DB, और 1–2 प्रमुख इंटीग्रेशन)।
  • सर्विस नामों, एंडपॉइंट्स, और प्रमुख ऑपरेशन्स के लिए नामकरण नियम लागू करें।
  • न्यूनतम एट्रिब्यूट्स से शुरू करें: env, version, tenant, और रिक्वेस्ट/trace IDs।
  • सैंपलिंग योजना तय करें: एरर और धीमी रिक्वेस्ट्स को उच्च रेट रखें; सामान्य ट्रैफ़िक को सैंपल करें।
  • दो चीज़ें मापें: time-to-diagnosis और alert noise (ऐसे अलर्ट जो actionable नहीं थे)।

यदि आप एक्सपोर्ट करते हैं और जनरेट किया हुआ सोर्स कोड चलाते हैं (उदाहरण के लिए AppMaster से एक Go बैकेंड और वेब ऐप), तो उसे पायलट में किसी अन्य ऐप की तरह ट्रीट करें। मकसद परफेक्ट कवरेज नहीं है। मकसद यह सीखना है कि कौन सा अप्रोच आपको “कुछ गड़बड़ है” से “यहाँ फेल हो रहा कदम” तक सबसे कम निरंतर काम में पहुँचाता है।

उपयोगी डैशबोर्ड और अलर्ट कैसे पाएं (बिना अंतहीन ट्वीकिंग के)

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

एक व्यावहारिक स्टार्टर सेट है: लेटेंसी, एरर, और सैचुरेशन। अगर आप प्रति एंडपॉइंट p95 लेटेंसी, प्रति सर्विस एरर रेट, और एक सैचुरेशन सिग्नल (क्यू डेप्थ, DB कनेक्शन्स, या वर्कर उपयोग) देख पाते हैं, तो आप आमतौर पर समस्या जल्दी ढूंढ लेते हैं।

हर नई सर्विस के लिए पैनल फिर से बनाने से बचने के लिए, नामकरण और लेबल्स पर कड़ाई बरतें। कंसिस्टेंट एट्रिब्यूट्स जैसे service.name, deployment.environment, http.route, और status_code का उपयोग करें। यही वह जगह है जहाँ टीमें फर्क महसूस करती हैं: OpenTelemetry एक मानक रूप को प्रोत्साहित करता है, जबकि प्रोप्राइटरी एजेंट उपयोगी एक्स्ट्राज़ जोड़ सकता है, कभी-कभी विक्रेता-विशिष्ट फ़ील्ड्स में।

डैशबोर्ड छोटे और पुनःप्रयोगी रखें। एक “Service overview” डैशबोर्ड हर API के लिए काम करे अगर सभी सर्विसेज़ वही कोर मैट्रिक्स और टैग्स उत्सर्जित करें।

ऐसे अलर्ट जो यूज़र इम्पैक्ट की ओर इशारा करें

अलर्ट तब फायर होने चाहिए जब उपयोगकर्ता नोटिस करे, न कि जब एक सर्वर व्यस्त दिखे। मजबूत डिफ़ॉल्ट में प्रमुख एंडपॉइंट्स पर उच्च एरर रेट, सहमति-शुदा थ्रेशहोल्ड से ऊपर 5–10 मिनट के लिए p95 लेटेंसी, और ऐसी सैचुरेशन जो जल्दी विफलता की भविष्यवाणी करे (क्यू वृद्धि, DB पूल exhaustion) शामिल हैं। साथ ही एक “मिसिंग टेलीमेट्री” अलर्ट रखें ताकि आप नोटिस करें जब कोई सर्विस रिपोर्ट करना बंद कर दे।

जब अलर्ट फायर हो, तो अलर्ट विवरण में एक-दो रनबुक नोट जोड़ें: कौन सा डैशबोर्ड पहले खोलना है, कौन सा हालिया डिप्लॉय चेक करना है, और किन लॉग फ़ील्ड्स से फ़िल्टर करना है।

ओनरशिप की भी योजना बनाएं। एक छोटी मासिक समीक्षा शेड्यूल करें। एक व्यक्ति शोर वाले अलर्ट हटाये, डुप्लीकेट मर्ज करे, और थ्रेशहोल्ड्स एडजस्ट करे। यह यह भी सुनिश्चित करने का अच्छा समय है कि नई सर्विसेज़ वही लेबल्स फॉलो करें ताकि मौजूदा डैशबोर्ड काम करते रहें।

समय और बजट बर्बाद करने वाली सामान्य गलतियाँ

पहले एडमिन टूल बनाएं
ऐसे एडमिन पैनल और ऑप्स टूल बनाएं जो आपकी प्रक्रियाओं के बदलने पर भी अपडेट करना आसान रहें।
निर्माण शुरू करें

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

हाई-कार्डिनैलिटी डेटा अक्सर दोषी होता है। यूज़र IDs, पूरी URLs, या रॉ रिक्वेस्ट बॉडीज़ को लेबल्स और एट्रिब्यूट्स में डालना मैट्रिक्स फटा देता है और साधारण चार्ट्स महँगे बना देता है।

नामकरण की समस्याएँ भी एक शांत बजट किलर हैं। अगर एक सर्विस http.server.duration रिपोर्ट करती है और दूसरी request_time_ms, तो आप उनकी तुलना नहीं कर सकते और हर डैशबोर्ड कस्टम काम बन जाता है। वही समस्या स्पैन नामों और रूट टेम्पलेट्स के साथ भी होती है।

टूल के डिफ़ॉल्ट्स हफ्तों का समय बर्बाद कर सकते हैं। कई प्रोडक्ट्स रेडी-मेड अलर्ट्स के साथ आते हैं, पर वे अक्सर छोटे स्पाइक्स पर पेज करते हैं या असली इन्सिडेंट्स के दौरान चुप रहते हैं। एअवरेज पर बेस्ड अलर्ट्स टेल लेटेंसी को मिस करते हैं जहाँ कस्टमर्स दर्द महसूस करते हैं।

संदर्भ की कमी वह कारण है जिसकी वजह से जाँच लंबी खिंचती है। अगर आप टेलीमेट्री में version टैग नहीं डालते तो आप इश्यूज़ और लेटेंसी को किसी रिलीज़ से जोड़ नहीं सकते। यह उन टीमों के लिए और भी महत्वपूर्ण है जो अक्सर शिप करती हैं या कोड रे-जनरेट करती हैं।

और हाँ, ट्रेसेज़ लॉग्स की जगह नहीं लेते। ट्रेसेज़ पाथ और टाइमिंग दिखाते हैं, पर लॉग्स अक्सर इंसानी विवरण रखते हैं: वैलिडेशन फेल्यर्स, थर्ड-पार्टी प्रतिक्रियाएं, और बिज़नेस रूल्स।

त्वरित फ़िक्स जो अक्सर जल्दी भुगतान करती हैं:

  • कुछ एंडपॉइंट्स और एक क्रिटिकल यूज़र जर्नी से शुरू करें
  • सर्विसेज़, रूट्स, स्पैन नामों और स्टेटस कोड्स के लिए नामकरण नियम पर सहमति बनाएं
  • डैशबोर्ड बनाने से पहले हर जगह version और environment टैग जोड़ दें
  • अलर्ट्स को उन लक्षणों पर ट्यून करें जिन्हें उपयोगकर्ता महसूस करते हैं (एरर रेट, p95 लेटेंसी), हर मैट्रिक पर नहीं
  • लॉग्स और ट्रेसेज़ को एक साझा रिक्वेस्ट/trace ID से कनेक्ट रखें

उदाहरण: एक छोटे प्रोडक्ट और एक इंटरनल टूल के लिए चयन

वास्तविक ऐप के साथ दृष्टिकोणों की तुलना करें
एक प्रोडक्शन-रेडी ऐप जल्दी प्रोटोटाइप करें, फिर OpenTelemetry या vendor एजेंट पर फैसला करें।
अब आज़माएँ

कल्पना कीजिए एक पांच सदस्यीय टीम दो चीज़ें चला रही है: एक पब्लिक API जिसे पेड कस्टमर्स इस्तेमाल करते हैं, और एक इंटरनल एडमिन टूल जिसे सपोर्ट और ऑप्स यूज़ करते हैं। API को तेज़ इन्सिडेंट रिस्पॉन्स चाहिए। एडमिन टूल हर हफ्ते बदलता है क्योंकि वर्कफ़्लोज़ शिफ्ट होते रहते हैं।

उस स्थिति में बेहतर विकल्प अक्सर तकनीक से कम और रोज़ाना के संचालन के मालिक किसके होंगे उससे ज़्यादा संबंधित होता है।

विकल्प A: प्रोप्राइटरी एजेंट से शुरुआत (फास्ट वैल्यू)

यह “हम आज एरर और धीमे एंडपॉइंट्स देख सकते हैं” तक सबसे तेज़ रास्ता है। आप एजेंट इंस्टॉल करते हैं, यह सामान्य फ्रेमवर्क्स को ऑटो-डिटेक्ट करता है, और आपको जल्दी डैशबोर्ड और बेसिक अलर्ट मिलते हैं।

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

2 हफ्तों के बाद, आमतौर पर आपके पास सर्विस मैप्स, टॉप एरर और कुछ उपयोगी अलर्ट होते हैं।

2 महीनों के बाद, लॉक-इन आमतौर पर डैशबोर्ड्स, क्वेरी भाषा, और कस्टम इंस्ट्रूमेंटेशन के चारों ओर दिखने लगता है।

विकल्प B: OpenTelemetry से शुरुआत (बाद में लचीलापन)

यह शुरू में अधिक समय ले सकता है क्योंकि आपको एक एक्सपोर्टर चुनना होगा और यह परिभाषित करना होगा कि लॉग्स, मैट्रिक्स और ट्रेसेज़ के लिए “अच्छा” क्या है। आपको डैशबोर्ड समझने योग्य बनाने के लिए अधिक मैन्युअल नामकरण और एट्रिब्यूट्स की ज़रूरत पड़ सकती है।

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

2 हफ्तों के बाद, आपके पास कम पॉलिश्ड डैशबोर्ड हो सकते हैं पर ट्रेस स्ट्रक्चर और नामकरण साफ़ होंगे।

2 महीनों के बाद, आप अधिक संभावना रखते हैं कि आपकी कन्वेंशन्स स्थिर हों, अलर्ट्स पुनःउपयोगी हों, और टूल बदलना आसान हो।

सरल निर्णय नियम:

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

त्वरित चेकलिस्ट और अगले कदम

अगर आप OpenTelemetry बनाम प्रोप्राइटरी APM एजेंट के बीच अटके हुए हैं, तो निर्णय इस पर लें कि आप रोज़ाना किन चीज़ों पर निर्भर करेंगे: पोर्टेबिलिटी, सिग्नल्स के बीच साफ़ कॉरिलेशन, और ऐसे अलर्ट जो तेज़ फिक्स की ओर ले जाते हों।

चेकलिस्ट:

  • Portability: क्या आप बैकेंड बाद में बदले बिना इंस्ट्रूमेंटेशन फिर से लिखे बिना स्विच कर सकते हैं?
  • Correlation: क्या आप एक धीमी रिक्वेस्ट ट्रेस से एक्सैक्ट लॉग्स और संबंधित मैट्रिक्स तक بسرعة जा सकते हैं?
  • Signal coverage: क्या आपको बुनियादी चीज़ें मिलती हैं (HTTP route names, error types, database spans), या गैप्स हैं?
  • Alert usefulness: क्या अलर्ट बताते हैं कि क्या बदला और कहाँ, या वे सिर्फ शोर वाले थ्रेशहोल्ड्स हैं?
  • Operational effort: कौन updates, एजेंट रोलआउट्स, SDK बदलाव और सैंपलिंग का मालिक है, और यह कितनी बार होगा?

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

बिना अंतहीन ट्वीकिंग के बचने के लिए, एक छोटा पायलट चलाएँ और आउटपुट पहले से परिभाषित करें: तीन डैशबोर्ड और पाँच अलर्ट जो किसी बुरे दिन में वाकई मदद करेंगे। फिर कवरेज बढ़ाएँ।

पायलट को ठोस रखें:

  • 3 डैशबोर्ड परिभाषित करें (service health, top endpoints, database और external calls)
  • 5 अलर्ट परिभाषित करें (error rate, p95 latency, saturation, queue backlog, failed jobs)
  • नामकरण कन्वेंशन्स लिखें (service names, environment tags, route patterns)
  • एक छोटा एट्रिब्यूट लिस्ट फ्रीज़ करें (वे टैग्स जिन पर आप फ़िल्टर और ग्रुप करेंगे)
  • सैंपलिंग नियमों पर सहमति बनाएं (क्या रखा जाएगा, क्या सैंपल होगा, और क्यों)

अगर आप नए इंटरनल टूल और कस्टमर पोर्टल बना रहे हैं, तो AppMaster (appmaster.io) मदद कर सकता है ताकि आप पूरी ऐप्स जल्दी बना सकें। इससे आपको एक ऐसा समय मिल जाता है जिसमें आप उपयुक्त ऑब्ज़रवेबिलिटी अप्रोच चुन सकते हैं और उसे डिप्लॉय व इटरेट करते समय सुसंगत रूप से लागू कर सकते हैं।

सामान्य प्रश्न

मुझे कब OpenTelemetry चुनना चाहिए बजाय किसी प्रोप्राइटरी APM एजेंट के?

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

क्या प्रोप्राइटरी APM एजेंट हमेशा vendor lock-in पैदा करते हैं?

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

क्या मुझे वास्तव में OpenTelemetry Collector चाहिए, या क्या मैं डेटा सीधे किसी बैकेंड को भेज सकता/सकती हूँ?

कलेक्टर तब उपयोगी होता है जब आप सिग्नल्स को बैचिंग, फ़िल्टरिंग, सैंपलिंग और कई बैकेंड्स तक रूट करना चाहते हैं। यह ऐप कोड को बदले बिना बाद में डेटा की मंज़िल बदलने में भी मदद करता है। अगर आपके पास सिर्फ़ एक सर्विस और एक बैकेंड है तो आप सीधे भेजकर शुरुआत कर सकते हैं, लेकिन जैसे-जैसे स्केल या गवर्नेंस ज़रूरतें बढ़ती हैं, टीम आमतौर पर कलेक्टर जोड़ती है।

सबसे पहले मुझे क्या इंस्ट्रूमेंट करना चाहिए ताकि जल्दी वैल्यू मिले?

एक या दो महत्वपूर्ण यूज़र जर्नी के लिए ट्रेसेज़ से शुरू करें क्योंकि वे हादसों के दौरान डायग्नोसिस का समय घटाते हैं। साथ में सर्विस-लेवल मैट्रिक्स जोड़ें (लेटेंसी, एरर रेट, और एक सैचुरेशन सिग्नल) ताकि अलर्ट भरोसेमंद हों। लॉग्स को स्ट्रक्चर्ड रखें और ट्रेस IDs से कॉरिलेट करें ताकि कारण की पुष्टि की जा सके।

मैं messy नामकरण और टैग से कैसे बचूँ जो बाद में डैशबोर्ड तोड़ दें?

स्थिर सर्विस नामों का उपयोग करें, मानक environment मान (जैसे prod और staging) रखें और हर सिग्नल पर version जोड़ें ताकि आप इश्यूज़ को रिलीज़ से जोड़ सकें।.metric लेबल में यूज़र IDs, ईमेल या पूरी URLs न रखें। ये बेसिक्स जल्द अपनाने से डैशबोर्ड पुन:उपयोगी रहते हैं और लागत नियंत्रित रहती है।

हाई-कार्डिनैलिटी डेटा और लागत को नियंत्रित करने का सबसे सरल तरीका क्या है?

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

मैं सैंपलिंग को कैसे हैंडल करूँ ताकि महत्वपूर्ण रिक्वेस्ट मिस न हों?

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

पहले मुझे कौन से अलर्ट सेट करने चाहिए ताकि वे actionable हों, न कि noisy?

उपयोगकर्ता-प्रभाव से जुड़ी अलर्ट्स को प्राथमिकता दें: प्रमुख एंडपॉइंट्स पर बढ़ा हुआ एरर रेट, सहमति-शुदा थ्रेशहोल्ड से ऊपर 5–10 मिनट के लिए बना हुआ p95 लेटेंसी, और एक सैचुरेशन सिग्नल जो शीघ्र विफलता का संकेत दे। एक "मिसिंग टेलीमेट्री" अलर्ट भी जोड़ें ताकि किसी सर्विस के रिपोर्ट करना बंद करने पर आपको पता चल सके। अगर कोई अलर्ट कार्रवाई नहीं करता तो उसे हटाएँ या शीघ्र समायोजित करें ताकि नोटिफिकेशन्स पर टीम का भरोसा बना रहे।

अगर मेरे पास ट्रेसेज़ हैं, क्या मुझे फिर भी लॉग्स और मैट्रिक्स चाहिए?

ट्रेसेज़ पाथ और समय दिखाते हैं, पर लॉग्स अक्सर वही मानव-समझ वाले विवरण रखते हैं: वैलिडेशन एरर, थर्ड-पार्टी प्रतिक्रिया, और बिज़नेस-रूल्स। मैट्रिक्स ट्रेंड दिखाने और अलर्ट ट्रिगर करने में मदद करते हैं। सबसे तेज़ डायग्नोसिस तब मिलता है जब तीनों आपस में कॉरिलेटेड हों, खासकर लॉग्स में ट्रेस ID के जरिए।

अगर मैं AppMaster से ऐप बनाता/बनाती हूँ तो यह निर्णय कैसे बदलता है?

हाँ। जनरेट किए गए ऐप्स के साथ भी मुख्य काम वही है: सर्विस नाम, रूट नामकरण, आवश्यक एट्रिब्यूट्स (env और version), और कहाँ टेलीमेट्री भेजनी है—इन कन्वेंशन्स पर सहमति बनाना। अच्छा तरीका यह है कि हर जनरेटेड सर्विस के लिए एक ही instrumentation पैटर्न तय करें ताकि हर नया ऐप पहले दिन से सुसंगत ट्रेसेज़, मैट्रिक्स और लॉग्स पैदा करे।

शुरू करना आसान
कुछ बनाएं अद्भुत

फ्री प्लान के साथ ऐपमास्टर के साथ प्रयोग करें।
जब आप तैयार होंगे तब आप उचित सदस्यता चुन सकते हैं।

शुरू हो जाओ