GH GambleHub

כריתת עצים ואיתור אירועים

כריתת עצים ואיתור אירועים

1) מטרה ומסגרת

בולי עץ ושבילים הם הבסיס ליכולת התצפית.
יומנים מגיבים ל ”מה שקרה” ו ”באיזה הקשר”.
עקבות מגיבות ל ”איפה ולמה לאט/בטעות” בנתיב שאילתה מבוזר.

עקרונות מפתח:
  • מובנה כברירת מחדל (JSON); trace-first: כל רישום במסלול החם מחויב ל ”trace _ id'/” span _ id'.
  • רעש מינימלי, אות מקסימלי: רמות, דגימה, אנטי-קרדינליות.
  • אבטחה ופרטיות: מיסוך, עריכה, בקרת גישה.
  • תרשימים של יומנים ואירועים.

2) טקסונומיה של אירועים

זרמים ואינדקסים נפרדים לפי יעד:

1. רישומים טכניים (זמן ריצה, שגיאות, פסקי זמן ברשת, מגשים מחדש).

2. אירועים עסקיים (רישום, הפקדה, תעריף, משיכה, שלב KYC) - מתאימים לניתוחי מוצרים ואירועים לאורך נתיבי ”כסף”.

3. Audit הוא כתב עת בלתי ניתן לשינוי.

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

דרישות: סכימה שטוחה + מצורפת לפי תחום, שדות דרושים ('ts, level, service, env, trace_id, msg'), ערכים מספריים - מספרים, לא מחרוזות.


4) רמות, קרדינליות והיקף

רמות: ”DEBUG” (לא במכירות), ”INFO” (עובדות עסקיות), ”אזהרה” (חריגות), ”שגיאה” (שגיאות), ”קטלני” (קריסות).
קרדינליות: הימנע מתוויות שרירותיות של מפתחות/דינמיות. בלי ”זיהוי במפתח”.
דגימה של יומנים: קצב הגבלה חוזר על הודעות; אפשר ”Debug” רק סקופ ובזמן (דגל תכונה).
Idempotency: Log 'idempotency _ key' כדי לדכא אירועים כפולים על ידי הצרכנים.


5) פרטיות וביטחון

מסכה PII/סודות על סוכנים (רהוט Bit/Vector): כרטיסי מיסוך מפתחות ('דוא "ל', 'כרטיס', 'token', 'אישור').
Hash 'user _ key', להחזיק רק את ההקשר הנדרש (country, KYC-level, VIP-tier).
סעיפים נפרדים: חם (חיפוש מקוון) וקר (ארכיון ללא PII/עם הקשר מופשט).
ביקורת - append בלבד, אחסון תולעת, גישה רק על העיקרון של חיסיון מינימלי.


6) איתור: סטנדרטים והקשר

הקשר W3C: "tracepart'/" tracestate" כותרות, בתוספת מטען עבור מפתחות מאובטחים (למשל דייר _ id ',' אזור ').
מטרי קישור ועקבות: Exemplars - pass 'trace _ id' to the dismaging points of the histograms (מאיץ RCA).
דגימה: דגימה בסיסית 1-5% + דינמית ”בשגיאה/איטית p95” עד 100% לשאילתות בעייתיות.
קישורים: עבור תורים אסינכרוני/סאגות, קישור משתרע דרך ”קישורים”, לא רק ”הורה”.


7) איסוף וניתוב

סוכן: רהוט ביט/וקטור ליומנים; יצוא OTLP לאספן OpenTelemetry.
אספן: שער מרכזי (אצווה/טרנספורמציה/פילטר/ניתוב).

מסוע מומלץ:

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 (פינו + אוטל)

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 Java (SLF4J + Otel)

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 _ discovery”, ”fraze _ flag”) מצטברות ומתואמות עם SLO.

התראות על דפוס קצב: "5xx על/נסיגה> 0. 5% לכל 10 מ "מ," fraud_flag ספייק> + 200% של הבסיס "

פעולה אוטומטית: אם הרישום הוא 'withdrawals _ mode ידני _ true', אפשר להרוג-מתג דרך פלטפורמת הדגל.

כלל לדוגמה (פסאודו-ביטוי):

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

10) שימור, אינדקס, אחסון

חם: 7-14 ימים (חקירה מבצעית).
חם: 30-90 יום (מגמות, RCA).
קר: 180-365 + (ארכיון, ביקורת חשבונות) - דחיסה, כיתות זולות, אולי ללא חיפוש טקסט מלא.
אינדקס: מפתחות קבועים ('שירות, env, רמה, אירוע, trace_id, משתמש. tenant_id'), איסור על אינדקס ”כל דבר ברצף”.
גודל האירוע מוגבל (לדוגמה, 32KB): ”תוספת האחסון היא האויב של MTTR”.


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 _ id', 'התרחש _ at', 'שחקן', 'נושא', 'סכום', 'מטבע', 'סטטוס', 'idmpotency _ key'.
  • השתמש בארגז חיצוני ו ”לפחות פעם אחת” עם צרכנים אידיוטים.

13) קוברנטס ויומני צינור

סוכני Sidecar/DaemonSet עם חוצץ לדיסק (במהלך הפרעות רשת).
אנוטציות של רפידות לניתוב ('log. סוג ',' שימור. Tier ').
איסוף היומנים של בקרי K8s בנפרד (מדד אשכול).

ביט רהוט:
ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) אנטי דפוסים

רישומי מחרוזת "לפי הצורך", היעדר "trace _ id'.
PII/סודות ביומנים, מטענים זורקים בשלמותם.
מיליוני מפתחות ייחודיים * ”התפוצצו” באינדקס.
דיבוג במבצע 24/7.
ערבוב ביקורת, אבטחה וטכנולוגים לאינדקס אחד.
אין מדיניות שימור ואין בדיקת שיקום גיבוי.


15) רשימת יישומים (0-45 ימים)

0-10 ימים

אפשר קישור W3C על שער/לקוחות, העברת כותרות.
תרגם רישומי יישומים ל ־ JSON, הוסף את ”trace _ id'/” span _ id'.
מכחיש את הסודות (מסווה על הסוכן), מאשר את רשימת השדות.

11-25 ימים

זרמים נפרדים: tech/biz/audit/security/infra, set restruction ו-ACL.
אפשר אספן אוטל, שגיאות דגימת זנב/שאילתות איטיות.
לוחות מחוונים ”קצב רישום/שגיאה לפי מסלול” + Jump-to-trace (מופת).

26-45 ימים

התראות ודפוס אירוע ומתאם עם SLO.
ארכיון/שחזור (מבחן ד "ר) ליומנים קרים.
תרשים יומן במודיע, חוזה לאירועים עסקיים.


16) מדדי בגרות

'trace _ id' request כיסוי la 95%.
הנתח של יומני JSON id 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 מבניים, רישום יחיד של trace _ id, עיבוד PII מאובטח, ניתוב ושמירה על זרמים, כמו גם קשר הדוק עם SLO, התראה וגלגולים. עשה את המעבר מ ”מזבלה של טקסטים” לחוזי אירועים ומסלולים, והאבחנה של תקריות ייצור תהפוך מהירה, צפויה וניתנת לאימות.

Contact

צרו קשר

פנו אלינו בכל שאלה או צורך בתמיכה.אנחנו תמיד כאן כדי לעזור.

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.