GH GambleHub

वितरित ट्रेसिंग: OpenTelemetry

वितरित ट्रेसिंग: OpenTelemetry

1) ओटेल क्यों और यह क्या देता है

OpenTelemetry (Otel) एक खुला मानक है और एकल OTLP प्रोटोकॉल के साथ टेलीमेट्री (ट्रेल्स, मैट्रिक्स, लॉग्स) के लिए SDKs/एजेंटों/कलेक्टरों का एक सेट है। उद्देश्य:
  • अनुरोध पथ की एंड-टू-एंड दृश्यता (गेटवे → सेवाएं → डीबी/कैश/कतार)।
  • फास्ट आरसीए/डिबग क्षरण और रिलीज (कैनरी/ब्लू-ग्रीन)।
  • एसएलओ और ऑटो-रोलबैक (डेटा के आधार पर परिचालन समाधान) के साथ लिंक।
  • वेंडर-एग्नोस्टिक: किसी भी बैकएंड को निर्यात करें, एक एपीएम के लिए बाध्यकारी किए बिना।

संदर्भ सिद्धांत: मानकीकरण, नमूना स्मार्ट, डिफ़ॉल्ट रूप से सुरक्षित, सब कुछ सहसंबंधित।

2) मूल बातें: संदर्भ, फैलाव, विशेषताएं

ट्रेस - कॉल ट्री/ग्राफ; स्पैन - ऑपरेशन (आरपीसी, एसक्यूएल, कतार कॉल)।

स्पैन काइंड: 'सर्वर', 'क्लाइंट', 'प्रोड्यूसर', 'कंज्यूमर', 'इंटरनल'।

W3C ट्रेस संदर्भ: 'traceparent', 'tracestate' हेडर; संदर्भ को चौराहे पर ले जाया जाता है।

गुण - कुंजी-मूल्य (कम कार्डिनैलिटी!), घटना - समय टिकट, स्थिति - त्रुटि कोड/विवरण।

लिंक - लिंक एक सख्त पदानुक्रम (एसिंक/फैन-आउट/फैन-इन के लिए महत्वपूर्ण) के बाहर फैला हुआ है।

स्पैन नामकरण:
  • HTTP: 'HTTP {METHY}' (विशेषता के रूप में 'GET/वापस लेना')
  • DB: 'DB SELECT '/' DB INSERT'
  • कतार: 'QUEUE प्रकाशित विषय = X '/' QUEUE उपभोग विषय = X'

3) शब्दार्थ सम्मेलन (सेमकोन)

स्थिर विशेषता स्कीमा का उपयोग करें:
  • HTTP/GRPC: 'http। विधि ',' http। मार्ग ',' http। status_code', 'url। पूर्ण '।
  • डीबी: 'डीबी। सिस्टम = postgresql ',' db। कथन '(केवल सुरक्षित निचोड़!),' db। नाम '।
  • संदेश: 'संदेश। सिस्टम = काफ्का ',' मैसेजिंग। ऑपरेशन = प्राप्त ',' संदेश। गंतव्य '।
  • Cloud/K8s/Host: 'बादल। क्षेत्र ',' k8s। फली। नाम ',' कंटेनर। id '।
  • संसाधन विशेषताएँ (आवश्यक): 'सेवा। नाम ',' सेवा। संस्करण ',' तैनाती। पर्यावरण '।

SDK/कलेक्टर संसाधनों में 'schemaUrl' के माध्यम से स्कीमा स्थिरता निर्दिष्ट करें।

4) नमूना: सिर, पूंछ, अनुकूली

हेड-आधारित (एसडीके में): अग्रिम, सस्ते में फैसला करता है; उच्च-QPS के लिए अच्छा है लेकिन "दिलचस्प" पटरियों को याद कर

टेल-आधारित (कलेक्टर में): ट्रैक के पूरा होने के बाद फैसला करता है; स्थिति, विलंबता, विशेषताओं द्वारा नियमों की अनुम

अनुकूली/गतिशील: p95 त्रुटियों/वृद्धि के लिए नमूना हिस्सेदारी बढ़ाता है।

उत्पादन स्तर की रेसिपी: वैश्विक स्तर पर 1-5% + टेल चयन "महत्वपूर्ण": 'स्थिति = ERROR', 'विलंबता> p95', "मनी रूट", PSP/KYC त्रुटियां।

5) सहसंबंध: मैट्रिक्स, लॉग, ट्रेल्स

उदाहरण: मीट्रिक हिस्टोग्राम में 'ट्रेस _ आईडी' के साथ लेबल (ट्रैक पर त्वरित कूद)।

लॉग: 'trace _ id '/' span _ id' जोड़ें और लॉग से ट्रेस में स्विच करें।

SLO/अलर्ट के लिए SpanMetrics (प्रोसेसर) RED मेट्रिक्स ('अनुरोधों, त्रुटियों, अवधि') से समुच्चय करता है।

6) तैनाती वास्तुकला

प्रत्येक नोड पर एजेंट (डेमनसेट) अनुप्रयोगों (OTLP) और आगे से एकत्र होता है।

गेटवे (क्लस्टर/क्षेत्र) - रूटिंग/सैंपलिंग/संवर्धन पाइपलाइनों के साथ केंद्रीय कलेक्टर (कई प्रतिकृतियां)।

OTLP: gRPC '4317', HTTP '4318'; TLS/mTLS सक्षम करें।

"एजेंट + गेटवे" के पेशेवर: अलगाव, बफरिंग, स्थानीय बैकप्रेशर, सरलीकृत नेटवर्क।

7) ओपनटेलीमेट्री कलेक्टर - मूल टेम्पलेट (गेटवे)

yaml receivers:
otlp:
protocols:
grpc: { endpoint: 0. 0. 0. 0:4317 }
http: { endpoint: 0. 0. 0. 0:4318 }

processors:
memory_limiter: { check_interval: 5s, limit_percentage: 75 }
batch: { timeout: 2s, send_batch_size: 8192 }
attributes:
actions:
- key: deployment. environment action: upsert value: prod resource:
attributes:
- key: service. namespace action: upsert value: core tail_sampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code: { status_codes: [ERROR] }
- name: slow_traces type: latency latency: { threshold_ms: 800 }
- name: important_routes type: string_attribute string_attribute:
key: http. route values: ["/withdraw", "/deposit"]
- name: baseline_prob type: probabilistic probabilistic: { sampling_percentage: 5 }

exporters:
otlp/apm:
endpoint: apm-backend:4317 tls: { insecure: true }
prometheus:
endpoint: 0. 0. 0. 0:9464

extensions:
health_check: {}
pprof: { endpoint: 0. 0. 0. 0:1777 }
zpages: { endpoint: 0. 0. 0. 0:55679 }

service:
extensions: [health_check, pprof, zpages]
pipelines:
traces:  { receivers: [otlp], processors: [memory_limiter,attributes,resource,batch,tail_sampling], exporters: [otlp/apm] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }
logs:   { receivers: [otlp], processors: [batch], exporters: [] }

8) SLO के लिए स्पैनमेट्रिक्स और RED

एक प्रोसेसर जोड़ें:
yaml processors:
spanmetrics:
metrics_exporter: prometheus histogram:
explicit:
buckets: [50ms,100ms,200ms,400ms,800ms,1600ms,3200ms]
service:
pipelines:
traces: { receivers: [otlp], processors: [spanmetrics,batch,tail_sampling], exporters: [otlp/apm] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }

अब SLO/अलर्ट के लिए 'traces _ spanmetrics _ calls {service, route, code}' और 'deration _ bult' हैं।

9) K8s: कलेक्टर की तैनाती (डेमनसेट + तैनाती)

एजेंट (डेमनसेट) टुकड़ा:
yaml apiVersion: apps/v1 kind: DaemonSet metadata: { name: otel-agent, namespace: observability }
spec:
template:
spec:
containers:
- name: otelcol image: otel/opentelemetry-collector:latest args: ["--config=/conf/agent. yaml"]
ports:
- { containerPort: 4317, name: otlp-grpc }
- { containerPort: 4318, name: otlp-http }

गेटवे (तैनाती) - सीपीयू/क्यूपीएस द्वारा कई प्रतिकृतियां, सेवा क्लस्टर आईपी/इंग्रेस, एचपीए।

10) सुरक्षा और गोपनीयता

TLS/mTLS между SDK → एजेंट → गेटवे → बैकेंड।

गेटवे इनपुट पर प्रमाणीकरण (बेसिक/OAuth/Headers); उत्पत्ति को सीमित करें।

PII संशोधन: फ़िल्टर/मास्क विशेषताएँ ('उपयोगकर्ता। ईमेल ',' कार्ड। ') कलेक्टर प्रोसेसर में।

सीमाएँ: SDK में, घटना के आकार/विशेषताओं की संख्या (कार्डिनैलिटी संरक्षण) को सीमित करें।

बैकेंड + व्यक्तिगत परियोजना/किरायेदार नेमस्पेस में RBAC।

कलेक्टर में एक फिल्टर का एक उदाहरण:
yaml processors:
attributes/redact:
actions:
- key: user. email action: delete
- key: payment. card action: delete

11) इंस्ट्रूमेंटेशन: त्वरित शुरुआत

नोड। जेएस

js import { NodeSDK } from "@opentelemetry/sdk-node";
import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
import { OTLPTraceExporter } from "@opentelemetry/exporter-trace-otlp-grpc";
import { Resource } from "@opentelemetry/resources";
import { SemanticResourceAttributes as R } from "@opentelemetry/semantic-conventions";

const sdk = new NodeSDK({
traceExporter: new OTLPTraceExporter({ url: "http://otel-agent. observability:4317" }),
resource: new Resource({
[R.SERVICE_NAME]: "payments-api",
[R.SERVICE_VERSION]: "1. 14. 2",
[R.DEPLOYMENT_ENVIRONMENT]: "prod"
}),
instrumentations: [getNodeAutoInstrumentations()],
});
sdk. start();

जावा (वसंत)

java
// Gradle: io. opentelemetry. instrumentation:opentelemetry-spring-boot-starter
// application. yml otel:
service:
name: orders-api exporter:
otlp:
endpoint: http://otel-agent. observability:4317 traces:
sampler: parentbased_traceidratio sampler-arg: 0. 05

पायथन (FastAPI)

python from opentelemetry import trace from opentelemetry. sdk. resources import Resource from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. trace. export import BatchSpanProcessor

provider = TracerProvider(resource=Resource. create({"service. name":"fraud-scoring","deployment. environment":"prod"}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="http://otel-agent. observability:4317", insecure=True)))
trace. set_tracer_provider(provider)

जाओ

go exp, _:= otlptracegrpc. New(ctx, otlptracegrpc. WithEndpoint("otel-agent. observability:4317"), otlptracegrpc. WithInsecure())
res:= resource. NewWithAttributes(semconv. SchemaURL, semconv. ServiceNameKey. String("gateway"), semconv. DeploymentEnvironmentKey. String("prod"))
tp:= sdktrace. NewTracerProvider(sdktrace. WithBatcher(exp), sdktrace. WithResource(res), sdktrace. WithSampler(sdktrace. ParentBased(sdktrace. TraceIDRatioBased(0. 05))))
otel. SetTracerProvider(tp)

12) अतुल्यकालिक: कतारें, बसें, क्रोन

'लिंक' के माध्यम से संचार के साथ निर्माता/उपभोक्ता (संदेशों का अपना जीवन चक्र है)।

संदेश शीर्षिका को संदर्भ प्रचारित करें ('traceparent '/' सामान')।

जब बैच-उपभोग करते हैं, तो प्रति संदेश एक अवधि बनाएं या 'मेसेजिंग विशेषता के साथ एकत्र करें। बैच। आकार '।

क्रोन/नौकरियों के लिए: प्राथमिक घटनाओं (यदि कोई हो) के लिए + लिंक चलाने के लिए नया ट्रेस।

13) सामान और लक्ष्यीकरण

सामान में न्यूनतम स्थिर कुंजियाँ ('किरायेदार _ id', 'क्षेत्र', 'vip _ tier') संग्रहीत करें; PII प्रतिबंधित करें।

खंड द्वारा मैट्रिक्स के बाद के एकत्रीकरण के लिए गेटवे/गेटवे लॉगर के माध्यम से धक्का।

14) रिलीज और एसएलओ गेटिंग के साथ एकीकरण

कैनरी चरण मार्गों/उप-खंडों पर 'ट्रेस _ स्पैनमेट्रिक्स' की जाँच करें।

गिरावट के दौरान (5xx/p95) - ऑटो-स्टॉप और रोलबैक (आर्गो रोलआउट्स Template + PromQL)।

मैट्रिक्स से उदाहरण सीधे रिलीज अंतराल के "खराब" पटरियों तक ले जाते हैं।

15) सीमा और प्रदर्शन

Ограничивайте: 'OTEL _ SPAN _ COUNT _ COUNT _ LIMITED', 'OTEL _ SPAN _ COUNT _ COUNT _ LIMGART', 'OTEL _ V_ L_ LENT_ LT_ L)'।

संभावना/आवृत्ति द्वारा नमूना/स्टैकट्रेस अपवाद।

एसडीके और कलेक्टर में बैच प्रोसेसर; फटने पर पटरियों को खोने से बचने के लिए कतारें रखें।

16) इंटरऑपरेबिलिटी और माइग्रेशन

प्रचारक: W3C का उपयोग करें; दोहरे प्रचार का समर्थन करें - पढ़ ना।

निर्यात: OTLP → APM (जैगर/टेम्पो/इलास्टिक/एक्स-रे, आदि)।

semconv - fix 'schemaUrl' के स्थिर संस्करण और योजना उन्नयन।

17) एंटी-पैटर्न

विशेषताओं की उच्च कार्डिनैलिटी (लेबल, गतिशील कुंजियों में 'उपयोगकर्ता _ id')।

ट्रेस _ id के बिना लॉग - कोई सहसंबंध नहीं।

अनुप्रयोगों से सीधे इंटरनेट एपीएम में निर्यात करें (बिना गेटवे के, बिना टीएलएस/एमटीएलएस के)।

बिक्री में "केवल" 100% एकत्र करना महंगा और व्यर्थ है।

'db' में उपयोगकर्ता डेटा के साथ SQL प्रश्नों के डंप। कथन '।

असंगत सेवा/संस्करण नाम - मैट्रिक्स "ढहते" हैं।

18) कार्यान्वयन चेकलिस्ट (0-45 दिन)

0-10 दिन

2-3 महत्वपूर्ण सेवाओं पर एसडीके/ऑटो इंस्ट्रूमेंटेशन सक्षम करें।

टीएलएस के साथ एजेंट (डेमनसेट) + गेटवे (तैनाती), ओटीएलपी 4317/4318 कॉन्फ़िगर करें।

जोड़ें 'service। नाम ',' सेवा। संस्करण ',' तैनाती। पर्यावरण 'हर जगह।

11-25 दिन

त्रुटियों/विलंबता/" धन" मार्गों द्वारा पूंछ-नमूना।

SpanMetrics → Prometheus, Exemplars और RED/SLO डैशबोर्ड शामिल हैं।

एपीआई गेटवे/एनजीआईएनएक्स/मेष के माध्यम से W3C का प्रचार करें; सहसंबंधित लॉग।

26-45 दिन

कवर कतारें/डीबी/कैश; Async के लिए लिंक।

कलेक्टर में पीआईआई-संस्करण नीतियां; SDK में विशेषता सीमा।

रिलीज़ और ऑटो-रोलबैक के एसएलओ गेटिंग को एकीकृत करें।

19) परिपक्वता मैट्रिक्स

≥ 95% (नमूना सिर/पूंछ सहित) ट्रेसिंग के साथ आने वाला अनुरोध कवरेज।

Exemplars के साथ मैट्रिक्स का हिस्सा ≥ 80%।

आरसीए समय "मीट्रिक से ट्रेस तक" ≤ 2 मिनट (p50)।

0 पीआईआई विशेषताओं/घटनाओं (स्कैनर) में लीक होता है।

सभी सेवाओं में सर्विस है। नाम/संस्करण/पर्यावरण 'और सुसंगत शब्दार्थ।

20) परिशिष्ट: उपयोगी टुकड़े

NGINX प्रचार:
nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;
proxy_set_header baggage   $http_baggage;
Prometheus с Exemplars (Grafana):

histogram_quantile(0. 95, sum(rate(traces_spanmetrics_duration_bucket{route="/withdraw"}[5m])) by (le))

नीति: पीआईआई विशेषताओं का निषेध (छद्म-लिंटर)

yaml forbid_attributes:
- user. email
- payment. card
- personal.

21) निष्कर्ष

OpenTelemetry अवलोकन को एक मानकीकृत, प्रबंधनीय सर्किट में बदल देता है: एकीकृत शब्दार्थ, सुरक्षित प्रसार, स्मार्ट नमूना और मेट्रिक्स और लॉग के साथ मजबूत सहसंबंध। एक एजेंट + गेटवे बनाएं, टेल-सैंपलिंग, स्पैनमेट्रिक्स और उदाहरण जोड़ें, पीआईआई और कार्डिनैलिटी की निगरानी करें - और ट्रेसिंग न केवल डिबगिंग के लिए, बल्कि स्वचालित एसआरई/रिलीज समाधान के लिए भी।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

Telegram
@Gamble_GC
इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।