GH GambleHub

أحداث قطع الأشجار واقتفاء أثرها

أحداث قطع الأشجار واقتفاء أثرها

1) الغرض والإطار

الجذوع والمسارات هي أساس إمكانية الملاحظة.
تستجيب السجلات لـ «ما حدث» و «بأي سياق».
تستجيب الآثار لـ «أين ولماذا ببطء/خطأ» في مسار الاستعلام الموزع.

المبادئ الرئيسية:
  • هيكل افتراضي (JSON) ؛ التتبع أولاً: كل سجل على المسار الساخن مرتبط بـ 'تتبع _ id '/' span _ id'.
  • الحد الأدنى للضوضاء، الحد الأقصى للإشارة: المستويات، أخذ العينات، مكافحة الكاردينالية.
  • الأمن والخصوصية: الإخفاء والتحرير والتحكم في الوصول.
  • مخططات مجمعة لجذوع الأشجار والأحداث.

2) تصنيف الأحداث

تدفقات وفهارس منفصلة حسب الوجهة:

1. السجلات التقنية (وقت التشغيل، الأخطاء، مواعيد الشبكة، إعادة التصوير).

2. أحداث الأعمال (التسجيل، الإيداع، السعر، السحب، مرحلة KYC) - مناسبة لتحليلات المنتج والحوادث على طول مسارات «المال».

3. التدقيق (من/عند تغيير ما: التكوينات، والوصول، والأعلام، والحدود) هو مجلة غير قابلة للتغيير.

4. الأمن (التوثيق، تصعيد الامتياز، العقوبات/أعلام PEP).

5. البنية التحتية (الأحداث K8s، التوزيع التلقائي، HPA/VPA، العقد/القرص/الشبكة).

لكل تدفق - قواعد منفصلة للاحتفاظ والفهرسة والوصول.


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" }
}

المتطلبات: مخطط مسطح + ملحقات حسب المجال، الحقول المطلوبة ('s، المستوى، الخدمة، env، trace_id، msg ')، القيم العددية - الأرقام، وليس الأوتار.


4) المستويات والكاردينية والنطاق

المستويات: «DEBUG» (ليس في المبيعات)، «INFO» (حقائق العمل)، «WARN» (الحالات الشاذة)، «خطأ» (أخطاء)، «FATAL» (حوادث).
الكاردينالية: تجنب المفاتيح التعسفية/الملصقات الديناميكية. لا «هوية في المفتاح».
سجلات أخذ العينات: الرسائل المتكررة ذات الحد الأقصى للمعدل ؛ مكّن «DEBUG» من تحديد النطاق فقط وفي الوقت المناسب (علم الميزة).
الخصوصية: سجل «الخصوصية _ المفتاح» لقمع الأحداث المكررة من قبل المستهلكين.


5) الخصوصية والأمن

قناع PII/أسرار على الوكلاء (Fluent Bit/Vector): بطاقات إخفاء المفاتيح («البريد الإلكتروني»، «البطاقة»، «الرمز المميز»، «التفويض»).
Hash 'user _ key'، يحمل فقط السياق المطلوب (البلد، مستوى KYC، مستوى VIP).
مخزونات منفصلة: دافئة (بحث عبر الإنترنت) وباردة (أرشيف بدون PII/مع سياق مجرد).
مراجعة الحسابات - المرفقة فقط، تخزين WORM، الوصول فقط على مبدأ أقل امتياز.


6) التعقب: المعايير والسياق

سياق تتبع W3C: رؤوس «traceparent »/« tracestate»، بالإضافة إلى الأمتعة للمفاتيح الآمنة (على سبيل المثال 'مستأجر _ معرف'، 'منطقة').
مقاييس الربط والآثار: نماذج - تمرير «تتبع _ معرف» إلى نقاط أخذ العينات في المخطط النسيجي (تسريع RCA).
أخذ العينات: أخذ العينات الأساسية 1-5٪ + ديناميكية «على خطأ/بطيء p95» حتى 100٪ للاستفسارات عن المشكلة.
الروابط: بالنسبة لقوائم الانتظار/الملاحم غير المتزامنة، يمتد الرابط من خلال «الروابط»، وليس فقط «الأم».


7) الجمع والتوجيه

العامل: بت/متجه بطلاقة للسجلات ؛ تصدير OTLP إلى OpenTelemetry Collector.
المجمع: البوابة المركزية (الدفعة/التحويل/الفلتر/التوجيه).

الناقل الموصى به:

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) الأجهزة: أمثلة SDK

8. 1 عقدة. js (Pino + OTel)

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 Python (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 _ disk» و «fraud _ flag») تتجمع وتترابط مع SLO.

تنبيهات حول معدل النمط: "5xx بواسطة/سحب> 0. 5٪ لكل 10 م،" "ارتفاع fraud_flag> + 200٪ من القاعدة"

الإجراءات التلقائية: إذا كان السجل «withdrawals _ mandual _ mode = true»، فمكّن من تبديل القتل عبر منصة العلم.

قاعدة المثال (التعبير الزائف):

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

10) الاحتفاظ والفهرسة والتخزين

الساخنة: 7-14 يومًا (تحقيق تشغيلي).
دافئ: 30-90 يومًا (اتجاهات، RCA).
Cold: 180-365 + (أرشيف، تدقيق) - ضغط، فئات رخيصة، ربما بدون بحث النص الكامل.
الفهرسة: المفاتيح الثابتة ('الخدمة، البيئة، المستوى، الحدث، trace_id، المستخدم. tenant_id')، حظر على مؤشر «كل شيء على التوالي».
حدود حجم الحدث (على سبيل المثال، ≤ 32 كيلوبايت)، تقليم/قاع: «التخزين الإضافي هو عدو MTTR».


11) مراجعة الحسابات وعدم قابلية التغيير

اكتب أحداث التدقيق في تدفق منفصل مع التوقيعات/التجزئة ووقت الخادم و «من/ماذا/متى/لماذا»، رابط للتذكرة.
«من أدرج علم المكافأة 100٪ في DE ؟» - يجب أن تكون الإجابة في الطلبات 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"، "حدث _ at'،" ممثل "،" موضوع "،" مبلغ "،" عملة "،" حالة "،" idempotency _ key ".
  • استخدم Outbox و «مرة واحدة على الأقل» مع المستهلكين الأغبياء.

13) Kubernetes وسجلات خطوط الأنابيب

عناصر Sidecar/DaemonSet مع مخزن مؤقت للقرص (أثناء انقطاع الشبكة).
شروح لوحات التوجيه ('log. نوع '،' الاحتفاظ. المستوى ').
جمع سجلات أجهزة التحكم K8s بشكل منفصل (فهرس المجموعة).

بت بطلاقة:
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) الأنماط المضادة

سجلات السلسلة «حسب الضرورة»، عدم وجود «أثر _ معرف».
PII/أسرار في السجلات، مقالب الحمولة بالكامل.
ملايين المفاتيح الفريدة → الفهرسة «المنفجرة».
DEBUG في البيع 24/7.
مزج التدقيق والأمن والتقنيين في مؤشر واحد.
لا توجد سياسة احتفاظ ولا اختبار استعادة احتياطي.


15) قائمة التنفيذ المرجعية (0-45 يوما)

0-10 أيام

تمكين سياق تتبع W3C على البوابة/العملاء، وإرسال الرؤوس.
ترجم سجلات التطبيقات إلى JSON، أضف «trace _ id »/« span _ id».
إنكار PII/الأسرار (إخفاء الوكيل)، الموافقة على قائمة الحقول.

11-25 يومًا

تدفقات منفصلة: tech/biz/audit/security/infra، مجموعة الاحتفاظ و ACL.
تمكين جامع OTEL، أخطاء أخذ عينات الذيل/الاستفسارات البطيئة.
لوحات العدادات «معدل التسجيل/الخطأ حسب المسار» + القفز إلى التتبع (النماذج).

26-45 يومًا

تنبيهات نمط الحدث والارتباط مع SLO.
أرشيف/استعادة (اختبار DR) لسجلات البرد.
Linter of log diagrams in CI, contract for business events.


16) مقاييس النضج

تغطية البحث «Trace _ id» ≥ 95٪.
حصة سجلات JSON ≥ 99٪.
تم حل الحوادث التي تم العثور عليها عبر «القفز إلى التتبع» <15 دقيقة (p50).
0 حالات PII في جذوع الأشجار (ماسح تسرب).
ويلاحظ الاحتفاظ بجميع التدفقات (نثبت المراجعة تلقائيا).


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 الآمنة، والتوجيه والاحتفاظ عبر التدفقات، بالإضافة إلى اتصال وثيق مع SLO، والتنبيه والتراجع. الانتقال من «تفريغ النصوص» إلى عقود الأحداث والمسارات، وسيصبح تشخيص حوادث الإنتاج سريعًا ويمكن التنبؤ به ويمكن التحقق منه.

Contact

اتصل بنا

تواصل معنا لأي أسئلة أو دعم.نحن دائمًا جاهزون لمساعدتكم!

بدء التكامل

البريد الإلكتروني — إلزامي. تيليغرام أو واتساب — اختياري.

اسمك اختياري
البريد الإلكتروني اختياري
الموضوع اختياري
الرسالة اختياري
Telegram اختياري
@
إذا ذكرت تيليغرام — سنرد عليك هناك أيضًا بالإضافة إلى البريد الإلكتروني.
WhatsApp اختياري
الصيغة: رمز الدولة + الرقم (مثال: +971XXXXXXXXX).

بالنقر على الزر، فإنك توافق على معالجة بياناتك.