प्रतिनिधि इंटरव्यू विषय

डेटा इंजीनियरिंग इंटरव्यू: मेट्रिक्स को ट्रेसेस से जोड़ने के लिए आप मेट्रिक्स एक्सेम्पलर्स (exemplars) का उपयोग कैसे करेंगे?

डेटाकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

एक API की p99 लेटेंसी खराब हो जाती है (regresses), लेकिन मेट्रिक्स में हाई-कार्डिनैलिटी रिक्वेस्ट लेबल्स नहीं जोड़े जा सकते। एक ऐसा मेट्रिक्स-एक्सेम्पलर समाधान डिज़ाइन करें जो इंजीनियरों को एग्रीगेट मेट्रिक से प्रतिनिधि ट्रेसेस पर जाने की अनुमति देता है, और सैंपलिंग, कार्डिनैलिटी, टाइम विंडोज़, गोपनीयता, ड्रॉपिंग और घटना डिबगिंग की व्याख्या करें।

प्रॉम्प्ट और संदर्भ

मल्टी-टेनेंट API के लिए लेटेंसी हिस्टोग्राम पीक ट्रैफिक के दौरान p99 रिग्रेशन दिखाता है। मेट्रिक लेबल्स के रूप में user_id, पूरा URL, या रिक्वेस्ट पैरामीटर्स जोड़ने से अनबाउंडेड टाइम सीरीज़ और लागत बढ़ जाएगी। केवल एग्रीगेट बकेट्स को देखने से किसी एक धीमी रिक्वेस्ट की पहचान नहीं की जा सकती। मेट्रिक्स एक्सेम्पलर्स डिज़ाइन करें जो मेट्रिक नमूनों में थोड़ी संख्या में ट्रेस संदर्भ जोड़ते हैं ताकि एक जांचकर्ता चार्ट से ट्रेस पर, फिर लॉग्स और डिपेंडेंसीज़ पर जा सके।

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

इंटरव्यूअर क्या मूल्यांकन करता है

  • आप जानते हैं कि एक्सेम्पलर्स हिस्टोग्राम बकेट्स, count, या sum को नहीं बदलते हैं; वे एग्रीगेट के बाहर एक ऑब्जर्वेशन को संदर्भित करते हैं।
  • आप ट्रेस-आधारित या संभाव्यता (probabilistic) सैंपलिंग चुन सकते हैं और दर, टेल-लेटेंसी कवरेज और लागत के बीच ट्रेड-ऑफ़ को समझा सकते हैं।
  • आप मेट्रिक्स में पूरी रिक्वेस्ट्स, टोकन या व्यक्तिगत डेटा डाले बिना trace_id और span_id जैसे स्थिर संदर्भों का उपयोग करते हैं।
  • आप केवल एक लिंक बनाने के बजाय टाइमस्टैम्प, रीऑर्डरिंग, बैकएंड ड्रॉप्स, रिटेंशन और क्रॉस-टेनेंट ऑथराइजेशन को संभालते हैं।
  • आप टाइम विंडो खोजने के लिए लो-कार्डिनैलिटी मेट्रिक्स का उपयोग करते हैं, फिर एक प्रतिनिधि ट्रेस को मान्य करने और लॉग्स, डिपेंडेंसीज़ और बिल्ड वर्ज़न का अनुसरण करने के लिए एक्सेम्पलर्स का उपयोग करते हैं।

पहले स्पष्ट करने योग्य प्रश्न

  • किस मेट्रिक बैकएंड, ट्रेस बैकएंड और विज़ुअलाइज़ेशन टूल का उपयोग किया जाता है, और क्या वे एक्सेम्पलर क्वेरीज़ और डीप लिंक्स का समर्थन करते हैं?
  • कौन से इंस्ट्रूमेंट्स दायरे में हैं: Histogram, Counter, या Gauge? क्या p99 को सर्विस पर मापा जाता है या गेटवे पर?
  • क्या सैंपलिंग को प्रत्येक एरर, टेल लेटेंसी, या टेनेंट और वर्ज़न बजट को लक्षित करना चाहिए? क्या कोई एकल क्रॉस-रीजन नीति है?
  • संदर्भों को कौन से रिटेंशन, एक्सेस-कंट्रोल, रिडैक्शन और टेनेंट-आइसोलेशन नियम सीमित करते हैं?
  • कौन से मेमोरी, नेटवर्क और स्टोरेज बजट लागू होते हैं, और क्या एक्सेम्पलर्स के ड्रॉप होने पर भी प्राइमरी मेट्रिक उपलब्ध रहनी चाहिए?

30-सेकंड का उत्तर

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

चरण-दर-चरण समाधान

चरण 1: मेट्रिक/एक्सेम्पलर सीमा निर्धारित करें

हिस्टोग्राम लेबल्स को service, route_template, region, और status_class जैसे सीमित आयामों तक सीमित रखें। ऑब्जर्वेशन अभी भी bucket_counts, count, और sum में योगदान देता है; एक्सेम्पलर एक ट्रेसेबल संदर्भ संग्रहीत करता है और इसे प्रति ट्रेस एक नई टाइम सीरीज़ नहीं बनानी चाहिए।

चरण 2: टेल कवरेज के लिए सैंपल करें

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

चरण 3: संदर्भों और समय को एनकोड करें

एक एक्सेम्पलर में एक संख्यात्मक मान, एक लेबल सेट और एक ऑब्जर्वेशन समय शामिल होता है; ट्रेस संदर्भों को trace_id और span_id का उपयोग करना चाहिए। टाइमस्टैम्प ऑब्जर्वेशन समय के करीब होना चाहिए और मेट्रिक सैंपल विंडो के साथ संरेखित होना चाहिए। रिसीवर्स लेबल्स को ट्रंकेट कर सकते हैं या एक्सेम्पलर्स को त्याग सकते हैं, इसलिए क्वेरी पाथ को "मेट्रिक मौजूद है, एक्सेम्पलर अनुपस्थित है" का समर्थन करना चाहिए।

text
latency_seconds_bucket{route="/checkout",le="1"} 982
# {trace_id="4f8...",span_id="91a...",build="2026.07.31"} 1.42 1753938000000

चरण 4: गोपनीयता, कार्डिनैलिटी और लागत को सीमित करें

एक्सेम्पलर में कभी भी रॉ URLs, बॉडीज़, ईमेल पते, ऑथराइजेशन टोकन या यूज़र IDs न डालें। build और रीजन जैसे वैकल्पिक एट्रिब्यूट्स के लिए एक अनुमति सूची (allowlist) और लंबाई सीमाओं की आवश्यकता होती है। OpenTelemetry नोट करता है कि View द्वारा मेट्रिक स्ट्रीम से हटाए गए एट्रिब्यूट्स अभी भी एक्सेम्पलर फ़िल्टर किए गए एट्रिब्यूट्स के रूप में निर्यात किए जा सकते हैं, इसलिए रिडैक्शन को अलग से कॉन्फ़िगर किया जाना चाहिए। प्रति सेकंड सैंपल्स, प्रति रिकॉर्ड बाइट्स, रिंग-बफ़र मेमोरी, रिमोट राइट्स और ट्रेस-क्वेरी लागत का अनुमान लगाएं; मेट्रिक लेबल्स को दूषित करने से पहले एक्सेम्पलर सैंपलिंग को कम करें।

चरण 5: क्रॉस-बैकएंड जंप लागू करें

डैशबोर्ड एक चयनित समय सीमा के लिए एक्सेम्पलर्स को क्वेरी करता है, फिर trace_id से एक नियंत्रित ट्रेस-बैकएंड लिंक बनाता है। लिंक सेवा टेनेंट, रीजन और ऑथराइजेशन की जांच करती है, और गायब, समाप्त (expired), या क्रॉस-एनवायरनमेंट ट्रेसेस के लिए एक स्पष्ट स्थिति लौटाती है। लॉग्स और स्पैन Trace Context साझा करते हैं, लेकिन तीनों सिग्नल्स को एकल स्टोरेज सिस्टम की आवश्यकता नहीं होती है।

चरण 6: डिग्रेडेशन और रिलीज़ गेट्स का परीक्षण करें

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

एक मजबूत नमूना उत्तर

"मैं पहले मेट्रिक लेबल्स को रूट टेम्प्लेट, स्टेटस क्लास और रीजन तक सीमित करता हूँ, जिससे हिस्टोग्राम p99 एग्रीगेशन के लिए ज़िम्मेदार रहता है। रिक्वेस्ट्स Trace Context ले जाती हैं; जब एक सैंपल किया गया ट्रेस किसी एरर या टेल-लेटेंसी पॉलिसी से मेल खाता है, तो मैं trace_id, span_id, मान और टाइमस्टैम्प को Histogram सैंपल से जोड़ता हूँ। एक्सेम्पलर एट्रिब्यूट्स अनुमत सूची में होते हैं, उनमें कोई यूज़र पहचान या बॉडी नहीं होती है, और View निर्यात से पहले उन्हें फिर से रिडैक्ट किया जाता है।"

"Prometheus/OpenMetrics क्वेरीज़ केवल चयनित विंडो के लिए एक्सेम्पलर्स लौटाती हैं। ट्रेस लिंक से पहले एक परमिशन चेक किया जाता है; यदि ट्रेस समाप्त हो गया है, तो मेट्रिक एक एक्सपायर्ड-रेफरेंस स्थिति के साथ दिखाई देती रहती है। लोड टेस्ट bucket/count/sum/p99 की तुलना करते हैं, और अभ्यास बैकएंड ड्रॉप्स, रीऑर्डरिंग, क्रॉस-टेनेंट एक्सेस और समाप्त बजट को कवर करते हैं। हिट रेट, पहले ट्रेस का समय, मेमोरी, राइट लागत और संवेदनशील-फ़ील्ड स्कैन सैंपलिंग बजट निर्धारित करते हैं; हाई-कार्डिनैलिटी लेबल्स कभी भी मेट्रिक में प्रवेश नहीं करते हैं।"

सामान्य गलतियाँ

  • मेट्रिक लेबल्स में trace_id डालना → टाइम-सीरीज़ विस्फोट → इसे एक्सेम्पलर संदर्भ में रखें।
  • केवल निश्चित-संभाव्यता सैंपलिंग का उपयोग करना → p99 या एरर्स लंबी अवधि के लिए अनुपस्थित हो सकते हैं → टेल, एरर और बजेटेड सैंपलिंग जोड़ें।
  • एक्सेम्पलर टाइमस्टैम्प्स को अनदेखा करना → ट्रेस चार्ट विंडो से बाहर हो जाता है → ऑब्जर्वेशन समय रिकॉर्ड करें और विंडो को मान्य करें।
  • यह मान लेना कि फ़िल्टर किए गए एट्रिब्यूट्स सुरक्षित हैं → संवेदनशील डेटा अभी भी एक्सेम्पलर्स के साथ निर्यात किया जा सकता है → एक अलग अनुमति सूची, रिडैक्शन और ऑथराइजेशन चेक का उपयोग करें।
  • गायब एक्सेम्पलर्स को मेट्रिक विफलता मानना → एग्रीगेशन संदर्भों के साथ युग्मित (coupled) हो जाता है → मेट्रिक्स को उपलब्ध रखें और एक्सेम्पलर हानि की अलग से निगरानी करें।
  • बिना सीमाओं के संदर्भ बनाए रखना → मेमोरी और लागत बिना नियंत्रण के बढ़ती है → निश्चित क्षमता, रिटेंशन और सैंपलिंग बजट का उपयोग करें।

फॉलो-अप प्रश्न और उत्तर

क्या एक एक्सेम्पलर p99 को बदलता है?

नहीं। इसका मान पहले से ही Histogram बकेट, count और sum में शामिल है। यह संदर्भ और एक रेफरेंस जोड़ता है; इसे दूसरी मेट्रिक सीरीज़ नहीं बनानी चाहिए और न ही ऑब्जर्वेशन को दो बार गिनना चाहिए।

एक्सेम्पलर एट्रिब्यूट में पूरा URL क्यों नहीं डालते?

पूर्ण URLs में यूज़र डेटा, टोकन और अनबाउंडेड कार्डिनैलिटी हो सकती है। एक अनुमति प्राप्त रूट टेम्प्लेट और वर्ज़न का उपयोग करें; इसके बजाय एक अधिकृत, रिडैक्टेड ट्रेस या लॉग में पैरामीटर्स का निरीक्षण करें।

क्या होता है जब प्रत्येक एक्सेम्पलर ड्रॉप हो जाता है?

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

आप कैसे साबित करते हैं कि सैंपलिंग किसी एक टेनेंट के प्रति पक्षपाती नहीं है?

टेनेंट, रीजन, वर्ज़न और परिणाम वर्ग के आधार पर रिक्वेस्ट, सैंपल और हिट काउंट की तुलना करें। न्यूनतम गारंटी और अधिकतम बजट निर्धारित करें, और एरर व टेल-लेटेंसी हिट दरों की तुलना करें। वैश्विक दर बढ़ाने के बजाय स्तरीकृत (stratified) सैंपलिंग के साथ पूर्वाग्रह को ठीक करें।

सार्वजनिक स्रोत

संबंधित प्रश्न