GH GambleHub

Distributed Tracing

(Бөлім: Технологиялар және Инфрақұрылым)

Қысқаша түйіндеме

Бөлінген трассалар шлюз, API, кезектер, ДҚ, сыртқы провайдерлер (PSP/ойын студиялары) арқылы сұрау жолындағы уақыт қайда және неліктен жоғалады деген сұраққа жауап береді. OpenTelemetry (OTel) - SDK/агенттердің/хаттаманың ашық стандарты. iGaming-те бұл p95/p99 ұстайтын, төлем проблемаларын тез арада оқшаулайтын және ең жоғары турнирлер алдында «тар жерлерді» анықтайтын негізгі құрал.

1) OTel тұжырымдамалары

Trace - операцияның толық жолы (депозит, мөлшерлеме, шығару).
Span - жұмыс учаскесі (HTTP-хэндлер, SQL-сұрау, кезек шақыру/провайдер).
Attributes - ('net. peer. name`, `db. system`, `psp. route`).
Events - жедел оқиғалар (ретрай, таймаут, кэш-жаңылыс).
Links - басқа жолдармен байланыс (async/queue үшін маңызды).
Resource - процестің метадеректері: 'service. name`, `service. version`, `deployment. environment`, `cloud. region`.

2) Контексті насихаттау

W3C Trace Context бағдарламасын пайдаланыңыз:

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

Қосымша - қауіпсіз кілттер үшін baggage (мысалы, 'tenant', 'route'), онда PII қоймаңыз.

Қайда контексті тесу керек: API-шлюз → ішкі RPC → продюсер → консьюмер → сыртқы HTTP (PSP/провайдерлер).

3) Семантикалық конвенциялар (міндетті минимум)

HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/кэш: 'db. system` (`mysql`/`postgresql`/`redis`), `db. statement '(бүркемеленген),' db. operation`.
Кезектер: 'messaging. system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).
Төлемдер: 'psp. route`, `psp. provider`, `payment. id '(бүркеншік атау),' amount ',' currency '.
iGaming домені: 'game. provider`, `game. session_id` (hash), `player. id_hash`.

Бірыңғай таксономия → дашбордтардың салыстырмалылығы және себептерді жылдам іздеу.

4) Сэмплинг: деректерде қалай суға батпау керек

Head-based (сұрау кіреберісінде)

Қарапайым, арзан; жалпы ағын үшін жарамды.
Минус - «қызықты» баяу/қате трассаларды жоғалтуға болады.

Tail-based (в Collector)

Шешім спан аяқталғаннан кейін қабылданады: қателерді/баяу/маңызды сегменттерді (VIP/төлемдер) ғана сақтаймыз.
Прод-жүктеме үшін өте қолайлы: жоғары ақпараттылық кезінде құнды айтарлықтай төмендетеді.

Ұсынылған гибрид:
  • Head: «фондық» жабын үшін 5-10%.
  • Tail: 100% қателер + p95 + баяу + төлем жолдары/канареялық релиздер.

5) OpenTelemetry Collector топологиялары

Agent-сайдкар (әрбір торапта/поезда): жергілікті қабылдау, ең аз буфер, агрегаторға экспорт.
Gateway (кластерлік): tail-sampling, маршруттау, байыту, Tempo/Jaeger/Zipkin/OTLP экспорттау.

Мысалы: tail-sampling (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) Метриктер мен логтармен корреляция

Әрбір логин жазбасына 'trace _ id '/' span _ id' қосыңыз.
Жасырындылық өлшемдерін гистограмма ретінде сақтаңыз және exemplars - p95-бокеттен нақты ізге «секіру» үшін репрезентативті 'trace _ id' сілтемесін қосыңыз.
Релиздердің аңдатпалары (Git SHA, чарт нұсқасы) - events/лейблдер сияқты.

7) Аспаптандыру (тілдер және авто-агенттер)

Go (қолмен + авто)

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

Авто-агент '-javaagent: opentelemetry-javaagent. ('OTEL _ SERVICE _ NAME', 'OTEL _ EXPORTER _ OTLP _ ENDPOINT').
Қолмен - пияз орындарының аннотациялары/құралы (JDBC-пулдар, кэш).

Node. js / Python

SDK + плагині бар авто-құрал (Express/FastAPI/celery).
Кезектер үшін - 'messaging.' және links қою үшін продюсер/консьюмердің орамасы.

8) Кезектер және async: дұрыс ұйықтау

Продюсер ('send'): span топик/кезекке жіберу.
Consumer ('process'): link-ден span-ға жаңа span (жалпы 'trace _ id' -сіз себеп-салдарлық байланысты сақтау).
Төлсипаттар: 'messaging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.
Ретраяларда - event 'retry', әрекеттер есептегіші.

9) ДБ/кэш және N + 1

БД драйверлерінің трейсингін қосыңыз, батчиге бір типті сұрауларды топтаңыз.
Redis/кэш үшін - 'cache' төлсипаттары. hit`/`cache. miss`.
«Ауыр» сұрауларды жеке спаналарға шығарыңыз - p99 қайда екенін көруге болады.

10) Сыртқы провайдерлер: PSP/ойын студиялары

HTTP клиенттерін айналдырыңыз: 'psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
PII (карта нөмірі, белгілер) емес, кодтарды/қате түрлерін логин.
'duration', 'error-rate' бойынша студияларды/бағыттарды салыстырыңыз.

11) Фронтенд және RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.
UI → API → БД пайдаланушы жолын басып өту үшін 'traceparent' -ті бэкендке тесіңіз.
Желінің гео/провайдерлері бойынша сегменттеу - опциондық лейблдер.

12) Қауіпсіздік және PII

Өрістерді жасырыңыз ('db. statement 'өңдеумен),' player _ id 'хэшін басыңыз.
Деректер аймағы: 'pii = true', 'region = EU/TR/LATAM'.
Төлем трейстерiне қол жеткiзудi бақылау (рөлге негiзделген).
WORM/Retention: сезімтал іздерді сақтау мерзімі, саясат бойынша жою.

13) Өнімділік және құн

Tail-sampling саясаты бойынша: «қателер + баяу + төлемдер + канареялық релиздер».
Downsampling гистограмма метрика, агрессивті дедупликация логов.
Түбірлік шегі: 'user _ id' метрика белгісі ретінде жазылмасын.
Collector буферлері/батчтары, OTLP компрессиясы.

14) Дашбордтар және талдау

Service map: сервистерге тәуелділік, қателер/жасырындылық бойынша бояу.
Release compare: тұрақты vs канареялық ревизия (p95, error-rate, payments conv).
Top slow traces: '/deposit 'бағыты бойынша, PSP/өңір бойынша тілік.
Queue lag: терең тұтыну кідірісі бар трассалар.

15) Collector конфигурация мысалдары

Pipelines (метриктер/трейстер/логтар, фрагмент)

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 (типтік сценарийлер)

A) Өсуі p99 в 'payments-api'

1. «Top slow traces» ашыңыз → ДБ/PSP спандарына кіру.
2. Егер PSP проблемасы болса - маршрутты ауыстыру, ретрацияны/таймауттарды қосу.
3. 'withdrawals' (lag) кезегін тексеру, консумерлерді ұлғайту.

B) 5xx шығарылғаннан кейінгі қателер

1. 'service сүзгісі. version`.
2. Тұрақты/канареялық салыстыру; 'psp. route`.
3. Промоушенді тоқтатып, сырғып тастау («Релиздер стратегиясын «/» Ролбэки »қараңыз).

С) N + 1 күдікті

1. Қысқа DB-спандар саны көп трейстер.
2. Біріктіруді/джойндарды қосу, кэш қабатын қосу.

17) Енгізу чек-парағы

1. OTel SDK және бірыңғай Resource төлсипаттарын ('service. name`, `env`, `region`).
2. Барлық қабаттар мен кезектер арқылы W3C Trace Context насихаттау.
3. Семантикалық төлсипаттардың ең аз жиыны (HTTP/DB/queue/PSP).
4. Tail-sampling: қателер, p95 +, төлемдер, канар.
5. 'trace _ id '/' span _ id', exemplars өлшемдері.
6. Дашбордтар: service map, release compare, payments flow.
7. PII-саясат: бүркемелеу, аймақтар, рөлдер, ретеншн.
8. Тесттер/жүктеме: шыңдар алдында корреляцияны және completeness трейсингті тексеру.
9. Runbook сілтемелерін автогенерациялау.
10. Телеметрия және кардиналдық құны бойынша есеп.

18) Антипаттерндер

ДБ/кезектерсіз «тек кіреберісте» трассировкасы пайдасыз.
async → -да насихаттың жоқтығы себеп-салдарлық байланыстар тізбегін «үзеді».
tail логикасыз кездейсоқ 1% сэмплинг → баяу/қате ұстамаймыз.
'trace _ id' → логтары толассыз корреляцияланбайды.
Атрибуттардағы/логтардағы шикі PII → комплаенс тәуекелдері.
Түбегейлі «төбеге» (метрик лейблі ретінде user/session) → құн жарылысы.

OpenTelemetry бақылануды шашыраңқы құралдар жиынтығынан толассыз өнімділік тіліне айналдырады. Контекст дұрыс насихатталса, ұқыпты семантика, tail-sampling және «трассаның метрикасы» байланыстырылса, iGaming командасы p95/p99-ды бақылауда ұстайды, тар жерлерді (ДБ, кезектер, PSP) жылдам оқшаулайды және трафик пиктеріне де релиздерді сенімді түрде шығарады.

Contact

Бізбен байланысыңыз

Кез келген сұрақ немесе қолдау қажет болса, бізге жазыңыз.Біз әрдайым көмектесуге дайынбыз!

Telegram
@Gamble_GC
Интеграцияны бастау

Email — міндетті. Telegram немесе WhatsApp — қосымша.

Сіздің атыңыз міндетті емес
Email міндетті емес
Тақырып міндетті емес
Хабарлама міндетті емес
Telegram міндетті емес
@
Егер Telegram-ды көрсетсеңіз — Email-ге қоса, сол жерге де жауап береміз.
WhatsApp міндетті емес
Пішім: +ел коды және номер (мысалы, +7XXXXXXXXXX).

Батырманы басу арқылы деректерді өңдеуге келісім бересіз.