Bosh sahifa Wiki Jaeger

Jaeger

Jaegerdistributed 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:

  1. incoming contextni o‘qiydi;
  2. yangi child span yaratadi;
  3. 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:

bajarishi mumkin.

Collector gorizontal scale qilinadi.

Agent

Ayrim arxitekturada local agent applicationlardan trace qabul qilib collectorga uzatadi.

Agent:

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:

  • service;
  • operation;
  • vaqt;
  • minimal va maksimal duration;
  • tag;
  • error

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

Instrumentation:

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