GH GambleHub

Distributed Tracing

(Бөлүк: Технология жана инфраструктура)

Кыскача резюме

Бөлүштүрүлгөн тректер суроо-талап жолу аркылуу убакыт кайда жана эмне үчүн жоготот деген суроого жооп берет шлюзы, API, кезек, DD, тышкы провайдерлер (PSP/оюн студиялары). OpenTelemetry (OTel) - сооданы, метриканы жана логтерди бириктирген ачык SDK/агенттер/протокол стандарты. iGaming p95/p99 кармап негизги курал болуп саналат, тез төлөм көйгөйлөрүн локалдаштыруу жана жогорку мелдештерге чейин "тар жерлерди" аныктоо.

1) OTel түшүнүгү

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

2) Контекстти пропагандалоо

W3C Trace Context колдонуу:

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

Кошумча - коопсуз ачкычтар үчүн багаж (мисалы, '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) Sampling: маалыматтар чөгүп жок кантип

Head-based (суроо кире)

Жөнөкөй, арзан; жалпы агымына ылайыктуу.
Минус - Сиз жогото аласыз "кызыктуу" жай/туура эмес жолдор.

Tail-based (в Collector)

Чечим спан аяктагандан кийин кабыл алынат: каталарды/жай/маанилүү сегменттерди (VIP/төлөмдөрдү) гана сактайбыз.
Прод-жүктөө үчүн идеалдуу: жогорку маалыматтуулук менен бааны бир топ төмөндөтөт.

Сунушталган гибрид:
  • Head: "арткы" каптоо үчүн 5-10%.
  • Tail: 100% каталар + p95 + жай + төлөм жолдору/канарейка релиздери.

5) Топология OpenTelemetry Collector

Агент-сайдкар (ар бир түйүн/поп): жергиликтүү кабыл алуу, минималдуу буфер, агрегаторго экспорт.
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) Аспапташтыруу (тилдер жана auto-агенттер)

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

Auto-agent '-javaagent: opentelemetry-javaagent. jar ', аркылуу env (' HOTEL _ SERVICE _ NAME ',' HOTEL _ EXPORTER _ OTLP _ ENDPOINT ').
Кол менен - аннотациялар/пияз жерлеринин куралы (JDBC-пулдар, кэш).

Node. js / Python

SDK + плагиндер менен Auto куралы (Express/FastAPI/celery).
кезектери үчүн - өндүрүүчүсү/консумер 'messaging.' жана шилтемелерди коюу.

8) кезек жана async: туура уктап

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

9) BD/кэш жана N + 1

BD Trading айдоочуларды күйгүзүү, батчи бир типтеги суроо топтоо.
Redis/кэш үчүн - 'cache атрибуттары. hit`/`cache. miss`.
"Оор" өтүнүчтөрдү өзүнчө уктоого алып - p99 кайда экенин көрүүгө болот.

10) Тышкы провайдерлер: PSP/оюн студиялары

HTTP кардарлары: 'psp. provider`, `psp. route`, `timeout_ms`, `attempt`.
Коддорду/ката түрлөрүн логин, бирок PII эмес (карта номери, токендер).
'duration', 'error-rate' боюнча студияларды/маршруттарды салыштыруу.

11) Frontend жана RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.
UI → API → DD колдонуучунун жолуна түшүү үчүн, 'traceparent' -ди артка буруңуз.
Гео/тармак провайдерлери боюнча сегментация - кошумча лейблдер.

12) Коопсуздук жана PII

Талааларды жашыруу ('db. statement 'түзөтүү менен),' player _ id 'деп хэштегиле.
Маалымат зоналары: 'pii = true', 'region = EU/TR/LATAM'.
Тёлёмдёрдън соодасына жеткиликтъълъктъ контролдоо (ролу негизделген).
WORM/Retention: сезимтал изи үчүн сактоо мөөнөтү, саясат боюнча алып салуу.

13) аткаруу жана наркы

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

14) Dashboard жана талдоо

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" → span DD/PSP түшүп.
2. Эгерде PSP көйгөйү - каттамды которуу, ретрацияны/таймауттарды күйгүзүү.
3. Текшерүү кезек 'withdrawals' (lag), көбөйтүүнү.

B) бошотулгандан кийин 5xx каталар

1. Filter 'service. version`.
2. Туруктуу/канарейка салыштыруу; 'psp. route`.
3. Промоушенди тоңдуруп, артка жылдыруу (караңыз: "Релиздер стратегиясы "/" Ролбэки ").

C) N + 1 шектүү

1. көп сандагы кыска DB-span менен соода.
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. Dashbord: service map, release compare, payments flow.
7. PII-саясат: маскировка, зоналар, ролдору, retenshn.
8. Тесттер/жүктөө: чокуларынын алдында байланышты жана completeness Trace текшерүү.
9. Автогенерация runbook-шилтемелер alerts.
10. Телеметрия жана кардиналдык наркы боюнча отчет.

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

Tracking DD/кезек жок "гана кире" → эч кандай пайдасы жок.
Жок пропаганда async → "жарылып" себептик байланыштар чынжыр.
Sampling кокусунан 1% tail логикасы жок → жай/туура эмес кармоо.
'trace _ id' → жок Логи аркылуу корреляция жок.
Чийки PII атрибуттар/логдор → комплаенс тобокелдиктер.
кардиналдуулук "шыпта" (колдонуучу/session белги метрик катары) → жарылуу наркы.

Натыйжалары

OpenTelemetry ар түрдүү инструменттердин жыйындысы аткаруу тилине байкоо бурат. Контекстти туура үгүттөө менен, так семантика, tail-sampling жана бир катар "метрика тректерин" iGaming командасы p95/p99 көзөмөлүндө кармап, тар жерлерди тез изоляциялайт (DD, кезек, PSP) жана трафиктин туу чокуларында да ишенимдүү релиздерди чыгарат.

Contact

Биз менен байланышыңыз

Кандай гана суроо же колдоо керек болбосун — бизге кайрылыңыз.Биз дайым жардам берүүгө даярбыз!

Telegram
@Gamble_GC
Интеграцияны баштоо

Email — милдеттүү. Telegram же WhatsApp — каалооңузга жараша.

Атыңыз милдеттүү эмес
Email милдеттүү эмес
Тема милдеттүү эмес
Билдирүү милдеттүү эмес
Telegram милдеттүү эмес
@
Эгер Telegram көрсөтсөңүз — Emailден тышкары ошол жактан да жооп беребиз.
WhatsApp милдеттүү эмес
Формат: өлкөнүн коду жана номер (мисалы, +996XXXXXXXXX).

Түшүрүү баскычын басуу менен сиз маалыматтарыңыздын иштетилишине макул болосуз.