GH GambleHub

Distributed Tracing

(Bo’lim: Texnologiyalar va infratuzilma)

Qisqacha xulosa

Taqsimlangan trassalar shlyuz, API, navbatlar, DB, tashqi provayderlar (PSP/oʻyin studiyalari) orqali soʻrov yoʻlida vaqt qayerda va nima uchun yoʻqoladi degan savolga javob beradi. OpenTelemetry (OTel) - treys, metrika va loglarni birlashtiruvchi SDK/agentlar/protokolning ochiq standarti. iGaming’da p95/p99’ni ushlab turish, to’lov muammolarini tezda mahalliylashtirish va eng yuqori darajadagi musobaqalar oldidan «tor joylarni» aniqlash uchun asosiy vositadir.

1) OTel konsepsiyalari

Trace - operatsiyaning to’liq yo’li (depozit, stavka, hisobdan chiqarish).
Span - ish uchastkasi (HTTP-xandler, SQL-so’rov, navbat/provayderni chaqirish).
Attributes - tafsilotli kalit qiymati (’net. peer. name`, `db. system`, `psp. route`).
Events - tezkor hodisalar (retray, taymaut, kesh-xato).
Links - boshqa treklar bilan aloqa (async/queue uchun muhim).
Resource - jarayonning meta maʼlumotlari:’service. name`, `service. version`, `deployment. environment`, `cloud. region`.

2) Kontekst targ’iboti

W3C Trace Context yordamida:

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

Qo’shimcha - xavfsiz kalitlar uchun baggage (masalan,’tenant’,’route’), u erga PII qo’ymang.

Kontekstni qayerda ochish mumkin: API-shlyuz → ichki RPC → prodyuser → konsumer → tashqi HTTP (PSP/provayderlar).

3) Semantik konvensiyalar (majburiy minimal)

HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/kesh:’db. system` (`mysql`/`postgresql`/`redis`), `db. statement’(yashirin),’db. operation`.
Navbatlar:’messaging. system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).
To’lovlar:’psp. route`, `psp. provider`, `payment. id’(taxallus),’amount’,’currency’.
iGaming domeni:’game. provider`, `game. session_id` (hash), `player. id_hash`.

Yagona taksonomiya → dashbordlarning taqqoslanishi va sabablarni tezda izlash.

4) Sampling: ma’lumotlarga qanday cho’kib ketmaslik kerak

Head-based (soʻrov kirish joyida)

Oddiy, arzon; umumiy oqim uchun mos keladi.
Minus - siz «qiziqarli» sekin/noto’g’ri trassalarni yo’qotishingiz mumkin.

Tail-based (в Collector)

Qaror spanlar tugagandan so’ng qabul qilinadi: xatolar/sekin/muhim segmentlarni (VIP/to’lovlar) saqlaymiz.
Oziq-ovqat yuklamasi uchun ideal: yuqori ma’lumotga ega bo’lganda narxni keskin pasaytiradi.

Tavsiya etilgan gibrid:
  • Head: «fon» qoplamasi uchun 5-10%.
  • Tail: 100% xato + p95 + sekin + to’lov trassalari/kanar relizlari.

5) OpenTelemetry Collector topologiyalari

Agent-saidkar (har bir uzel/poda): lokal qabul qilish, minimal bufer, agregatorga eksport qilish.
Gateway (klaster): tail-sampling, marshrutizatsiya, boyitish, Tempo/Jaeger/Zipkin/OTLP ga eksport qilish.

Misol: tail-sampling (YAML parchasi)

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) Metriklar va loglar bilan korrelyatsiya

Har bir log yozuviga’trace _ id ’/’ span _ id’qoʻshing.
Maxfiylik metriklarini gistogramma sifatida saqlang va exemplars - p95-boketdan aniq izga sakrash uchun reprezentativ’trace _ id’ga havolani yoqing.
Relizlar izohlari (Git SHA, chart versiyasi) - events/leybllar kabi.

7) Instrumentalizatsiya (tillar va avtoagentlar)

Go (qoʻl + avto)

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

Avtoagent’-javaagent: opentelemetry-javaagent. jar’, orqali env (’HOTEL _ SERVICE _ NAME’,’HOTEL _ EXPORTER _ OTLP _ ENDPOINT’).
Qo’lda - piyoz joylarining izohlari/asbobi (JDBC-pullar, kesh).

Node. js / Python

SDK + plaginlar (Express/FastAPI/celery) bilan avtoinstrument.
Navbatlar uchun prodyuser/konsumerning’messaging.’va links’ni qo’yish uchun o’ralgan.

8) Navbatlar va async: to’g "ri uyqular

Prodyuser (’send’): topik/navbatga jo’natish uchun span.
Konsumer (’process’): linkdan span-prodyuserga xabarni qayta ishlash uchun yangi span (umumiy’trace _ id’bo’lmasdan sababiy aloqani saqlash).
Atributlar:’messaging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.
Retrajlarda - event’retry’, urinishlar hisoblagichi.

9) DB/kesh va N + 1

BD drayverlarining treysingini yoqing, bir xil turdagi so’rovlarni batchlarga guruhlang.
Redis/kesh uchun’cache’atributlari. hit`/`cache. miss`.
«Og’ir» so’rovlarni alohida uyalarga olib boring - p99 qayerdaligini ko’rishingiz mumkin.

10) Tashqi provayderlar: PSP/o’yin studiyalari

HTTP mijozlarini aylantiring:’psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
Xato kodlari/turlarini kiriting, lekin PII (karta raqami, tokenlar) emas.
’duration’,’error-rate’bo’yicha studiyalarni/yo’nalishlarni solishtiring.

11) Frontend va RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.
UI → API → DB’dan foydalanish uchun’traceparent’ni orqa tomonga buring.
Tarmoq geo/provayderlari bo’yicha segmentatsiya - opsion yorliqlar.

12) Xavfsizlik va PII

Maydonlarni yashiring (’db. statement’tahrirlangan holda), xeshlashing’player _ id’.
Maʼlumotlar zonasi:’pii = true’,’region = EU/TR/LATAM’.
To’lovlar treyslaridan foydalanishni nazorat qilish (rolga asoslangan).
WORM/Retention: sezgir izlar uchun saqlash muddatlari, siyosat boʻyicha olib tashlash.

13) Unumdorlik va qiymat

Siyosat bo’yicha Tail-sampling: «xatolar + sekin to’lovlar + kanar relizlari».
Downsampling gistogramm metrik, agressiv de-duplikatsiyasi.
Kardinallikni cheklash:’user _ id’ni metrika yorlig’i sifatida yozib qo’ymaslik.
Collector’da bufer/batchi, OTLP kompresssiyasi.

14) Dashbordlar va tahlil

Service map: xizmatlarga bogʻliqlik, xato/yashirin boʻyoq.
Release compare: barqaror vs kanareya taftishi (p95, error-rate, payments conv).
Top slow traces: ’/deposit’yo’nalishi bo’yicha, PSP/mintaqa bo’yicha kesma.
Queue lag: iste’mol qilish kechiktirilgan trassalar.

15) Collector konfiguratsiyasining namunalari

Pipelines (metriklar/treyslar/loglar, parcha)

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 (namunaviy stsenariylar)

A)’payments-api’da p99 ning o’sishi

1. «Top slow traces» ni ochish → DB/PSP spanlariga tushish.
2. Agar PSP muammosi bo’lsa - yo’nalishni o’zgartirish, retray/taymautlarni yoqish.
3. ’withdrawals’ (lag) navbatini tekshirish, konsumerlarni koʻpaytirish.

B) Chiqarilgandan keyingi xatolar 5xx

1. ’service’ filteri. version`.
2. Barqaror/kanareykani solishtirish; ’psp’ dagi paypalarni topish. route`.
3. Promoushenni muzlatish, orqaga qaytarish («Reliz strategiyasi «/» Rolbeki »ga qarang).

C) N + 1 ga shubha

1. Qisqa DB spanlari ko’p bo’lgan treyslar.
2. Agregatsiyani/joylarni yoqish, kesh qatlamini qoʻshish.

17) Joriy etish chek-varaqasi

1. OTel SDK va yagona Resource atributlarini kiriting (’service. name`, `env`, `region`).
2. Barcha qatlam va navbatlar orqali W3C Trace Context targʻiboti.
3. Minimal semantik atributlar toʻplami (HTTP/DB/queue/PSP).
4. Tail-sampling: xatolar, p95 +, to’lovlar, kanar.
5. ’trace _ id ’/’ span _ id’ loglari, exemplars metrikalari.
6. Dashbordlar: service map, release compare, payments flow.
7. PII-siyosat: niqoblash, zonalar, rollar, retenshn.
8. Test/yuk: cho’qqilar oldidan treysingning korrelyatsiyasi va completenessini tekshirish.
9. Runbook havolalarini alertalarda avtogeneratsiya qilish.
10. Telemetriya va kardinallik qiymati bo’yicha hisobot.

18) Antipatternlar

DB/navbatlarsiz «faqat kirish joyida» trassalari foydasiz.
Async → da targ’ibot yo’qligi sababiy bog’liqlik zanjirlarini «yirtib tashlaydi».
Sampling tasodifiy 1% tail-mantiqsiz → sekin/noto’g’ri tutmang.
’trace _ id’ → bilan bogʻlanish yoʻq.
Atributlar/loglardagi xom PII → komplayens xavfi.
«Shiftga» (metrik yorliq sifatida user/session) → qiymat portlashi.

Yakunlar

OpenTelemetry ko’rinishni turli xil asboblar to’plamidan unumdorlik tiliga aylantiradi. Kontekstni to’g’ri targ’ib qilish, aniq semantika, tail-sampling va «trassaning metrikasi» bog’lamasi bilan iGaming jamoasi p95/p99 ni nazorat ostida ushlab turadi, tor joylarni tezda izolyatsiya qiladi (BD, navbatlar, PSP) va hatto trafik cho’qqilariga ham relizlarni ishonchli ravishda chiqaradi.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Telegram
@Gamble_GC
Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.