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) և վստահորեն արտադրում է թողարկումները նույնիսկ պիկի մեջ։