Trace context — distributed operatsiyaning trace identifikatori, joriy parent span va sampling qarorini process hamda network chegaralari orqali uzatadigan metadata to‘plamidir. W3C Trace Context standarti traceparent va tracestate HTTP headerlarini belgilaydi. U tracing vendorlari orasida umumiy propagation formatini yaratadi.
traceparent formati
traceparent version, trace-id, parent-id va trace-flags qismlaridan iborat. Trace ID butun operatsiyani, parent ID outgoing request yaratgan span ni bildiradi. Flags ichidagi sampled biti upstream recording qarorini ko‘rsatishi mumkin.
Nol trace yoki parent ID invalid hisoblanadi. Header uzunligi, hexadecimal format va version qoidasi tekshiriladi. Receiver invalid headerni ishonchli context deb qabul qilmaydi; odatda yangi trace boshlaydi va kerak bo‘lsa diagnostik signal yozadi.
tracestate
tracestate vendor va tizimga xos key-value a’zolarini saqlaydi. Bir nechta tracing tizimi sampling priority yoki routing ma’lumotini uzatishi mumkin. Entry tartibi va maksimal hajm standart bilan cheklangan; proxy qiymatni nazoratsiz ko‘paytirmaydi.
tracestate application payload yoki secret saqlash joyi emas. U ko‘p service va tashqi tomon orqali o‘tishi mumkin. Faqat standartga mos, qisqa telemetry metadata qo‘yiladi.
Inject va extract
Client instrumentation current contextni carrierga inject qiladi. HTTPda carrier headerlar, message brokerda propertylar, RPCda metadata bo‘lishi mumkin. Server yoki consumer extract qilib yangi span uchun remote parent yaratadi.
Har protocol carrier casing, binary/text encoding va size limitiga ega. Baggage trace context bilan birga uzatilishi mumkin, lekin u alohida standart va lifecycle hisoblanadi. Baggage maydonini span attribute deb avtomatik ko‘chirish maxfiylik va cardinality xavfini tug‘diradi.
Ishonch chegarasi
Tashqi client o‘zi tanlagan trace ID yuborishi mumkin. Service contextni davom ettirishi observability uchun foydali, ammo ID authorization yoki tenant identity sifatida ishlatilmaydi. Public boundaryda tracestate tozalanishi, yangi trace boshlanishi yoki faqat ruxsat etilgan a’zolar saqlanishi mumkin.
Juda ko‘p header va noto‘g‘ri format parser resursini sarflashi mumkin. Gateway limit va validation qo‘llaydi. Log injectiondan saqlanish uchun header raw holda matnga qo‘shilmaydi.
Propagation xatolari
Headerni umuman uzatmaslik trace ni ikkiga bo‘ladi. Retryda eski parentni noto‘g‘ri ishlatish attemptlar aloqasini yashiradi. Queue message qayta yetkazilganda original producer context va yangi consumer attempti saqlanadi; consumer span ID har urinishda yangi bo‘ladi.
Async library callback contextni yo‘qotsa child rootga aylanadi. Context manager va instrumentation testlari propagationni tekshiradi. B3, Jaeger yoki vendor formatidan W3Cga migratsiyada composite propagator bir nechta headerni qabul qilishi mumkin, ammo ikki context kelganda ustuvorlik aniq belgilanadi.
Baggage chegarasi
Baggage tenant tier yoki experiment kabi key-value kontekstni xizmatlar bo‘ylab uzatishi mumkin. Har hopda header hajmi network xarajatiga qo‘shiladi. User email, token yoki cheksiz qiymat baggagega qo‘yilmaydi. Receiver faqat ishonchli keylarni qabul qiladi.
Baggage o‘zgarsa child service yangi qiymatni downstreamga uzatishi mumkin, ammo upstream span avtomatik o‘zgarmaydi. Uni metric label yoki span attribute ga ko‘r-ko‘rona ko‘chirish cardinalityni oshiradi. Policy allowlist bilan boshqariladi.
Header limitidan oshgan baggage gatewayda rad etilishi yoki aniq policy asosida qisqartirilishi mumkin.
Bog‘liq tushunchalar
W3C Trace Context, traceparent, tracestate, Trace ID, Span ID, Context propagation, Baggage