GH GambleHub

लॉगिंग और ट्रेसिंग घटनाएँ

लॉगिंग और ट्रेसिंग घटनाएँ

1) उद्देश्य और फ्रेम

लॉग और ट्रेल्स अवलोकन की नींव हैं।

लॉग्स ने "क्या हुआ" और "किस संदर्भ के साथ" का जवाब दिया।

निशान एक वितरित क्वेरी पथ में "कहां और क्यों धीरे-धीरे/गलती से" का जवाब देते हैं।

मुख्य सिद्धांत:
  • डिफ़ॉल्ट रूप से संरचित (JSON); ट्रेस-प्रथम: हॉट पथ पर प्रत्येक लॉग 'ट्रेस _ आईडी '/' स्पैन _ आईडी' के लिए बाध्य है।
  • शोर न्यूनतम, संकेत अधिकतम: स्तर, नमूना, विरोधी कार्डिनैलिटी।
  • सुरक्षा और गोपनीयता: मास्किंग, संपादन, पहुंच नियंत्रण।
  • लॉग और घटनाओं के वर्गीकृत आरेख।

2) घटनाओं का वर्गीकरण

गंतव्य द्वारा अलग धाराएँ और सूचकांक:

1. तकनीकी लॉग (रनटाइम, त्रुटियां, नेटवर्क टाइमआउट, रिट्रे)।

2. व्यावसायिक कार्यक्रम (पंजीकरण, जमा, दर, निकासी, केवाईसी चरण) - उत्पाद एनालिटिक्स और "धन" रास्तों के साथ घटनाओं के लिए उपयुक्त।

3. ऑडिट (जो/जब बदल गया है: कॉन्फ़िग, एक्सेस, फ्लैग, लिमिट) एक अपरिवर्तनीय पत्रिका है।

4. सुरक्षा (प्रमाणीकरण, विशेषाधिकार वृद्धि, मंजूरी/पीईपी झंडे)।

5. इन्फ्रास्ट्रक्चर (K8s इवेंट्स, ऑटोस्कलिंग, एचपीए/वीपीए, नोड्स/डिस्क/नेटवर्क)।

प्रत्येक धारा - प्रतिधारण, अनुक्रमण और पहुंच के लिए अलग नियम।


3) संरचनात्मक लॉग (JSON मानक)

json
{
"ts": "2025-11-03T14:28:15.123Z",
"level": "ERROR",
"service": "payments-api",
"env": "prod",
"region": "eu-central-1",
"trace_id": "8a4f0c2e9b1f42d7",
"span_id": "c7d1f3a4b8b6e912",
"parent_span_id": "a1b2c3d4e5f60789",
"logger": "withdraw.handler",
"event": "psp_decline",
"msg": "PSP declined transaction",
"http": { "method": "POST", "route": "/withdraw", "status": 502, "latency_ms": 842 },
"user": { "tenant_id": "t_9f2", "user_key": "hash_0a7c", "vip_tier": 3 },
"payment": { "psp": "acme", "amount": 120.50, "currency": "EUR", "idempotency_key": "u123:wd:7845" },
"safe": true,         // пройдена проверка на секреты
"version": "1.14.2",     // версия сервиса (SemVer)
"build": "sha-1f2a3b4",
"kubernetes": { "pod": "payments-7cbdf", "node": "ip-10-0-2-41" }
}

आवश्यकताएं: फ्लैट योजना + डोमेन द्वारा संलग्नक, आवश्यक क्षेत्र ('ts, स्तर, सेवा, env, trace_id, msg'), संख्यात्मक मान - संख्या, स्ट्रिंग नहीं।


4) स्तर, कार्डिनैलिटी और गुंजाइश

स्तर: 'DEBUG' (बिक्री में नहीं), 'INFO' (व्यावसायिक तथ्य), 'WARN' (विसंगतियाँ), 'ERROR' (त्रुटियां), 'FATAL' (क्रैश)।

कार्डिनैलिटी: मनमानी कुंजी/गतिशील लेबल से बचें। कोई "id-in-key" नहीं।

नमूना लॉग: दर-सीमा दोहराने वाले संदेश; केवल scoped और समय में 'DEBUG' सक्षम करें (सुविधा ध्वज).

Idempotency: उपभोक्ताओं द्वारा डुप्लिकेट घटनाओं को दबाने के लिए 'idempotency _ key' लॉग करें।


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

एजेंटों पर मास्क PII/रहस्य (धाराप्रवाह बिट/वेक्टर): कुंजी मास्किंग कार्ड ('ईमेल', 'कार्ड', 'टोकन', 'प्राधिकरण')।

हैश 'user _ key', केवल आवश्यक संदर्भ (देश, KYC-level, VIP-tier) धारण करें।

अलग भंडारण: गर्म (ऑनलाइन खोज) और ठंड (PII के बिना संग्रह/एक छीन लिए गए संदर्भ के साथ)।

ऑडिट - एपेंड-ओनली, वर्म स्टोरेज, केवल कम से कम विशेषाधिकार के सिद्धांत पर पहुंच।


6) ट्रेसिंग: मानक और संदर्भ

W3C ट्रेस संदर्भ: 'traceparent '/' tracestate' हेडर, सुरक्षित कुंजियों के लिए सामान (जैसे) 'किरायेदार _ id', 'क्षेत्र')।

लिंक मैट्रिक्स और निशान: Exemplars - 'trace _ id' to histograms के नमूना बिंदुओं (RCA को त्वरित करता है) को पास करें।

नमूना: समस्या के प्रश्नों के लिए मूल नमूना 1-5% + गतिशील "त्रुटि/धीमी p95 पर" 100% तक।

लिंक: अतुल्यकालिक कतारों/सागाओं के लिए, लिंक 'लिंक' के माध्यम से फैला है, न कि केवल 'माता-पिता'।


7) संग्रह और मार्ग

एजेंट: लॉग के लिए धाराप्रवाह बिट/वेक्टर; OpenTelemetry कलेक्टर को OTLP निर्यात।

कलेक्टर: केंद्रीय प्रवेश द्वार (बैच/ट्रांसफॉर्म/फ़िल्टर/रूटिंग)।

अनुशंसित कन्वेयर:

App → (OTLP logs/traces/metrics) → OTel Collector
→ logs: redact → route(security    audit    tech    biz) → hot index / cold archive
→ traces: tail_sampling(errors    p95>threshold) → APM backend
→ metrics: Prometheus exporter (for SLO/alerts)
ओटेल कलेक्टर (टुकड़ा):
yaml processors:
batch: {}
attributes:
actions:
- key: env value: prod action: insert filter/logs:
logs:
include:
match_type: strict resource_attributes:
- key: service.name value: payments-api exporters:
otlp/traces: { endpoint: "apm:4317", tls: { insecure: true } }
loki: { endpoint: "http://loki:3100/loki/api/v1/push" }
prometheus: {}
service:
pipelines:
logs: { receivers: [otlp], processors: [attributes,batch], exporters: [loki] }
traces: { receivers: [otlp], processors: [batch], exporters: [otlp/traces] }
metrics: { receivers: [otlp], processors: [batch], exporters: [prometheus] }

8) इंस्ट्रूमेंटेशन: एसडीके उदाहरण

8. 1 नोड। जेएस (पिनो + ओटेल)

js import pino from "pino";
import { context, trace } from "@opentelemetry/api";

const logger = pino({ level: process.env.LOG_LEVEL          "info" });

function log(info) {
const span = trace.getSpan(context.active());
const base = span? { trace_id: span.spanContext().traceId, span_id: span.spanContext().spanId }: {};
logger.info({...base,...info });
}

// пример log({ event: "deposit.created", amount: 50, currency: "EUR", user: { user_key: "hash_0a7c" } });

8. 2 जावा (SLF4J + ओटेल)

java
MDC.put("trace_id", Span.current().getSpanContext().getTraceId());
MDC.put("span_id", Span.current().getSpanContext().getSpanId());
log.info("psp_response status={} latency_ms={}", status, latency);

8. 3 पायथन (structlog + Otel)

python import structlog from opentelemetry import trace log = structlog.get_logger()

def log_json(event, kwargs):
span = trace.get_current_span()
ctx = {}
if span and span.get_span_context().is_valid:
ctx = {"trace_id": span.get_span_context().trace_id, "span_id": span.get_span_context().span_id}
log.msg(event=event, ctx, kwargs)

8. 4 NGINX → हेडर ट्रेसिंग

nginx proxy_set_header traceparent $http_traceparent;
proxy_set_header tracestate $http_tracestate;

9) अलर्ट और ऑटो-क्रियाओं के लिए एक संकेत के रूप में लॉग

त्रुटिपूर्ण पैटर्न ('psp _ dince', 'frought _ flag') SLO के साथ कुल और सहसंबंधित।

पैटर्न-दर पर अलर्ट: "5xx द्वारा/वापस लेना> 0। 5% प्रति 10 मी," "fraud_flag स्पाइक> + 200% आधार"।

स्वतः क्रियाएँ: यदि लॉग 'withdrwals _ manual _ mode = true' है, तो फ्लैग प्लेटफॉर्म के माध्यम से किल-स्विच सक्षम करें।

उदाहरण नियम (छद्म अभिव्यक्ति):

rate(count_over_time({service="payments-api", level="ERROR", event="psp_decline"}[5m])) > 5

10) प्रतिधारण, अनुक्रमण, भंडारण

गर्म: 7-14 दिन (परिचालन जांच)।

गर्म: 30-90 दिन (रुझान, आरसीए)।

ठंड: 180-365 + (संग्रह, ऑडिट) - संपीड़न, सस्ती कक्षाएं, संभवतः पूर्ण-पाठ खोज के बिना।

अनुक्रमण: निश्चित कुंजी ('सेवा, एनवी, स्तर, घटना, trace_id, उपयोगकर्ता। tenant_id'), "एक पंक्ति में सब कुछ" सूचकांक पर प्रतिबंध।

घटना आकार की सीमा (उदाहरण के लिए, ≤ 32KB), ट्रिम/बॉटम: "अतिरिक्त भंडारण एमटीटीआर का दुश्मन है।"


11) लेखा परीक्षा और अपरिपक्वता

एक अलग स्ट्रीम में हस्ताक्षर/हैश, सर्वर समय, 'कौन/क्या/कब/क्यों', टिकट का लिंक लिखें।

"डीई में बोनस ध्वज 100% किसने शामिल किया?" - उत्तर 1-2 अनुरोधों में होना चाहिए।

लेखा परीक्षा उदाहरण:
json
{
"ts": "2025-11-03T14:00:00.000Z",
"actor": "alice@company",
"action": "feature_flag.update",
"target": "bonus.enable_vip",
"old": {"rollout": 10},
"new": {"rollout": 100},
"reason": "campaign_2311",
"ticket": "OPS-3481",
"trace_id": "cf12ab.."
}

12) बिजनेस इवेंट्स एंड डेटा मॉडल

व्यावसायिक कार्यक्रम "लॉग में पाठ" नहीं हैं, लेकिन एक अनुबंध है:
  • 'event _ type', 'event _ id', 'event _ at', 'actor', 'suption', 'money', 'station', 'idempotency _ key'।
  • आउटबॉक्स और "कम से कम-एक बार" पहचाने जाने वाले उपभोक्ताओं के साथ उपयोग करें।

13) कुबर्नेट्स और पाइपलाइन लॉग

बफर से डिस्क (नेटवर्क रुकावट के दौरान) के साथ साइडकार/डेमनसेट एजेंट।

रूटिंग के लिए पैड की एनोटेशन ('लॉग। प्रकार ',' प्रतिधारण। टियर ')।

K8s नियंत्रक के लॉग को अलग से इकट्ठा करें (क्लस्टर इंडेक्स)।

धाराप्रवाह बिट:
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

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

स्ट्रिंग लॉग "आवश्यक के रूप में", 'ट्रेस _ आईडी' की अनुपस्थिति।

लॉग में पीआईआई/रहस्य, उनकी संपूर्णता में पेलोड डंप।

लाखों अद्वितीय कुंजियाँ - "विस्फोट" अनुक्रमण।

24/7 बिक्री में DEBUG।

लेखा परीक्षा, सुरक्षा और प्रौद्योगिकीविदों को एक सूचकांक में मिलाना।

कोई प्रतिधारण नीति नहीं है और कोई बैकअप वसूली परीक्षण नहीं है।


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

0-10 दिन

गेटवे/क्लाइंट पर W3C ट्रेस संदर्भ सक्षम करें, शीर्षिका अग्रेषित करें।

अनुप्रयोग लॉग को JSON में अनुवाद करें, 'trace _ id '/' span _ id' जोड़ें.

इनकार PII/रहस्य (एजेंट पर मास्किंग), क्षेत्रों की सूची को मंजूरी दें।

11-25 दिन

अलग धाराएं: तकनीक/बिज ़/ऑडिट/सुरक्षा/इंफ्रा, सेट रिटेंशन और एसीएल।

ओटेल कलेक्टर, टेल-सैंपलिंग त्रुटियों/धीमी प्रश्नों को सक्षम करें।

डैशबोर्ड "लॉग रेट/रूट द्वारा त्रुटि" + जंप-टू-ट्रेस (Exemplars)।

26-45 दिन

घटना पैटर्न अलर्ट और SLO के साथ सहसंबंध।

ठंडे लॉग के लिए अभिलेख/पुनर्स्थापन (डीआर परीक्षण)।

सीआई में लॉग आरेख का लिंटर, व्यावसायिक कार्यक्रमों के लिए अनुबंध।


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

'ट्रेस _ id' request कवरेज ≥ 95%।

JSON का हिस्सा ≥ 99% है।

"जंप-टू-ट्रेस" के माध्यम से पाई गई घटनाओं को हल किया गया <15 मिनट (p50)।

लॉग में 0 पीआईआई मामले (लीक स्कैनर)।

प्रतिधारण सभी प्रवाह के लिए देखा जाता है (हम ऑडिट को स्वचालित रूप से साबित करते हैं)।


17) ऐप्स: मिनी स्निपेट्स

W3C ट्रेसपेंट पीढ़ी (छद्म)

txt traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

PromQL - लॉग और SLO का एक समूह (उदाहरण)


high_error_logs = rate(log_events_total{service="payments-api",level="ERROR"}[5m])
5xx_rate = sum(rate(http_requests_total{service="payments-api",status=~"5.."}[5m])) / sum(rate(http_requests_total{service="payments-api"}[5m]))
alert if high_error_logs > 10 and 5xx_rate > 0.005

OpenAPI - सहसंबंध शीर्षिका

yaml components:
parameters:
Traceparent:
name: traceparent in: header required: false schema: { type: string }

18) निष्कर्ष

एक मजबूत लॉगिंग और ट्रेसिंग सर्किट एक समझौता + अनुशासन है: संरचनात्मक JSON लॉग, एक एकल 'ट्रेस _ आईडी', सुरक्षित PII प्रसंस्करण, धाराओं पर रूटिंग और प्रतिधारण, साथ ही एसएलओ, अलर्ट और रोलबैक के साथ। "ग्रंथों के डंप" से घटना अनुबंध और पटरियों तक संक्रमण करें, और उत्पादन की घटनाओं का निदान तेज, अनुमानित और सत्यापित हो जाएगा।

Contact

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

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

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

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

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

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