GH GambleHub

Urmărire distribuită

(Secțiunea: Tehnologie și infrastructură)

Scurt rezumat

Urmele distribuite oferă un răspuns la întrebarea unde și de ce se pierde timpul de-a lungul căii de solicitare prin gateway, API, cozi, baze de date, furnizori externi (PSP/studiouri de jocuri). OpenTelemetry (OTel) este un standard deschis SDK/agent/protocol care combină trasee, valori și jurnale. În iGaming, este un instrument de bază pentru a păstra p95/p99, localiza rapid problemele de plată și de a identifica blocajele înainte de turnee de vârf.

1) Concepte OTel

Trace - calea completă a operațiunii (depozit, rata, retragere).
Span - zona de lucru (handler HTTP, cerere SQL, coadă/apel furnizor).
Atribute - cheie valoare cu detalii ('net. peer. name ',' db. sistem „,” psp. traseu ").
Evenimente - evenimente instant (retragere, timeout, cache miss).
Link-uri - link către alte urme (importante pentru async/coadă).
Resurse - metadate de proces: 'service. nume „,” serviciu. versiune ',' implementare. mediu „,” nor. regiune ".

2) Propagarea contextului

Utilizaţi W3C Trace Context:

traceparent: 00-<trace_id>-<span_id>-01 tracestate:...

În plus - bagaje pentru chei securizate (de exemplu, „chiriaș”, „rută”), nu pune PII acolo.

În cazul în care pentru a puncta contextul: API gateway → RPC-uri interne → producător să stea la coadă → consumator → extern HTTP (PSP/furnizori).

3) Convenții semantice (minime obligatorii)

HTTP/RPC: "http. metoda „,” http. ruta ',' http. status_code'.
DB/cache: 'db. system '(' mysql '/' postgresql '/' redis '),' db. declarație „(mascat),” db. operaţiunea ".
Cozi: "mesagerie. system '(' kafka '/' rabbitmq '),' mesagerie. destinaţie „,” mesagerie. operațiunea "(" trimite "/" proces ").
Plăți: "psp. traseu „,” psp. furnizor „,” plată. id '(pseudonim),' sumă ',' monedă '.
Domeniul iGaming: 'joc. furnizor „,” joc. session_id' (hash), "jucător. id_hash'.

O singură taxonomie → comparabilitatea tablourilor de bord și o căutare rapidă a cauzelor.

4) Eșantionare: Cum să nu se înece în date

Bazat pe cap

Simplu, ieftin; potrivit pentru fluxul general.
Minus - puteți pierde „interesant” piese lente/eronate.

Pe bază de coadă (Colector в)

Decizia se ia după terminarea intervalelor: salvăm numai erori/segmente lente/importante (VIP/plăți).
Ideal pentru sarcina de producție: reduce foarte mult costurile cu conținut ridicat de informații.

Hibrid recomandat:
  • Cap: 5-10% pentru acoperirea „de fundal”.
  • Coada: 100% eroare + p95 + lent + piese de plată/canar versiuni.

5) OpenTelemetry topologii colector

Agent-sidecar (pe fiecare nod/pod): acceptare locală, tampon minim, export în agregator.
Gateway (cluster): prelevare de probe, rutare, îmbogățire, export în Tempo/Jaeger/Zipkin/OTLP.

Exemplu: prelevarea de probe (fragment YAML)

yaml processors:
tailsampling:
decision_wait: 5s policies:
- name: errors type: status_code status_code:
status_codes: [ ERROR ]
- name: slow_p95 type: latency latency:
threshold_ms: 250
- name: payments type: string_attribute string_attribute:
key: service. name values: [ "payments-api", "payments-worker" ]

6) Corelarea cu valorile și jurnalele

Adăugați 'trace _ id'/' span _ id' la fiecare intrare în jurnal.
Stocați măsurătorile de latență ca histograme și includeți exemplare - o referință la reprezentantul „trace _ id' pentru un” salt' de la p95-boket la o anumită urmă.
Lansați adnotări (Git SHA, versiunea diagramă) - cum ar fi evenimente/etichete.

7) Instrumentație (limbi și agenți auto)

Go (manual + auto)

go tp:= sdktrace. NewTracerProvider(
sdktrace. WithBatcher(exporter),
sdktrace. WithResource(resource. NewWithAttributes(
semconv. SchemaURL,
semconv. ServiceName("payments-api"),
)),
)
otel. SetTracerProvider(tp)

ctx, span:= tracer. Start(ctx, "Deposit")
defer span. End()
span. SetAttributes(
attribute. String("psp. route","pspX"),
attribute. String("currency","EUR"),
)

Java

Auto-agent '-javaagent: opentelemetry-javaagent. jar ', config via env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPORTER _ OTLP _ ENDPOINT ').
Manual - adnotări/unealtă de locuri de ceapă (piscine JDBC, cache).

Nod. js/Python

Auto-instrument cu SDK + plugin-uri (Express/FastAPI/telina).
Pentru cozi - producător/ambalaje de consum pentru a pune "mesagerie. "Și link-uri.

8) Cozi și async: deschideri corecte

Producator ('trimite'): durata pentru a trimite la subiect/coada.
Consumator ("proces"): o nouă perioadă de procesare a mesajelor de la link la producător (salvați relația cauzală fără "trace _ id').
Atribute: "mesagerie. kafka. partiție „,” mesagerie. rabbitmq. routing_key', "mesagerie. message_id'.
Cu retroys - eveniment „încercați din nou”, încercați contra.

9) DB/Cache și N + 1

Activați urmărirea driverului bazei de date, interogări de grup de același tip în loturi.
Pentru Redis/cache, atributele sunt 'cache. hit '/' cache. domnișoară ".
Scoateți cererile „grele” pentru a separa deschiderile - puteți vedea unde p99.

10) Furnizori externi: PSP/studiouri de jocuri

Împachetați clienții HTTP: "psp. furnizor „,” psp. route ',' timeout _ ms', 'încercare'.
Coduri de eroare/tipuri de jurnal, dar nu PII (numărul cardului, jetoane).
Comparați studiourile/rutele prin „durată”, „rata de eroare”.

11) Frontend și RUM

OTel Web SDK: 'page _ view', 'resource _ load', 'xhr'.
Pierce 'traceparent' în backend pentru a coase calea utilizatorului prin baza de date UI → API →.
Segmentarea de către furnizorii de geo/rețea - etichete opționale.

12) Siguranță și PII

Maschează câmpurile ('db. declarație 'editat), hash' player _ id'.
Zonele de date: 'pii = true', 'region = EU/TR/LATAM'.
Controlul accesului la pistele de plată (bazate pe roluri).
WORM/retenție: perioade de păstrare pentru urme sensibile, ștergerea prin politică.

13) Performanță și cost

Eșantionarea în funcție de politică: „erori + lent + plăți + eliberări canare”.
Sub-eșantionarea histogramelor de metrică, deduplicarea jurnalului agresiv.
Constrângerea cardinalității: Nu scrieți 'user _ id' ca etichetă metrică.
Tampoane/loturi în Colector, compresie OTLP.

14) Tablouri de bord și analiză

Harta serviciului: dependențe de servicii, colorare eroare/latență.
Release compare: stabil vs canary revision (p95, error-rate, payments cont).
Top urme lente: de-a lungul rutei „/depozit ”, secțiunea de-a lungul PSP/regiune.
Coada de așteptare: Pistele de întârziere a consumului profund.

15) Exemple de configurații colector

Conducte (metrici/trasee/busteni, fragment)

yaml receivers:
otlp: { protocols: { http: {}, grpc: {} } }

processors:
batch:
memory_limiter:
limit_mib: 1024 spike_limit_mib: 256 attributes/payments:
actions:
- key: "psp. provider"
action: insert value: "pspX"

exporters:
otlp/traces: { endpoint: tempo:4317, tls: { insecure: true } }
otlp/metrics:{ endpoint: prometheus-otlp:4317, tls: { insecure: true } }
otlp/logs:  { endpoint: loki-otlp:4317, tls: { insecure: true } }

service:
pipelines:
traces:
receivers: [ otlp ]
processors: [ memory_limiter, batch, tailsampling ]
exporters: [ otlp/traces ]
metrics:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/metrics ]
logs:
receivers: [ otlp ]
processors: [ batch ]
exporters: [ otlp/logs ]

16) Runbooks (scenarii tipice)

A) creșterea p99 în „plăți-api”

1. Deschideți „Top lent traces” → se încadrează în baze de date/deschideri PSP.
2. Dacă problema PSP este de a traduce ruta, activați retraiele/timeout-urile.
3. Verificați coada 'withdrawals' (lag), crește consumatorii.

B) bug-uri 5xx post-lansare

1. Filtrează după service. versiunea ".
2. Comparați stabil/canar; Găseşte ţepi în PSP. traseu ".
3. Freeze promovare, rola înapoi (a se vedea Strategii de lansare/Rollbacks).

C) Suspect N + 1

1. Trasee cu un număr mare de deschideri scurte DB.
2. Activați agregarea/joyns, adăugați stratul cache.

17) Lista de verificare a implementării

1. Activați atributele OTel SDK și uniform Resource ('service. nume "," env "," regiune ").
2. Propagarea contextului W3C Trace prin toate straturile și cozile.
3. Set minim de atribute semantice (HTTP/DB/coadă/PSP).
4. Eșantionare: erori, p95 +, plăți, canar.
5. Jurnale cu 'trace _ id'/' span _ id', valori cu exemplare.
6. Tablouri de bord: harta serviciului, compararea eliberării, fluxul de plăți.
7. Politici PII: mascare, zone, roluri, retenție.
8. Încercări/sarcină: verificați corelația și caracterul complet al urmăririi înainte de vârfuri.
9. Auto-generare de link-uri runbook în alerte.
10. Telemetrie Cost și Cardinalitate Raport.

18) Antipattern

Urme „numai la intrare” fără baze de date/cozi → nici un folos.
Lipsa de propagare în async → cauza și lanțurile de efect se rupe.
Eșantionarea aleatorie 1% fără logica cozii → nu prinde lent/eronat.
Jurnalele fără trace _ id nu → corelații end-to-end.
PII brute în atribute/jurnale → riscuri de conformitate.
Cardinalitatea „la tavan” (utilizator/sesiune ca etichete metrice) → o explozie de valoare.

Rezumat

OpenTelemetry transformă observabilitatea dintr-o colecție de instrumente disparate într-un limbaj de performanță end-to-end. Cu propagarea corectă a contextului, semantica îngrijită, eșantionarea cozii și o combinație de „măsurători ↔ urme ↔ jurnale”, echipa iGaming ține p95/p99 sub control, izolează rapid blocajele (DB, cozi, PSP) și eliberează cu încredere chiar și în vârfurile de trafic.

Contact

Contactați-ne

Scrieți-ne pentru orice întrebare sau solicitare de suport.Suntem mereu gata să ajutăm!

Telegram
@Gamble_GC
Pornește integrarea

Email-ul este obligatoriu. Telegram sau WhatsApp sunt opționale.

Numele dumneavoastră opțional
Email opțional
Subiect opțional
Mesaj opțional
Telegram opțional
@
Dacă indicați Telegram — vă vom răspunde și acolo, pe lângă Email.
WhatsApp opțional
Format: cod de țară și număr (de exemplu, +40XXXXXXXXX).

Apăsând butonul, sunteți de acord cu prelucrarea datelor dumneavoastră.