GH GambleHub

Distributed Tracing

(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)

Live ռեզյումե

Բաշխված ուղիները պատասխան են տալիս այն հարցին, թե որտեղ և ինչու է ժամանակ կորցնում դարպասի, API, հերթերի, BD, արտաքին պրովայդերների միջոցով (PSA/խաղային ստուդիաներ)։ OpenTelemetry (OTel) - ISK/գործակալների/արձանագրությունների բաց ցուցակը, որը միավորում է թրեյսները, նետերը և լոգները։ IGaming-ում սա հիմնական գործիք է, որպեսզի պահպանի p95/p99, արագ տեղայնացնել վճարման խնդիրները և հայտնաբերել «նեղ տեղեր» պիկի մրցույթների առջև։

1) OTel-ի հասկացությունները

Trace-ը վիրահատության ամբողջական ուղին է (դեպոզիտ, տոկոսադրույքը, եզրակացությունը)։

Մոսկվան աշխատանքի հատվածն է (HTTP-handler, SQL հարցումը, հերթը/պրովայդերը)։

Attributes-ը բանալին է մանրամասների հետ («net»)։ peer. name`, `db. system`, `psp. route`).

Events-ը ակնթարթային իրադարձություններ են (retray, timaut, cash-prom)։

Links-ը այլ ուղիների հետ կապ է (կարևոր է async/queue)։

Resource-ը մետատվական գործընթացներ են '<108։ name`, `service. version`, `deployment. environment`, `cloud. region`.

2) Կոնտեքստի քարոզչությունը

Օգտագործեք W3C Trace Exprest։


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

Բացի այդ, baggage անվտանգ ինտեգրման համար (օրինակ ՝ «tenault», «roult»), մի դրեք այնտեղ PII։

Որտեղ հայթայթել համատեքստը 'API-դարպասը ներքին RPC-ն է, որը արտադրողն է ռուսական կոնսուումերի հերթին արտաքին HTTP (PMS/պրովայդերներ)։

3) Սեմանտիկ կոնվենցիաները (պարտադիր նվազագույն)

HTTP/RPC: `http. method`, `http. route`, `http. status_code`.
DB/kash: 'db. system` (`mysql`/`postgresql`/`redis`), `db. statrone '(դիմակավորված), "db. operation`.
Հերթերը '«draging»։ system` (`kafka`/`rabbitmq`), `messaging. destination`, `messaging. operation` (`send`/`process`).

Վճարումները ՝ «p.ru»։ 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-sidkar (յուրաքանչյուր ֆունտ/ենթա) 'տեղական ընդունումը, նվազագույն բուֆերը, էքսպորտը ագրեգատորի մեջ։

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 »/« բանաձև _ id»։

Լատինական պիտակները պահեք որպես histograms և միացրեք exemplars-ը 'հղում ներկայացուցչական «trace _ id» -ի համար p95 բոկետից որոշակի հետքի։

Օրինագծերի (Git SHA, աղյուսակի տարբերակը) - որպես events/պիտակներ։

7) Գործիքներ (լեզուներ և Avto-2019)

Go (ձեռքով + 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

Avto-գործակալ '-javaaagent: opentelemetry-entaagent։ jar ", env (" OTEL _ NAME "," OTEL _ EXPORTER _ OTLP _ ENDPOINT ")։

Ձեռքով 'իմիտացիա/ճառագայթային տեղերի գործիք (JDBC-pula, kash)։

Node. js / Python

Avto գործիքը MSK + գրագինի հետ (System/Fox API/celery)։

Հերթերի համար 'արտադրողի/կոնսյումերի փաթեթ, որպեսզի տեղադրեք «draging.» և links։

8) Հերթեր և ասինկ. Ճիշտ սպան

Արտադրողը («send») 'տեղանունը/հերթը ուղարկելու համար։

Կոնսյումերը («process») 'նոր պլանավորումը link-ից ռուսական արտադրողից (պահպանել պատճառահետևանքային կապը առանց ընդհանուր «trace _ id»)։

Ատրիբուտներ ՝ "draging. kafka. partition`, `messaging. rabbitmq. routing_key`, `messaging. message_id`.

Հետքերով 'event' retry ", փորձերի հաշվիչ։

9) BD/kash և N + 1 1

Միացրեք BD վարորդների թրեյսինգը, խմբավորեք մեկ առ մեկ հարցումներ։

Redis/kash-ի համար '«cache» ատրիբուտներ։ hit`/`cache. miss`.

Դիմեք «ծանր» հարցումներին առանձին քարանձավներում, կարող եք տեսնել, թե որտեղ է p99։

10) Արտաքին պրովայդերներ ՝ PSA/խաղային ստուդիաներ

Շրջեք HTTP հաճախորդները '<p.ru։ provider`, `psp. route`, `timeout_ms`, `attempt`.

Տրամաբանեք սխալների ցանկը/տեսակները, բայց ոչ PII (քարտեզի համարը, հոսանքները)։

Համեմատեք ստուդիաները/երթուղիները «duration», «error-rate»։

11) Ֆրոնտենդը և RUM

OTel Web SDK: `page_view`, `resource_load`, `xhr`.

Թափահարեք «traceparent» -ը, որպեսզի օգտագործողի ուղին անցնի UI www.API-ը։

Ցանցի գեո/պրովայդերների հատվածները օպորացիոնալ պիտակներ են։

12) Անվտանգություն և PII

Դիմեք դաշտերը ('db. stations 'խմբագրությամբ), հագեցեք' player _ id '։

Տվյալների գոտիները ՝ «pii = 108», «region = EU/TR/LATAM»։

Մուտքի վերահսկումը վճարումների թրեյսներին (դեր-հիմնված)։

WORM/Retention 'զգայուն հետքերի պահպանման ժամանակը, քաղաքականության հեռացումը։

13) Արտադրողականությունը և արժեքը

Tail-sampling քաղաքականության մասին. «Սխալներ + դանդաղ + վճարումներ + կանարեկային վճարումներ»։

Downsampling histogram, logs ագրեսիվ deduplication։

Կարդինալության սահմանափակումը 'չգրել «user _ id» որպես պիտակ։

Ալմաթներ/խաղեր Collector-ում, OTLP-ի թեմը։

14) Դաշբորդները և վերլուծությունը

Winmap 'ծառայությունների կախվածությունը, սխալների գույնը/լատենտությունը։

Releant compare: կայուն vs canareced (p95, error-rate, payments conv)։

Top slow traces: «/deposit », PSA/տարածաշրջանի կտրվածքը։

Queue lag: հետքերը խորը սպառման ուշացումով։

15) Collector խմբակցությունների օրինակներ

Pipelines (metrics/treiss/logs, հատված)

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» -ը պլանավորվում է ձախողվել BD/PSA սպանում։

2. Եթե PSA խնդիրը տեղափոխելն է, միացնել հետքերը/թայմաուտները։

3. Ստուգել «withdrawals» (lag) հերթը, բարձրացնել վահանակները։

B) Թողարկումից հետո 5xx սխալները

1. Ֆիլտրը '108։ version`.
2. Համեմատել կայուն/կանարական; գտնել մեջքեր «p.ru» -ում։ route`.

3. Սառեցնել առաջխաղացումը, նետել (տե՛ ս «Առյուծի ռազմավարությունը «/» Ռոլբեքի »)։

C) Կասկածություն N + 1

1. Թրեյսները մեծ թվով կարճ DB սպանների հետ։

2. Միացրեք ագրեգացիան/ջոյները, ավելացրեք քեշ շերտը։

17) Chek-Lister-ը ներդրման

1. Միացրեք OTel MSK-ը և միասնական Resource-ատրիբուտները (")։ name`, `env`, `region`).

2. W3C Trace Disext-ի քարոզչությունը բոլոր շերտերի և գծերի միջոցով։

3. Սեմանտիկ ատրիբուտների նվազագույն հավաքածու (HTTP/DB/queue/PSA)։

4. Tail-sampling: Սխալներ, p95 +, վճարումներ, կանար։

5. Logs 'trace _ id _ id', exemplars։

6. Dashbords: wwww.map, rele.ru compare, payments flow։

7. PII քաղաքականությունը 'դիմակավորում, գոտիներ, դերեր, ռենտենշն։

8. Թեստեր/թեստեր 'հարաբերակցության ստուգում և completeness tresing-ի առջև։

9. Runbook հղում Ալերտերում։

10. Հեռուստատեսության և կարդինալության արժեքի զեկույցը։

18) Անտիպատերնի

Ուղիները «միայն մուտքի վրա» առանց BD/հերթերի չեն։

Async-ում քարոզչության բացակայությունը «փչանում» է պատճառահետևանքային կապերի շղթաները։

Sampling-ը պատահական 1 տոկոսն առանց tail-տրամաբանության չի բռնում դանդաղ/սխալ։

Առանց «trace _ id» -ի լոգները չեն փոխկապակցվում։

Հում PII-ը ածխաջրածինների/լոգարանների մեջ ցույց է տալիս կոմպլանսի ռիսկերը։

Կարդինալությունը «առաստաղի մեջ» (user/session որպես metric պիտակներ) բացատրում է արժեքի պայթյունը։

Արդյունքները

OpenTelemetry-ը վերափոխում է տարբեր գործիքների հավաքումը արտադրողականության միջոցով։ Ենթատեքստը ճիշտ քարոզելիս, կոկիկ սեմանտիկան, tail-sampling-ը և «Road Logy» -ի միացումը iGaming-ը պահում է p95/p99 վերահսկման տակ, արագ հեռացնում է նեղ տեղերը (BD, հերթը, PSA) և վստահորեն արտադրում է թողարկումները նույնիսկ պիկի մեջ։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։