Taqsimlangan trassalar
Taqsimlangan trassalar
1) Bu nima va nima uchun?
Taqsimlangan traska - bu butun so’rov yo’li bo’ylab operatsiyalarni bog’lash usuli: front → API-shlyuz → mikroservislar → DB/keshlar → brokerlar → joblar/payplaynlar.
Natija - har bir span komponent ishini atributlar, hodisalar va maqom bilan qayd etadigan span trace (trace). Bu RCAni tezlashtiradi, SLOni saqlashga yordam beradi va MTTRni kamaytiradi.
- Tanqidiy yo’l va «tor joylar» ning ko’rinishi.
- Alomatlar (metrika) ning sabablar (spanlar) va tafsilotlar (loglar) bilan korrelyatsiyasi.
- Retraylar, navbatlar, DLQ, fan-autlar, latentlik «arralari» tahlili.
2) Trastirovka ma’lumotlari modeli
Trace -’trace _ id’bilan qoʻngʻiroqlar grafigi.
Span — операция: `name`, `kind` (SERVER/CLIENT/PRODUCER/CONSUMER/INTERNAL), `start/end`, `status`, `attributes`, `events`, `links[]`.
Attributes - kalit qiymati (route, db. system, messaging. system, cloud. region va shu kabilar).
Events - span ichidagi belgilar (masalan,’retry’,’cache _ miss’).
Span Links - «ota-ona-bola» dan tashqari aloqalar (batchi, retrai, fan-in/out).
Resource - jarayon/servisning meta maʼlumotlari (’service. name’, versiya, atrof-muhit).
3) Kontekst va chidamlilik
3. 1 W3C Trace Context
Sarlavhalar:- ’traceparent’:’version-traceid-spanid-flags’(bayroqlarga sampling kiradi).
- ’tracestate’: vendor-o’ziga xos holat (minimal).
- Baggage - biznes kontekst uchun kalitlar (cheklangan, PII/sirlarsiz).
3. 2 Kontekstni tashlash
HTTP: `traceparent`/`tracestate`; gRPC: meta maʼlumotlar; WebSocket: yangilanishda va xabarlarda;
Xabarlar: headers (Kafka/NATS/RabbitMQ) - asl kontekstni PRODUCERda saqlaymiz va CONSUMERda ko’chiramiz.
Maʼlumot bazasi: kontekstni olib kelmaydi - atributlarni span (query, rows, db. system), lekin maʼnolari emas.
4) Semplash: qanday qilib bankrot bo’lmaslik kerak
Head sampling (kirish): ehtimollik/qoidalar boʻyicha (route, tenant, endpoint).
Tail sampling (kollektorda): «qiziqarli» treyslarni - xatolarni, uzoq p95/p99, noyob yo’llarni saqlab qolamiz.
Exemplars: gistogramma metrikasi aniq’trace _ id’ga havolalarni saqlaydi.
Tavsiya: 5xx/timeout/p99 uchun head 5-20% + tail-qoidalarni 100% birlashtirish.
5) Atributlar va taksonomiya (majburiy minimal)
Umumiy:- `service. name`, `service. version`, `deployment. environment`, `cloud. region`, `http. route`, `http. method`, `http. status_code`, `db. system`, `db. statement’(qisqartirilgan/maʼlumotsiz),’messaging. system`, `messaging. operation`, `peer. service`, `net. peer. name`, `tenant. id`, `request. id`.
Biznes yorliqlar: ehtiyotkorlik bilan, PIIsiz. Masalan:’order. segment`, `plan. tier`.
6) Asinxron ssenariylar, navbatlar va batchi
PRODUCER → CONSUMER: SPAN PRODUCERni kontekstda yarating; xabarda - headers (traceparent, baggage). CONSUMER SERVER/CONSUMER-span linkdan PRODUCERga (agar qatʼiy ierarxiya mavjud boʻlmasa) boshlanadi.
Fan-out: bitta kirish - ko’plab autputlar → sho’ba uyalar yoki links.
Batch: CONSUMER har bir messageId yoki N alohida kontekstdagi’links’uchun’events’bilan bitta’N’xabarlarni o’qiydi.
DLQ: alohida span’messaging. dlq. publish` с reason и count.
Retry:’event: retry’+’retry. count’atribut; sinab ko’rish uchun yangi CHILD-span.
7) Loglar va metriklar bilan integratsiya qilish
JSON’trace _ id ’/’ span _ id’→ bilan JSON’ni yozamiz.
RED/USE ko’rsatkichlarida exemplars → p99 cho’qqilaridan «yomon» uyqularga boramiz.
Trassalar hodisalar orqali texnik signallar (qaramlik xatolari) va biznes-signallar (konvertatsiya) hosil qiladi.
8) Unumdorlik va qiymat
Voqealarni semplash va trottling.
Hech qanday’user _ id ’/’ session _ id’ni label sifatida qisqartirish!
Eksportchi tomonidan siqish/batching; eksport taymautlarining chegaralari.
Saqlash: 1-7 kun issiq, keyin - agregatlar/faqat «muammoli» treyslar.
Trat toifalari: kollektorlar, indekslar, ombor, egress.
9) Xavfsizlik va maxfiylik
In Transit: TLS 1. kollektor agentlar; At Rest: shifrlash, shaxsiy kalitlar («In Transit/At Rest shifrlash» ga qarang).
PII va sirlar: atributlarga/voqealarga yozmaymiz; prodyuserda tokenlash/niqoblash.
Koʻp ijarali:’tenant. id’resurs-leybl va fazolarni izolyatsiya qilish, o’qish siyosati sifatida; izlardan foydalanishni tinglash («Audit va o’zgarmas jurnallar» ga qarang).
10) Joriy etish sxemalari (referens)
10. 1 OpenTelemetry SDK (psevdokod)
python from opentelemetry import trace from opentelemetry. sdk. trace import TracerProvider from opentelemetry. sdk. resources import Resource from opentelemetry. sdk. trace. export import BatchSpanProcessor from opentelemetry. exporter. otlp. proto. grpc. trace_exporter import OTLPSpanExporter
provider = TracerProvider(resource=Resource. create({
"service. name":"checkout","service. version":"1. 12. 0","deployment. environment":"prod"
}))
provider. add_span_processor(BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317", insecure=True)))
trace. set_tracer_provider(provider)
tr = trace. get_tracer("checkout")
with tr. start_as_current_span("POST /pay", attributes={
"http. route":"/pay","http. method":"POST","tenant. id":"t-42"
}):
business logic, external API call and pass DB
10. 2 OTel Collector - tail sampling (parcha)
yaml processors:
tailsampling:
decision_wait: 2s policies:
- type: status_code status_codes: [ERROR]
- type: latency threshold_ms: 900
- type: probabilistic sampling_percentage: 10 exporters:
otlphttp: { endpoint: http://trace-backend:4318 }
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch, tailsampling]
exporters: [otlphttp]
10. 3 Kafka - kontekstni ko’chirish (konsepsiya)
PRODUCER: headers’traceparent’,’baggage’qo’shing.
CONSUMER: agar xabar yangi oqimni boshlasa - yangi SERVER/CONSUMER-span c linkdan headers kontekstiga.
11) Data/ETL и ML
Batch payplaynlar uchun: batch/partition s’dataset. urn`, `run. id`, `rows. in/out`, `freshness. lag`.
ML uchun: mashq/inferens, model versiyasi, latency, feature store.
Lineage:’run. id` и `dataset. urn’treysdan ma’lumotlarning kelib chiqish grafigiga o’tish imkonini beradi.
12) SLO trassalar platformasi
Foydalanish imkoniyati: ≥ 99. 9%
Indekslash kechikishi: ≤ 60 s p95
Head-sample qoplamasi: asosiy yo’nalishlarning 5-10% ≥
«Kritik yo’llar» katalogi bo’yicha treyslarni 100% saqlab qolish
Platforma alertlari: droplarning o’sishi, eksport taymautlari, indeksator orqasi, kardinallikning haddan tashqari qizib ketishi.
13) Test sinovi va verifikatsiya
CI trastirovka kontrakti: asosiy endpointlarda spanlarning mavjudligi, majburiy atributlar, to’g "ri’traceparent’shlyuz/proksi orqali uchib o’tadi.
Synthetic/rum-namunalar: tashqi tomondan treyslarni yig’ish.
Chaos/hodisalar: qaramlikni oʻchirish, tail-sempler xatolarni «tanlashini» tekshirish.
Smoke prodda: chiqarilgandan keyin - «uyqular bormi» va exemplar → treys.
14) Chek-varaqlar
Sotishdan oldin
- Hamma joyda W3C Trace Context tashlanadi; xabarlar uchun - headers.
- Asosiy head-semplash kiritilgan; 5xx/p99 uchun tail qoidalari sozlangan.
- Majburiy atributlar: route, method, status, service. version, tenant. id.
- JSON’trace _ id ’/’ span _ id’, exemplars bilan metriklar.
- PII sanitizyerlar; yo’lda/dam olishda shifrlash; kirish siyosati.
- Dashbordlar: «tanqidiy yo’l», «qaramlik xatolari», «retrai/taymautlar».
Foydalanish
- Atributlarning kardinalligini har oyda ko’rib chiqish; kvotalar.
- Tyuning tail-sampling SLO (kamroq shovqin, hamma «issiq» - namunada).
- O’quv RCA o’tish metrikasi → exemplar → trace → logi.
- Navbatlar, DLQ, ETL joblar uchun qoplamalarni tekshirish.
15) Runbook’и
RCA: p99 ga/pay
1. RED-dashbordni ochish; p99 binosidan exemplar orqali treysga o’tish.
2. «Tor» CLIENT-span (masalan,’gateway. call’), tekshirish’retry. count’, taymautlar.
3. Xizmat/bogʻliqlik, hudud/hudud versiyalarini solishtirish.
4. Tanazzulni yoqish (keshlovchi javob/RPS limiti), qaramlik egalarini xabardor qilish.
5. Fixdan keyin - RCA va optimallashtirish uchun chiptalar.
DLQ portlashi
1. ’messaging’ uchun trassalarni filtrlash. dlq. publish`.
2. Sabablarini tekshirish (events), reliz bilan bogʻlash.
3. Reprocess dasturini ishga tushirish, CONSUMER’da vaqtinchalik vaqtni uzaytirish, downstream egalarini xabardor qilish.
16) Tez-tez xatolar
Shlyuzlar/brokerlar orqali kontekst oqimi yoʻq. Yechim: middleware/interseptorlar, yagona kutubxonalar.
Barcha treyslar 100%. Qimmat va ma’nosiz - tail-sempling dan foydalaning.
’trace _ id’. Korrelyatsiya yoʻqolmoqda → MTTR ↑.
atributlarda PII. Kamuflyaj/tokenizatsiya qilish; faqat texnik kontekstni saqlang.
«Ovozsiz» orqa fon joblari. Uyquni batch/partition va’runga qoʻshing. id`.
Nomlar turlicha. Span nomlari va sifatlar kalitlari lugʻatini kiriting.
17) FAQ
S: Head yoki tail sampling yaxshiroqmi?
O: Kombinatsiya. Head asosiy qatlamni beradi, tail anomaliyalar/xatolar saqlanishini kafolatlaydi.
S: Qattiq ierarxiyasiz Kafka orqali qanday kuzatish mumkin?
O: PRODUCER va CONSUMER oʻrtasida span linklardan foydalaning; kontekst - headers.
S: Sezgir SQL bilan nima qilish kerak?
O:’db. statement’qisqartirilgan/normallashtirilgan (qiymatsiz) yoki’db. operation’+ oʻlchamlar/vaqt.
V: Biznes-metriklar bilan qanday bog’lash kerak?
O: Domen atributlarini PII (plan/segment) siz qo’shing, span ichidagi «biznes bosqichlari» voqealaridan foydalaning va exemplar konversion metriklaridan o’ting.
- «Kuzatilganlik: loglar, metriklar, trastirovkalar»
- «Audit va o’zgarmas jurnallar»
- «In Transit/At Rest shifrlash»
- «Ma’lumotlarning kelib chiqishi (Lineage)»
- «Privacy by Design (GDPR)»
- «Sirlar menejmenti»