GH GambleHub

Distributed Tracing

(Bölmə: Texnologiya və Infrastruktur)

Qısa xülasə

Paylanmış izlər şlyuz, API, növbələr, DB, xarici provayderlər (PSP/oyun studiyaları) vasitəsilə sorğu yolu ilə vaxt harada və niyə itir sualına cavab verir. OpenTelemetry (OTel) - SDK/agentlərin/protokolun açıq standartı. iGaming p95/p99 saxlamaq, ödəniş problemlərini tez bir zamanda lokallaşdırmaq və pik turnirlərdən əvvəl «dar yerləri» müəyyənləşdirmək üçün əsas vasitədir.

1) OTel konsepsiyaları

Trace - əməliyyatın tam yolu (depozit, bahis, çıxarış).
Span - iş sahəsi (HTTP-handler, SQL-sorğu, növbə çağırışı/provayder).
Attributes - detalları olan açar dəyəri ('net. peer. name`, `db. system`, `psp. route`).
Events - ani hadisələr (retraj, taymaut, cash-out).
Links - digər marşrutlarla əlaqə (async/queue üçün vacibdir).
Resource - prosesin meta məlumatları: 'service. name`, `service. version`, `deployment. environment`, `cloud. region`.

2) Kontekstin təbliğatı

W3C Trace Context istifadə edin:

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

Əlavə - təhlükəsiz açarlar üçün baggage (məsələn, 'tenant', 'route'), oraya PII qoymayın.

Harada kontekst: API-şlyuz → daxili RPC → prodüser → növbə → konsumer → xarici HTTP (PSP/provayderləri).

3) Semantik konvensiyalar (məcburi minimum)

HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/cache: 'db. system` (`mysql`/`postgresql`/`redis`), `db. statement '(maskalı),' db. operation`.
Növbələr: 'messaging. system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).
Ödənişlər: 'psp. route`, `psp. provider`, `payment. id '(təxəllüs),' amount ',' currency '.
iGaming domen adı: 'game. provider`, `game. session_id` (hash), `player. id_hash`.

Vahid taksonomiya → daşbordların müqayisəsi və səbəblərin sürətli axtarışı.

4) Sampling: məlumatlarda boğulmamaq üçün necə

Head-based (sorğu girişində)

Sadə, ucuz; ümumi axın üçün uyğundur.
Mənfi - «maraqlı» yavaş/səhv marşrutları itirə bilərsiniz.

Tail-based (в Collector)

Qərar span tamamlandıqdan sonra qəbul edilir: yalnız səhvləri/yavaş/vacib seqmentləri (VIP/ödənişlər) saxlayırıq.
Prod yükü üçün idealdır: yüksək məlumatlılıq ilə dəyəri xeyli azaldır.

Tövsiyə olunan hibrid:
  • Head: «fon» örtüyü üçün 5-10%.
  • Tail: 100% səhv + p95 + yavaş + ödəniş marşrutları/kanar buraxılışları.

5) Topologiyalar OpenTelemetry Collector

Agent-saidkar (hər qovşaqda/pod): lokal qəbul, minimal bufer, aqreqatora ixrac.
Gateway (klaster): tail-sampling, marşrutlaşdırma, zənginləşdirmə, Tempo/Jaeger/Zipkin/OTLP ixrac.

Nümunə: tail-sampling (YAML parçası)

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) Metrlər və log ilə korrelyasiya

Hər log girişinə 'trace _ id '/' span _ id' əlavə edin.
Gizlilik metriklərini histoqramlar kimi saxlayın və exemplars - p95-boketdən xüsusi izə «atlama» üçün təmsilçi 'trace _ id' linkini daxil edin.
Relizlərin şərhləri (Git SHA, çartın versiyası) - events/etiket kimi.

7) Instrumentalizasiya (dillər və avto agentlər)

Go (əl + avtomobil)

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

Avto-agent '-javaagent: opentelemetry-javaagent. jar ', vasitəsilə env (' OTEL _ SERVICE _ NAME ',' OTEL _ EXPORTER _ OTLP _ ENDPOINT ').
Əl ilə - soğan yerlərinin izahları/aləti (JDBC-pullar, cash).

Node. js / Python

Avto alət ilə SDK + plugins (Express/FastAPI/celery).
Növbələr üçün - 'messaging.' və links qoymaq üçün prodüser/konsumer sarğıları.

8) Növbələr və async: düzgün yataqlar

Prodüser ('send'): topik/növbəyə göndərmək üçün span.
Consumer ('process'): link-dən span-prodüserə yeni span-poçt emalı (ümumi 'trace _ id' olmadan səbəb-nəticə əlaqəsini saxlayın).
Atributlar: 'messaging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.
Retralarda - event 'retry', cəhd sayğacı.

9) BD/Cache və N + 1

DB sürücülərinin treysinqini açın, eyni tipli sorğuları batches-də qruplaşdırın.
Redis/cache üçün - cache atributları. hit`/`cache. miss`.
Ayrı-ayrı yataqlara «ağır» sorğular aparın - p99 haradadır.

10) Xarici provayderlər: PSP/oyun studiyaları

HTTP müştərilərini çevirin: 'psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
Kodları/səhv növlərini qeyd edin, lakin PII (kart nömrəsi, tokenlər) deyil.
Studiyaları/marşrutları 'duration', 'error-rate' ilə müqayisə edin.

11) Frontend və RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.
UI → API → DB istifadəçi skvozh yolunu stick üçün 'traceparent' backend.
Geo/şəbəkə provayderləri üzrə seqmentləşdirmə - isteğe bağlı etiketlər.

12) Təhlükəsizlik və PII

Sahələri maskalayın ('db. statement 'redaktə ilə), hash' player _ id '.
Məlumat zonaları: 'pii = true', 'region = EU/TR/LATAM'.
Ödəniş treyslərinə giriş nəzarəti (rola əsaslanan).
WORM/Retention: həssas izlər üçün saxlama müddəti, siyasət aradan qaldırılması.

13) Performans və dəyəri

Tail-sampling siyasəti: «səhvlər + yavaş + ödənişlər + kanarya buraxılışları».
Downsampling histogram metrik, aqressiv duplikasiya yuvaları.
Kardinallığın məhdudlaşdırılması: metrika etiketi kimi 'user _ id' yazmayın.
Collector-da tamponlar/batches, OTLP-nin sıxılması.

14) Daşbordlar və təhlil

Service map: xidmətlərin asılılığı, səhv/gizli rəngləmə.
Release compare: stabil vs kanarya reviziyası (p95, error-rate, payments conv).
Top slow traces: '/deposit 'marşrutu üzrə, PSP/region üzrə kəsik.
Queue lag: dərin istehlak gecikməsi ilə yollar.

15) Collector konfiqurasiya nümunələri

Pipelines (metrik/treys/log, fraqment)

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 (tipik ssenarilər)

A) 'payments-api' -də p99 artımı

1. Açmaq «Top slow traces» → span DB/PSP uğursuz.
2. Əgər PSP problemi varsa - marşrutu tərcümə edin, retrai/taymautları işə salın.
3. Növbəni yoxlayın 'withdrawals' (lag), konsumerləri artırın.

B) Buraxıldıqdan sonra 5xx səhvləri

1. Filter 'service. version`.
2. Stabil/kanarya ilə müqayisə edin; 'psp. route`.
3. Promosyonu dondurun, geri çəkin (bax: «Reliz strategiyaları «/» Rolback »).

C) N + 1 şübhəsi

1. Çox sayda qısa DB span ilə treys.
2. Aqreqasiyanı/coynları işə salın, cache qatını əlavə edin.

17) Giriş çek siyahısı

1. OTel SDK və vahid Resource atributlarını ('service. name`, `env`, `region`).
2. Bütün qatlar və növbələr vasitəsilə W3C Trace Context təbliğatı.
3. Semantik atributların minimal dəsti (HTTP/DB/queue/PSP).
4. Tail-sampling: səhvlər, p95 +, ödənişlər, kanar.
5. 'trace _ id '/' span _ id' ilə qeydlər, exemplars ilə metriklər.
6. Dashboard: service map, release compare, payments flow.
7. PII siyasətləri: maskalama, zonalar, rollar, retenshn.
8. Testlər/yük: pik əvvəl korrelyasiya və completeness Trace yoxlama.
9. Runbook-linklərin avtogenerasiyası.
10. Telemetriya və kardinallığın dəyəri haqqında hesabat.

18) Antipattern

DB/növbələr olmadan «yalnız girişdə» tracking → faydası yoxdur.
async → təbliğatın olmaması səbəb-nəticə əlaqələrinin zəncirlərini «cırır».
Sampling təsadüfi 1% tail məntiqi olmadan → yavaş/səhv tutmayın.
'trace _ id' → olmadan qeydlər keçici korrelyasiya yoxdur.
Atributlarda/loqlarda xam PII → uyğunluq riskləri.
Kardinallıq «tavan» (metrik etiket kimi user/session) → dəyəri partlayış.

Nəticələr

OpenTelemetry müxtəlif alətlər dəsti müşahidə performans dili çevirir. Kontekstin düzgün təbliğatı, səliqəli semantika, tail-sampling və bir dəstə «Track Metrics» ilə iGaming komandası p95/p99-u nəzarət altında saxlayır, dar yerləri (DB, növbələr, PSP) tez izolyasiya edir və hətta trafik zirvələrinə inamla relizlər buraxır.

Contact

Bizimlə əlaqə

Hər hansı sualınız və ya dəstək ehtiyacınız varsa — bizimlə əlaqə saxlayın.Həmişə köməyə hazırıq!

Telegram
@Gamble_GC
İnteqrasiyaya başla

Email — məcburidir. Telegram və ya WhatsApp — istəyə bağlıdır.

Adınız istəyə bağlı
Email istəyə bağlı
Mövzu istəyə bağlı
Mesaj istəyə bağlı
Telegram istəyə bağlı
@
Əgər Telegram daxil etsəniz — Email ilə yanaşı orada da cavab verəcəyik.
WhatsApp istəyə bağlı
Format: ölkə kodu + nömrə (məsələn, +994XXXXXXXXX).

Düyməyə basmaqla məlumatların işlənməsinə razılıq vermiş olursunuz.