Distributed Tracing
(Bölüm: Tehnologiýalar we infrastruktura)
Gysgaça gysgaça
Paýlanan ýollar, şlýuzyň, API-leriň, nobatlaryň, DB-leriň, daşarky üpjün edijileriň (PSP/oýun studiýalary) üsti bilen haýyş ýolunda wagt nirede we näme üçin ýitirilýär diýen soraga jogap berýär. OpenTelemetry (OTel) - SDK-nyň/agentleriň/teswirnamanyň treýsleri, metrikleri we ýazgylary birleşdirýän açyk standartydyr. iGaming, p95/p99 saklamak, töleg meselelerini çalt lokallaşdyrmak we iň ýokary ýaryşlardan öň "päsgelçilikleri" kesgitlemek üçin esasy guraldyr.
1) OTel düşünjeleri
Trace - amalyň doly ýoly (goýum, stawka, netije).
Span - iş bölegi (HTTP-handler, SQL-haýyş, nobata çagyrmak/üpjün ediji).
Attributes - jikme-jiklikler bilen açar bahasy ('net. peer. name`, `db. system`, `psp. route`).
Events - dessine wakalar (retrai, wagt, keş sypdyrma).
Links - beýleki ýollar bilen aragatnaşyk (async/queue üçin möhümdir).
Resource - prosesiň meta-maglumatlary: 'service. name`, `service. version`, `deployment. environment`, `cloud. region`.
2) Kontekst wagyz etmek
W3C Trace Context ulanyň:
traceparent: 00-<trace_id>-<span_id>-01 tracestate:...
Goşmaça - ygtybarly açarlar üçin baggage (mysal üçin 'tenant', 'route'), PII goýmaň.
Konteksti nirede deşmeli: API-şlýuz → içerki RPC → prodýuser → konsumer → daşarky HTTP (PSP/üpjün edijiler).
3) Semantiki konwensiýalar (hökmany minimal)
HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/keş: 'db. system` (`mysql`/`postgresql`/`redis`), `db. statement '(gizlenen),' db. operation`.
Nobatlar: 'messaging. system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).
Tölegler: 'psp. route`, `psp. provider`, `payment. id '(lakamlaşdyrmak),' amount ',' currency '.
iGaming domeni: 'game. provider`, `game. session_id` (hash), `player. id_hash`.
Bir taksonomiýa → daşbordlaryň deňeşdirilmegi we sebäpleri çalt gözlemek.
4) Sampling: maglumatlarda nädip gark bolmazlyk
Head-based (soragyň girelgesinde)
Ýönekeý, arzan; umumy akym üçin amatly.
Minus - "gyzykly" haýal/ýalňyşlyk ýollaryny ýitirip bilersiňiz.
Tail-based (в Collector)
Çözgüt spanlar tamamlanandan soň kabul edilýär: diňe ýalňyşlyklary/haýal/möhüm segmentleri (VIP/tölegleri) saklaýarys.
Iýmit ýüklemek üçin amatly: ýokary maglumat ukyby bilen çykdajylary ep-esli azaldar.
- Baş: "fon" örtügi üçin 5-10%.
- Tail: 100% ýalňyşlyk + p95 + haýal töleg ýollary/kanareýa goýberişleri.
5) Topologiýalar OpenTelemetry Collector
Agent-saidkar (her düwünde/pod): lokal kabul ediş, iň az bufer, agregatora eksport.
Gateway (klaster): tail-sampling, marşrutlaşdyrmak, baýlaşdyrmak, Tempo/Jaeger/Zipkin/OTLP-e eksport.
Mysal: tail-sampling (YAML bölegi)
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) Metrler we loglar bilen baglanyşyk
Her giriş ýazgysyna 'trace _ id '/' span _ id' goşuň.
Gizlinlik metriklerini gistogramma hökmünde saklaň we exemplars - p95-boketden belli bir aýak yzyna "bökmek" üçin wekilçilikli 'trace _ id' salgylanmasyny açyň.
Relizleriň düşündirişleri (Git SHA, çartyň wersiýasy) - events/bellikler ýaly.
7) Instrumentalizasiýa (diller we awto-agentler)
Go (el + awto)
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
Awto-agent '-javaagent: opentelemetry-javaagent. jar ', env arkaly (' HOTEL _ SERVICE _ NAME ',' HOTEL _ EXPORTER _ OTLP _ ENDPOINT ').
El bilen - sogan ýerleriniň düşündirişleri/gurallary (JDBC-howuzlar, keş).
Node. js / Python
SDK + pluginleri bolan awto gural (Express/FastAPI/celery).
Nobatlar üçin - 'messaging.' we links goýmak üçin prodýuser/konsumeriň gaplamalary.
8) Nobatlar we async: dogry ýatgylar
Prodýuser ('send'): topik/nobata ibermek üçin span.
Konsumer ('process'): linkden span prodýuserine täze span (umumy 'trace _ id' -siz sebäp-netije baglanyşygyny saklamak).
Häsiýetleri: 'messaging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.
Retralarda - event 'retry', synanyşyk hasaplaýjy.
9) BD/nagt we N + 1
BD sürüjilerine söwda etmegi açyň, şol bir görnüşdäki soraglary batçlara bölüň.
Redis/Kesh üçin - 'cache' atributlary. hit`/`cache. miss`.
"Agyr" soraglary aýratyn spanalara getiriň - p99 nirededigini görüp bilersiňiz.
10) Daşarky üpjün edijiler: PSP/oýun studiýalary
HTTP müşderilerini aýlaň: 'psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
PII däl (kartyň belgisi, bellikler) kodlary/ýalňyşlyklaryň görnüşlerini ýazyň.
'duration', 'error-rate' boýunça studiýalary/ugurlary deňeşdiriň.
11) Frontend we RUM
OTel Web SDK: `page_view`, `resource_load`, `xhr`.
UI → API → DB ulanyjynyň ýoluny açmak üçin 'traceparent' -ni arka tarapa geçiriň.
Geo/tor üpjün edijileri boýunça segmentasiýa - opsiýa bellikleri.
12) Howpsuzlyk we PII
Meýdanlary gizläň ('db. statement 'bilen redaktirläň),' player _ id '-ni heşirläň.
Maglumat zolaklary: 'pii = true', 'region = EU/TR/LATAM'.
Töleg söwdalaryna elýeterlilige gözegçilik (rola esaslanýan).
WORM/Retention: duýgur yzlar üçin saklanyş şertleri, syýasat boýunça aýyrmak.
13) Öndürijiligi we bahasy
Syýasat boýunça Tail-sampling: "ýalňyşlyklar + haýal tölegler + kanar goýberişleri".
Downsampling gistogram metrik, loglaryň agressiw duplikasiýasy.
Kardinallyk çäkleri: 'user _ id' belgisini metrika nyşany hökmünde ýazmaň.
Kollektordaky buferler/batçlar, OTLP gysyşy.
14) Daşbordlar we seljerme
Service map: hyzmatlara garaşlylyk, ýalňyşlyklar/gizlinlik boýunça reňk.
Release compare: durnukly vs kanareýka barlagy (p95, error-rate, payments conv).
Top slow traces: '/deposit 'ugry boýunça, PSP/sebit boýunça kesme.
Queue lag: Sarp ediş gijikdirilen ýollar.
15) Collector konfigurasiýalarynyň mysallary
Pipelines (metrikler/söwdalar/loglar, bölek)
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 (adaty ssenariler)
A) 'payments-api' -de p99 ösüş
1. "Top slow traces" açyň → DB/PSP spanlaryna düşüň.
2. PSP meselesi bolsa - marşruty geçirmek, retraileri/wagtlary açmak.
3. Nobaty barlaň 'withdrawals' (lag), konsumerleri köpeltmek.
B) Goýberilenden soň 5xx ýalňyşlyklary
1. Süzgüç 'service. version`.
2. Durnukly/kanareýany deňeşdirmek; 'psp. route`.
3. Mahabaty doňduryň, yzyna gaýtaryň (seret. "Relizler strategiýasy "/" Rolbekler ").
C) N + 1 şübhe
1. Köp sanly gysga DB spanly söwda.
2. Jemlemäni/joýnlary açyň, kesiş gatlagyny goşuň.
17) Girizmegiň çek-sanawy
1. OTel SDK we ýeke-täk Resource atributlaryny ('service. name`, `env`, `region`).
2. Ähli gatlaklaryň we nobatlaryň üsti bilen W3C Trace Context propagandasy.
3. Semantik atributlaryň iň az toplumy (HTTP/DB/queue/PSP).
4. Tail-sampling: ýalňyşlyklar, p95 +, tölegler, kanar.
5. 'trace _ id '/' span _ id', exemplars metrikleri.
6. Daşbordlar: service map, release compare, payments flow.
7. PII-syýasatlar: maskalanmak, zolaklar, rollar, retenşn.
8. Synaglar/ýükler: iň ýokary nokatlardan öň treýsingiň korrelýasiýasyny we completeness barlagy.
9. Alertlerde runbook baglanyşyklarynyň awtogenerasiýasy.
10. Telemetriýanyň we kardinallygyň bahasy boýunça hasabat.
18) Antipatternler
DB/nobatsyz "diňe girelgede" yzarlamalaryň peýdasy ýok.
async → -da propagandanyň ýoklugy sebäp-netije gatnaşyklarynyň zynjyrlary "ýyrtylýar".
Sampling tötänleýin 1% tail-logikasyz → haýal/nädogry tutmaýarys.
'trace _ id' → däl logler hiç hili baglanyşyk ýok.
Atributlarda/ýazgylarda çig PII → laýyklyk töwekgelçiligi.
"Potolokda" (metrik bellik hökmünde ulanyjy/session) → bahanyň partlamasy.
Netijeler
OpenTelemetry syn edilişi dürli gurallardan ýerine ýetiriş diline öwürýär. Kontekstiň dogry propagandasy, takyk semantika, tail-sampling we "trassanyň metrikasy" bilen iGaming topary p95/p99 gözegçilik astynda saklaýar, dar ýerleri (DB, nobatlar, PSP) çalt izolirleýär we hatda traffigiň iň ýokary nokatlaryna-da ynamly goýberýär.