Distributed tracing — bitta foydalanuvchi so‘rovi yoki biznes operatsiyasining bir nechta service, queue va database bo‘ylab o‘tgan yo‘lini bog‘langan vaqt segmentlari orqali kuzatish usuli. Trace butun operatsiyani, span esa uning bitta bosqichini ifodalaydi. Trace ID barcha spanlarni, span ID esa parent-child munosabatni bog‘laydi.
Trace va span
Root span tashqi request yoki background jobdan boshlanadi. Service boshqa servicega murojaat qilganda child span yaratadi va trace contextni HTTP header yoki message metadata orqali uzatadi. Span quyidagi ma’lumotlarga ega bo‘lishi mumkin:
- operatsiya nomi va service;
- start/end timestamp va duration;
- status va error;
- endpoint, protocol va selected attributes;
- parent span ID;
- event va linklar.
Log satrlariga trace/span ID qo‘shilsa, trace’dan aniq batafsil logga o‘tish mumkin.
Context propagation
W3C Trace Context traceparent va tracestate headerlarini standartlashtiradi. Kutubxona incoming contextni parse qilib, outgoing callga uzatadi. Context yo‘qolsa trace bo‘linib ketadi. Async task, thread pool va callbacklarda execution context qo‘lda yoki instrumentation orqali ko‘chiriladi.
Message brokerda producer span bilan consumer span vaqt bo‘yicha to‘g‘ridan-to‘g‘ri parent bo‘lishi yoki span link ishlatishi mumkin. Bitta batchdagi ko‘p xabar va fan-in holati oddiy daraxtdan murakkab graph hosil qiladi.
Instrumentation
Manual instrumentation biznes uchun muhim bosqichlarni aniq nomlaydi. Auto-instrumentation HTTP framework, database driver va broker clientini avtomatik o‘raydi. OpenTelemetry vendor-neutral API, SDK va semantic convention beradi.
Har funksiya uchun span yaratish katta overhead va shovqin keltiradi. Service boundary, tashqi I/O va muhim business step asosiy nuqtalardir. Attribute’ga parol, token yoki shaxsiy ma’lumot yozilmaydi.
Sampling
Barcha trace’ni saqlash katta trafikda qimmat. Head-based sampling request boshida qaror qiladi; oddiy, lekin keyin xato bo‘lishini oldindan bilmaydi. Tail-based sampling trace tugagach error, latency yoki attribute asosida tanlaydi, ammo barcha spanlarni vaqtincha yig‘ish infratuzilmasini talab qiladi.
Parent-based sampling childlar bir trace bo‘yicha izchil qaror olishini ta’minlaydi. Sampling statistikani o‘zgartiradi; trace sonidan bevosita request count olish o‘rniga metrics ishlatiladi.
Vaqt va talqin
Turli host soatlari skew qilsa child span parentdan oldin boshlangandek ko‘rinishi mumkin. NTP farqni kamaytiradi, tracing backend ayrim correction qo‘llashi mumkin. Duration ko‘pincha monotonic clock bilan o‘lchanadi.
Span duration ichiga CPU, queue va downstream kutish kiradi. Uzun parentning qaysi qismi bottleneck ekanini child spanlar ko‘rsatadi. Instrument qilinmagan “bo‘shliq” application hisob yoki yo‘qolgan instrumentation bo‘lishi mumkin.
Xatolarni tahlil qilish
Trace waterfall fan-out, retry va N+1 queryni ko‘rsatadi. Bir requestda bir xil downstream span bir necha marta takrorlansa retry yoki loop aniqlanadi. Status ERROR bo‘lishi bilan HTTP status semantikasi muvofiqlashtiriladi; handled business rejection har doim system error emas.
Tracing log va metricni almashtirmaydi. Metric keng trend va alertni, trace individual misolni, log batafsil voqeani beradi. Ular umumiy service, route va version atributlari bilan bog‘lanadi.
Baggage
Trace baggage request bilan xizmatlar bo‘ylab uzatiladigan key-value contextdir. Tenant yoki experiment ID routing va telemetryda ishlatilishi mumkin. Baggage har hopda header hajmini oshiradi va ishonchsiz client tomonidan berilishi mumkin; sensitive ma’lumot joylanmaydi, allowlist va hajm cheklovi qo‘llanadi. Attribute faqat spanda saqlanadi, baggage esa downstreamga tarqaladi.
Queue va kechikish
Producer span tugashi bilan consumer span boshlanishi orasidagi vaqt queue delayni ko‘rsatadi. Message timestampiga faqat broker va host soatlari mos bo‘lsa tayaniladi. Consumer processing durationdan navbat kutishini ajratish throughput va backlog sababini aniqroq qiladi.
Bog‘liq tushunchalar
Trace ID, Span, OpenTelemetry, Context propagation, Sampling, Observability