वितरित ट्रेसिंग
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
वितरित निशान इस सवाल का जवाब प्रदान करते हैं कि गेटवे, एपीआई, कतारें, डेटाबेस, बाहरी प्रदाताओं (पीएसपी/गेम स्टूडियो) के माध्यम से अनुरोध पथ के साथ कहां और क्यों समय खो जाता है। OpenTelemetry (OTel) एक खुला SDK/एजेंट/प्रोटोकॉल मानक है जो ट्रेल्स, मैट्रिक्स और लॉग को जोड़ ती है। IGaming में, यह p95/p99 रखने, जल्दी से भुगतान के मुद्दों को स्थानीय बनाने और पीक टूर्नामेंट से पहले अड़ चनों की पहचान करने के लिए एक बुनियादी उपकरण है।
1) ओटेल अवधारणाएँ
ट्रेस - ऑपरेशन का पूरा रास्ता (जमा, दर, निकासी)।
स्पैन - कार्य क्षेत्र (HTTP हैंडलर, SQL अनुरोध, कतार/प्रदाता कॉल)।
विशेषताएँ - विवरण के साथ मान कुंजी ('net। सहकर्मी। नाम ',' db। सिस्टम ',' psp। मार्ग ')।
घटनाएँ - त्वरित घटनाएँ (रिट्रीट, टाइमआउट, कैश मिस)।
लिंक - अन्य निशान के लिए लिंक (async/कतार के लिए महत्वपूर्ण)।
संसाधन - प्रक्रिया मेटाडेटा: 'सेवा। नाम ',' सेवा। संस्करण ',' तैनाती। पर्यावरण ',' बादल। क्षेत्र '।
2) संदर्भ प्रचार
W3C ट्रेस संदर्भ का उपयोग करें:
traceparent: 00-<trace_id>-<span_id>-01 tracestate:...
इसके अतिरिक्त - सुरक्षित कुंजियों के लिए सामान (उदाहरण के लिए, 'किरायेदार', 'मार्ग'), वहां पीआईआई न लगाएं।
संदर्भ को कहां पंचर करें: एपीआई गेटवे → आंतरिक आरपीसी → निर्माता → उपभोक्ता → बाहरी एचटीटीपी (पीएसपी/प्रदाता) कतार में।
3) शब्दार्थ सम्मेलन (अनिवार्य न्यूनतम)
HTTP/RPC: 'http। विधि ',' http। मार्ग ',' http। status_code'।
DB/कैश: 'db। सिस्टम '(' mysql '/' postgresql '/' redis '),' db। कथन '(नकाबपोश),' db। ऑपरेशन '।
कतारें: 'संदेश। सिस्टम '(' काफ्का '/' खरगोश '),' मैसेजिंग। गंतव्य ',' संदेश। ऑपरेशन '(' भेजें '/' प्रक्रिया ')।
भुगतान: 'psp। मार्ग ',' psp। प्रदाता ',' भुगतान। आईडी '(छद्म नाम),' राशि ',' मुद्रा '।
iGaming डोमेन: 'खेल। प्रदाता ',' खेल। session_id' (हैश), 'खिलाड़ी। id_hash'।
एक एकल वर्गीकरण - डैशबोर्ड की तुलना और कारणों के लिए एक त्वरित खोज।
4) नमूना: डेटा में कैसे नहीं डूबना है
हेड-आधारित
सरल, सस्ता; सामान्य प्रवाह के लिए उपयुक
माइनस - आप "दिलचस्प" धीमी/गलत पटरियों को खो सकते हैं।
पूंछ आधारित (в कलेक्टर)
निर्णय स्पैन के अंत के बाद किया जाता है: हम केवल त्रुटियों/धीमी/महत्वपूर्ण खंडों (वीआईपी/भुगतान) को बचाते हैं।
उत्पादन भार के लिए आदर्श: उच्च सूचना सामग्री के साथ लागत को बहुत कम करता
अनुशंसित संकर:- प्रमुख: "पृष्ठभूमि" कवरेज के लिए 5-10%।
- पूंछ: 100% त्रुटि + p95 + धीमी + भुगतान ट्रैक/कैनरी रिलीज़।
5) ओपन टेलीमेट्री कलेक्टर टोपोलॉजी
एजेंट-साइडकार (प्रत्येक नोड/पॉड पर): स्थानीय स्वीकृति, न्यूनतम बफर, एग्रीगेटर को निर्यात।
गेटवे (क्लस्टर): टेल-सैंपलिंग, रूटिंग, संवर्धन, टेम्पो/जैगर/जिपकिन/ओटीएलपी को निर्यात।
उदाहरण: पूंछ-नमूना (YAML टुकड़ा)
yaml processors:
tailsampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code:
status_codes: [ ERROR ]
- name: slow_p95 type: latency latency:
threshold_ms: 250
- name: payments type: string_attribute string_attribute:
key: service. name values: [ "payments-api", "payments-worker" ]
6) मेट्रिक्स और लॉग के साथ सहसंबंध
प्रत्येक लॉग प्रविष्टि में 'trace _ id '/' span _ id' जोड़ें.
हिस्टोग्राम के रूप में विलंबता मैट्रिक्स स्टोर करें और उदाहरण शामिल करें - p95-बोकेट से एक विशिष्ट ट्रेस के लिए "जंप" के लिए प्रतिनिधि 'ट्रेस _ आईडी' का एक संदर्भ।
रिलीज एनोटेशन (Git SHA, चार्ट संस्करण) - जैसे इवेंट/लेबल।
7) इंस्ट्रूमेंटेशन (भाषाएं और ऑटो-एजेंट)
गो (मैनुअल + स्वतः)
go tp:= sdktrace. NewTracerProvider(
sdktrace. WithBatcher(exporter),
sdktrace. WithResource(resource. NewWithAttributes(
semconv. SchemaURL,
semconv. ServiceName("payments-api"),
)),
)
otel. SetTracerProvider(tp)
ctx, span:= tracer. Start(ctx, "Deposit")
defer span. End()
span. SetAttributes(
attribute. String("psp. route","pspX"),
attribute. String("currency","EUR"),
)
जावा
ऑटो-एजेंट '-javaagent: opentelemetry-javaagent। जार ', env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPORTER _ OTLP _ ENDPOINT ') के माध्यम से कॉन्फ़िग।
मैनुअल - प्याज स्थानों का एनोटेशन/टूल (जेडीबीसी पूल, कैश)।
नोड। जेएस/पायथन
एसडीके + प्लगइन (एक्सप्रेस/FASTAPI/अजवाइन) के साथ ऑटो-टूल।
कतारों के लिए - निर्माता/उपभोक्ता रैपर 'संदेश' डालने के लिए। 'और कड़ियाँ।
8) कतारें और एसिंक: सही स्पैन
निर्माता ('भेजें'): विषय/कतार में भेजने के लिए अवधि।
उपभोक्ता ('प्रक्रिया'): लिंक से निर्माता अवधि तक संदेश प्रसंस्करण का नया कार्यकाल (सामान्य 'ट्रेस _ आईडी' के बिना कारण संबंध सहेजें)।
विशेषताएँ: 'संदेश भेजना। काफ्का। विभाजन ',' संदेश। खरगोश। routing_key', 'मैसेजिंग। message_id'।
रिट्रेज़ - इवेंट 'रीट्री' के साथ, काउंटर का प्रयास करें
9) डीबी/कैश और एन + 1
डाटाबेस ड्राइवर ट्रेसिंग सक्षम करें, समान प्रकार के समूह प्रश्न बैचों में.
रेडिस/कैश के लिए, विशेषताएं 'कैश' हैं। हिट '/' कैश। मिस '।
अलग-अलग स्पैन के लिए "भारी" अनुरोध करें - आप देख सकते हैं कि p99 कहां है।
10) बाहरी प्रदाता: पीएसपी/गेम स्टूडियो
HTTP क्लाइंट लपेटें: 'psp। प्रदाता ',' psp। मार्ग ',' timeout _ ms ',' प्रयास '।
लॉग त्रुटि कोड/प्रकार, लेकिन पीआईआई (कार्ड संख्या, टोकन) नहीं।
'अवधि', 'त्रुटि-दर' द्वारा स्टूडियो/मार्गों की तुलना करें।
11) फ्रंटेंड और आरयूएम
ओटेल वेब एसडीके: 'पृष्ठ _ व्यू', 'रिसोर्स _ लोड', 'xhr'.
UI → API → डेटाबेस के माध्यम से उपयोगकर्ता के मार्ग को सिलाई करने के लिए बैकएंड में पियर्स 'ट्रेसपेरेंट'।
भू/नेटवर्क प्रदाताओं द्वारा विभाजन - वैकल्पिक लेबल।
12) सुरक्षा और पीआईआई
खेतों को मास्क करें ('db। कथन 'संपादित), हैश' प्लेयर _ आईडी '।
डेटा क्षेत्र: 'pii = true', 'क्षेत्र = EU/TR/LATAM'।
भुगतान पटरियों (भूमिका-आधारित) तक पहुंच नियंत्रण।
WORM/रिटेंशन: संवेदनशील निशान के लिए अवधारण अवधि, नीति द्वारा विलोपन।
13) प्रदर्शन और लागत
नीति द्वारा पूंछ-नमूना: "त्रुटियां + धीमी + भुगतान + कैनरी रिलीज।"
मेट्रिक्स के डाउनसैम्पलिंग हिस्टोग्राम, आक्रामक लॉग डिडप्लिकेशन।
कार्डिनैलिटी बाधा: 'user _ id' को मीट्रिक लेबल के रूप में न लिखें.
कलेक्टर, ओटीएलपी संपीड़न में बफर्स/बैच।
14) डैशबोर्ड और विश्लेषण
सेवा मानचित्र: सेवा निर्भरता, त्रुटि/विलंबता रंग।
रिलीज तुलना: स्थिर बनाम कैनरी संशोधन (p95, त्रुटि-दर, भुगतान शंकु)।
शीर्ष धीमी गति के निशान: मार्ग '/जमा 'के साथ, पीएसपी/क्षेत्र के साथ खंड।
कतार अंतराल: गहरी खपत देरी पटरियों।
15) कलेक्टर विन्यास के उदाहरण
पाइपलाइन (मैट्रिक्स/ट्रेल्स/लॉग, टुकड़ा)
yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }
processors:
batch:
memory_limiter:
limit_mib: 1024 spike_limit_mib: 256 attributes/payments:
actions:
- key: "psp. provider"
action: insert value: "pspX"
exporters:
otlp/traces: { endpoint: tempo:4317, tls: { insecure: true } }
otlp/metrics:{ endpoint: prometheus-otlp:4317, tls: { insecure: true } }
otlp/logs: { endpoint: loki-otlp:4317, tls: { insecure: true } }
service:
pipelines:
traces:
receivers: [ otlp ]
processors: [ memory_limiter, batch, tailsampling ]
exporters: [ otlp/traces ]
metrics:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/metrics ]
logs:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/logs ]
16) रनबुक (विशिष्ट परिदृश्य)
A) 'भुगतान-एपी' में p99 की वृद्धि
1. "टॉप स्लो ट्रेस" खोलें - डेटाबेस/पीएसपी स्पैन में गिरें।
2. यदि पीएसपी समस्या मार्ग का अनुवाद करना है, तो रिट्रे/टाइमआउट सक्षम करें।
3. कतार 'विथ्रावल्स' (अंतराल) की जाँच करें, उपभोक्ताओं को बढ़ाएं।
बी) पोस्ट-रिलीज़ 5xx बग
1. 'सर्विस द्वारा फ़िल्टर करें। संस्करण '।
2. स्थिर/कैनरी की तुलना करें; 'psp में स्पाइक्स खोजें। मार्ग '।
3. फ्रीज प्रमोशन, रोल बैक (रिलीज स्ट्रैटेजीज/रोलबैक देखें)।
C) संदिग्ध N + 1
1. बड़ी संख्या में छोटे डीबी स्पैन के साथ ट्रेल्स।
2. एकत्रीकरण/खुशी सक्षम करें, कैश परत जोड़ें।
17) कार्यान्वयन चेकलिस्ट
1. OTel SDK और एक समान संसाधन विशेषताएँ सक्षम करें ('सेवा। नाम ',' env ',' क्षेत्र ')।
2. सभी परतों और कतारों के माध्यम से W3C ट्रेस संदर्भ का प्रचार।
3. शब्दार्थ विशेषताओं का न्यूनतम सेट (HTTP/DB/कतार/PSP)।
4. पूंछ-नमूना: त्रुटियां, p95 +, भुगतान, कैनरी।
5. 'trace _ id '/' span _ id' के साथ लॉग करता है, उदाहरण के साथ मेट्रिक्स।
6. डैशबोर्ड: सर्विस मैप, रिलीज तुलना, भुगतान प्रवाह।
7. पीआईआई नीतियां: मास्किंग, ज़ोन, भूमिकाएँ, प्रतिधारण।
8. टेस्ट/लोड: चोटियों से पहले सहसंबंध और ट्रेसिंग की पूर्णता की जांच करें।
9. अलर्ट में रनबुक लिंक का ऑटो-जनरेशन।
10. टेलीमेट्री कॉस्ट और कार्डिनैलिटी रिपोर्ट।
18) एंटीपैटर्न
डेटाबेस/कतारों के बिना "केवल प्रवेश द्वार पर" का पता लगाता है - कोई उपयोग नहीं।
Async में प्रसार की कमी → कारण और प्रभाव श्रृंखला टूट जाती है।
पूंछ तर्क के बिना यादृच्छिक 1% का नमूना - धीमा/गलत पकड़ ना।
ट्रेस _ id के बिना लॉग - कोई एंड-टू-एंड सहसंबंध नहीं।
विशेषताओं/लॉग में कच्चे पीआईआई - अनुपालन जोखिम।
कार्डिनैलिटी "टू द सीलिंग" (उपयोगकर्ता/सत्र मीट्रिक लेबल के रूप में) - मूल्य का एक विस्फोट।
सारांश
OpenTelemetry असमान उपकरणों के संग्रह से अंत-टू-एंड प्रदर्शन भाषा में अवलोकन को बदल देता है। सही संदर्भ प्रचार के साथ, साफ शब्दार्थ, पूंछ-नमूना और "मेट्रिक्स ↔ ट्रेस ↔ लॉग्स" के संयोजन के साथ, आईगेमिंग टीम p95/p99 को नियंत्रण में रखती है, जल्दी से बाधाओं (डीबी, कतार, पीएसपी) को अलग करती है।