Jaeger — distributed tracing ma’lumotlarini qabul qilish, saqlash, qidirish va vizual tahlil qilishga mo‘ljallangan tizim. U bitta foydalanuvchi requesti ko‘p service va process’lardan qanday o‘tganini ko‘rsatadi.
Microservice arxitekturasida umumiy latency yoki xatoni faqat bitta service logidan aniqlash qiyin. Trace barcha bog‘liq operationlarni bir zanjirga birlashtiradi.
Trace
Trace bitta request yoki business operationning to‘liq tarixi.
Masalan:
API Gateway
→ Order Service
→ Payment Service
→ Database
Trace ichida har bosqich alohida span sifatida saqlanadi.
Span
Span trace ichidagi bitta operation.
Span quyidagilarga ega:
- trace ID;
- span ID;
- parent span ID;
- operation nomi;
- start time;
- duration;
- status;
- attribute;
- event;
- link.
Root span butun requestning boshlanish nuqtasi.
Parent-child
Bir span boshqa span ichida bajarilsa parent-child relationship yaratiladi.
Bu trace’ni daraxt yoki timeline ko‘rinishida tuzadi.
Parallel chaqiriqlar bir parent ostida bir vaqtda davom etishi mumkin.
Critical path umumiy latencyga eng ko‘p ta’sir qilgan zanjirni ko‘rsatadi.
Trace context
Trace ID va parent ma’lumoti service’lar orasida request header yoki message metadata orqali uzatiladi.
Har service:
- incoming contextni o‘qiydi;
- yangi child span yaratadi;
- outgoing requestga yangi context yozadi.
Context uzilsa trace bir nechta mustaqil qismlarga bo‘linadi.
Instrumentation
Application spanlarni manual yoki automatic instrumentation orqali yaratadi.
Manual
Developer muhim business operation uchun aniq span va attribute qo‘shadi.
Automatic
HTTP client, server, database driver va framework chaqiriqlari agent yoki library orqali avtomatik kuzatiladi.
Automatic instrumentation domain ma’nosini to‘liq bilmaydi, manual spanlar uni boyitadi.
Collector
Collector trace ma’lumotini agent, SDK yoki boshqa collector’dan qabul qiladi.
U:
- validation;
- batching;
- processing;
- sampling;
- storage export
bajarishi mumkin.
Collector gorizontal scale qilinadi.
Agent
Ayrim arxitekturada local agent applicationlardan trace qabul qilib collectorga uzatadi.
beradi.
Zamonaviy telemetry pipeline’da umumiy collector bu vazifani bajarishi mumkin.
Storage
Trace storage:
bo‘yicha qidirishni qo‘llashi kerak.
Trace hajmi katta bo‘lgani sabab retention metriclarga qaraganda qisqaroq bo‘lishi mumkin.
Storage backend alohida scale qilinadi.
Query va UI
Jaeger UI orqali:
bo‘yicha trace qidiriladi.
Trace detail’da waterfall timeline, span attribute va eventlar ko‘rinadi.
Sampling
Barcha requestni saqlash qimmat bo‘lishi mumkin.
Sampling faqat ayrim trace’larni tanlaydi.
Turlari:
- doimiy foiz;
- rate limit;
- parent-based;
- probabilistic;
- tail-based;
- rule-based.
Sampling qaysi savollarga javob berish kerakligiga mos tanlanadi.
Head sampling
Trace boshida saqlash yoki tashlash qarori qabul qilinadi.
Afzalligi:
- sodda;
- kam network va storage;
- erta qaror.
Kamchiligi — keyin xato yoki juda sekin bo‘lib chiqqan trace tashlangan bo‘lishi mumkin.
Tail sampling
Trace spanlari yig‘ilgach yakuniy xususiyatga qarab qaror qilinadi.
Masalan:
- error;
- yuqori latency;
- maxsus customer flow.
Bu muhim trace’larni saqlaydi, ammo collector ko‘proq memory va state talab qiladi.
Attribute
Span attribute query va tahlil uchun metadata.
Yaxshi attribute:
Maxfiy yoki yuqori cardinality qiymat ehtiyotkor saqlanadi.
To‘liq URLda token yoki shaxsiy ma’lumot bo‘lishi mumkin.
Event va log
Span ichida ma’lum vaqtdagi hodisa event sifatida yoziladi.
Masalan:
Barcha application logni span eventga nusxalash trace hajmini oshiradi.
Log va trace ID orqali bog‘lanishi mumkin.
Baggage
Baggage trace context bilan service’lar orasida uzatiladigan key-value ma’lumot.
U routing yoki correlation uchun ishlatilishi mumkin.
Har request bilan uzatilgani sabab:
- hajm;
- maxfiylik;
- ishonch;
- propagation cost
cheklanadi.
Error tahlili
Error span status va exception event bilan belgilanadi.
HTTP 500 avtomatik error, ayrim business “rad etildi” holati esa normal natija bo‘lishi mumkin.
Semantika applicationga mos belgilanadi.
Performance overhead
- vaqt o‘lchash;
- context propagation;
- allocation;
- serialization;
- network
overheadiga ega.
Batching, sampling va asynchronous export ta’sirni kamaytiradi.
Telemetry application requestini bloklamasligi kerak.
Service graph
Trace spanlari orasidagi client-server relationship asosida service graph hosil qilinishi mumkin. Graph qaysi service qaysi service’ga murojaat qilishi, error va latency taqsimotini ko‘rsatadi.
Clock skew
Turli host soatlari mos bo‘lmasa child span parentdan oldin boshlangandek ko‘rinishi mumkin. Vaqt sinxronizatsiyasi va collector correction timeline tahlili uchun muhim.
Trace retention
Trace storage hajmi request soni, span count va samplingga bog‘liq. Error trace’lar uzoqroq, odatiy trace’lar qisqaroq saqlanishi mumkin.
Dependency latency
Span duration ichida queue kutishi, network, remote processing va client serialization bo‘lishi mumkin. Trace qaysi qatlamda vaqt ketganini ajratish uchun yetarli child spanlarga ega bo‘lishi kerak.
Trace qidiruvi
Faqat trace ID bo‘yicha emas, service, operation, tag va duration bo‘yicha qidirish uchun storage indexlari kerak. Yuqori cardinality taglar indeks xarajatini oshiradi.
Bog‘liq tushunchalar
Distributed tracing, Trace, Span, Trace context, Sampling, Collector, OpenTelemetry, Correlation ID, Microservice, Observability