GH GambleHub

Իրադարձությունների տրամաբանությունը և ճանապարհը

Իրադարձությունների տրամաբանությունը և ճանապարհը

1) Նպատակը և շրջանակը

Լոգներն ու թրեյսները դիտարկման հիմքն են։

Լոգները պատասխանում են «ինչ պատահեց» և «ինչ ենթատեքստով»։

Թրեյսները պատասխանում են «որտեղ և ինչու դանդաղ/սխալ» հարցման բաշխված ճանապարհին։

Հիմնական սկզբունքները

Structured by default (JSON); Trace-first: Յուրաքանչյուր լոգ տաք ճանապարհով կապված է «trace _ id »/« բանաձև _ id» -ի հետ։

Նվազագույն աղմուկը, առավելագույն ազդանշանը 'մակարդակները, սեմպլինգը, անտի-կարդինալությունը։

Անվտանգությունն ու գաղտնիությունը 'դիմակավորում, խմբագրում, հասանելիության սահմանափակում։

Լոգարանների և իրադարձությունների տարբերակված սխեմաները։


2) Իրադարձությունների տաքսոնոմիա

Բաժանեք հոսքերը և ինդեքսները նպատակներով

1. Տեխնոլոգիական լոգները (runtime, սխալներ, ցանցային թայմաուտներ, ռետրաններ)։

2. Բիզնես իրադարձությունները (ռուսական, դեպոզիտ, տոկոսադրույքը, եզրակացությունը, KYC-քայլը) հարմար են սննդի վերլուծության և «դրամական» ճանապարհների համար։

3. Աուդիտը (ով/երբ ինչ-որ բան փոխեց 'ուլտրաձայններ, մատչելի, դրոշներ, սահմաններ) անփոփոխ ամսագիր է։

4. Անվտանգություն (վավերացում, արտոնությունների սրացում, սանկցիա/RER դրոշներ)։

5. Ենթակառուցվածքը (K8s events, autoscaling, HPA/MSA, 108/սկավառակ/ցանց)։

Յուրաքանչյուր հոսքի համար ռետենշնի, ինդեքսավորման և հասանելիության առանձին կանոններ են։


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, intel, env, trace _ id, www.g»), թվային արժեքներ թվերով, ոչ թե տողերով։


4) Մակարդակները, կարդինալությունը և ծավալը

Մակարդակները ՝ «DEBUG» (ոչ թե վաճառքում), «MS» (բիզնես փաստեր), «WARN» (անոմալիա), «ERROR» (սխալներ), «FATAL» (ներկեր)։

Կարդինալություն 'խուսափեք կամայական կոդերից/դինամիկ label' ից։ Ոչ մի «id-e-բանալին»։

Sampling logs: rate-limit կրկնվող հաղորդագրությունները; միացրեք 'DEBUG' միայն scoped և ժամանակի ընթացքում (feature flag)։

Idempotenty: Տրամաբանեք 'idempotency _ key ", որպեսզի ճնշեն իրադարձությունների կրկնօրինակները սպառողների կողմից։


5) Գաղտնիությունը և անվտանգությունը

Դիմակավորված PII/գաղտնիքները գործակալների վրա (Fluent Bit/Vector) 'բեկորների վրա դիմակավորված քարտեզներ («email», «card», «token», «authorization»)։

Հեշիրուրու 'user _ key ", պահեք միայն անհրաժեշտ կոնտեքստը (երկիր, KYC մակարդակ, VIP-tier)։

Բաժանեք հասցեները ՝ տաք (ստացիոնար որոնում) և սառը (արխիվը առանց PII/c կրճատված համատեքստով)։

Աուդիտը append-only, WORM պահեստը, հասանելիությունը միայն leoftprivilege սկզբունքով։


6) Ուղիներ ՝ ստանդարտներ և համատեքստեր

W3C Trace Disext: վերնագրերը 'traceparent '/« tracestate », գումարած baggage անվտանգ կոդավորման համար (օրինակ ՝« tenrone _ id »,« region »)։

Մետրիկի և թրեյսների կապը 'Exemplars - փոխանցեք «trace _ id» -ը հիստոգրամների մոդելավորված կետերում (արագացնում է RCA)։

Sampling: Հիմնական sempling 1-5% + դինամիկ «սխալների վրա/դանդաղ p95» մինչև 100 տոկոսը խնդրահարույց հարցումների համար։

Links: ասինխրոն հերթերի/սագերի համար կապեք մեջքերը «links» -ի միջոցով, ոչ միայն «parent» -ի միջոցով։


7) Հավաքումը և երթուղայնացումը

Մոսկվա: Fluent Bit/Vector լոգարանների համար; OTLP էքսպորտը OpenTelemetry Collector-ում։

Collector: կենտրոնական դարպասը (batch/transform/wwww.ter/routing)։

Առաջարկվող փոխակրիչը


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)

OTel Collector (հատված)

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) Փոփոխումը 'MSK օրինակներ

8. 1 Node. 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 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 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) Լոգները որպես ազդանշան ալտերտերի և մեքենայական գործողությունների համար

Սխալ patterns («pult _ decium», «fraud _ flag») համախմբեք և հարաբերեք SLO-ի հետ։

Ալերտները pattern-rate: "5xx/withdrance> 0։ 5% 10m", "fraud _ flag spike> + 200 տոկոսը հյուրանոցներից"։

Avto-գործողությունները '«withdrawals _ manium _ mode = mode» -ի դեպքում, միացրեք kill-switch դրոշների պլատֆորմի միջոցով։

Կանոնների օրինակ (կեղծ արտահայտություն)


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

10) Retenshn, ինդեքսավորում, պահպանում

Տաք '7-14 օր (կառավարական հետազոտություն)։

Տաք '30-90 օր (միտումներ, RCA)։

Սառը '180-365 + (արխիվ, աուդիտ) - սեղմված, էժան դասարաններ, հավանաբար առանց ամբողջական որոնման։

Ինդեքսավորումը 'ֆիքսված բանալիներ ("www.d., env, level, event, trace _ id, user. tenrone _ id ")," ամբողջ անընդմեջ "ինդեքսի արգելքը։

Իրադարձության չափի լիմիթները (օրինակ ՝ 323 KB), տրիմը/ներքևից. <<ավելին storage-ում - MTTR-ի թշնամին։


11) Աուդիտ և անփոփոխ

Մրցույթի իրադարձությունները գրեք առանձին հոսք ստորագրությունների/հեշերի, սերվերային ժամանակի, «who/what/when/why», հղում տիկետի վրա։

«Ո՞ վ միացրեց բոնուսների դրոշը 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`, `occurred_at`, `actor`, `subject`, `amount`, `currency`, `status`, `idempotency_key`.

Օգտագործեք Medibox-ը և «at-lement-once» -ը idempotent սպառողների հետ։


13) Kubernetes և pipeline logs

Sidecar/DaemonExpress-ը և բուֆերը սկավառակի վրա (ցանցային ընդմիջումների ժամանակ)։

Ենթատեսակների նույնականացումը երթուղման համար ("log. type`, `retention. tier`).

K8s-վերահսկիչների լոգները հավաքեք առանձին (կլաստերի ինդեքսը)։

Fluent Bit (դիմակավորում, հատված)

ini
[FILTER]
Name     modify
Match
Remove    authorization, password, card_number

14) Anti-patterna

Կառուցվածքային լոգները «ինչպես պետք է», «trace _ id» բացակայությունը։

PII/գաղտնիքները լոգարաններում, տիկնայք payload ամբողջովին։

Միլիոնավոր յուրահատուկ բջիջներ ունեն «պայթեցված» ինդեքսավորում։

DEBUG-ն վաճառում է 24/7։

Փաթեթների, անվտանգության և տեխնոլոգների խառնուրդը մեկ ինդեքսում։

Չկա ռեթենշն քաղաքականություն և վերականգնելու թեստ արխիվից։


15) Ներդրման թուղթ (0-45 օր)

0-10 օր

Միացրեք W3C Trace Disext-ը gateway/հաճախորդների մեջ, փորձելով վերնագրերը։

Թարգմանել պլանային լոգները JSON-ի վրա, ավելացնել «trace _ id »/« բանաձև _ id»։

Արգելել PII/գաղտնիքները (դիմակավորում գործակալին), հաստատել դաշտերի ցանկը։

11-25 օր

Հոսքերը 'tech/biz/audit/www.ru/infra, տեղադրել rentenshn և ACL։

Ներառել OTel Collector-ը, դարձնել tail-sampling սխալներ/դանդաղ հարցումներ։

Dashbords «Log Rate/Error by rope» + Jump-to-trace (Exemplars)։

26-45 օր

Ալերտները իրադարձությունների օրինաչափություններով և SLO-ի հետ հարաբերությամբ։

Արխիվը/վերականգնումը (DR-թեստ) սառը լոգարանների համար։

Linter սխեմաները CI-ում, բիզնես իրադարձությունների պայմանագիր։


16) Հասունության մետրերը

Հարցումների ծածկումը 'trace _ id' 2495 տոկոսն է։

JSON-ի լոգարանների մասը 99 տոկոսն է։

«jump-to-trace» -ի հայտնաբերած միջադեպերը որոշված են <15 րոպե (p50)։

0 PII դեպք լոգարաններում (արտահոսքի սկան)։

Retenshn-ը հետևում է բոլոր հոսանքներին (աուդիտը ինքնաբերաբար ապացուցում ենք)։


17) Ծրագրեր ՝ մինի-սնունդ

W3C traceparent գեներացիա (կեղծ)

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-loga, միասնական' trace _ id ", PII անվտանգ վերամշակումը, երթուղայնացումը և հոսքի միջակայքը, ինչպես նաև SLO-ի, alerting- ի և արձագանքների հետ սերտ կապը։ Անցեք «տեքստերի աղբավայրից» դեպի իրադարձությունների և ուղիների պայմանագրերին, և պրո-հետախուզության ախտորոշումը կդառնա արագ, կանխատեսելի և ստուգելի։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։