Trace correlation — log, metric, profiling hodisasi yoki biznes yozuvini aynan bir distributed trace va uning spanlari bilan bog‘lash mexanizmidir. Odatda trace ID va span ID strukturali logga qo‘shiladi. Operator error logdan tracega o‘tib, requestning xizmatlar bo‘ylab qaysi bosqichda kechikkanini ko‘ra oladi.
Identifikatorlar
Trace ID butun end-to-end operatsiyani, span ID esa uning bitta ish qismini belgilaydi. Log bajarilayotgan span contextida yozilsa ikkala identifikatorni oladi. Faqat trace ID mavjud bo‘lsa request topiladi, lekin log qaysi span vaqtida yaratilgani aniq bo‘lmaydi.
Correlation ID trace ID bilan bir xil bo‘lishi shart emas. Biznes jarayoni bir nechta mustaqil tracega cho‘zilishi yoki tashqi mijoz o‘z identifikatorini yuborishi mumkin. Har identifikatorning scopei va kim yaratishi hujjatlashtiriladi.
Context propagation
HTTPda W3C Trace Context traceparent va tracestate headerlari orqali context uzatadi. Message brokerda context message header yoki propertyga inject qilinadi. Consumer uni extract qilib yangi span yaratadi. Header yo‘q yoki invalid bo‘lsa yangi trace boshlanadi; ishonchsiz tashqi qiymat uzunlik va format bo‘yicha tekshiriladi.
Async thread, coroutine yoki callbackda current context yo‘qolishi mumkin. Telemetry SDK runtimega mos context managerdan foydalanadi. Global o‘zgaruvchi parallel requestlarning IDlarini aralashtiradi.
Log bilan integratsiya
Logger instrumentation current span identifikatorlarini avtomatik field sifatida qo‘shishi mumkin. Log yozuvi trace collector orqali eksport qilinishi shart emas; u log backendga boradi, ID esa ikki tizim orasidagi linkni yaratadi. Grafana kabi interfeys derived field orqali logdagi trace IDdan tracing datasourcega URL hosil qiladi.
Sampling trace to‘liq saqlanmasligiga olib kelishi mumkin. Logda trace ID bor, lekin tracing backendda trace topilmasa bu har doim propagation xatosi emas. Sampled flag logga qo‘shilishi yoki backend sampling siyosati operatorga ma’lum bo‘lishi kerak.
Metric exemplar
Exemplar histogram bucket yoki metric samplega representative trace ID bog‘laydi. Dashboarddagi latency sakrashidan shu vaqtdagi tracega o‘tish mumkin. Barcha samplega exemplar qo‘shilmaydi; reservoir yoki sampled trace tanlanadi.
Metric labeliga trace ID qo‘yilmaydi, chunki har request yangi time series yaratadi. Exemplar high-cardinality identifikatorni alohida mexanizmda saqlaydi.
Xavfsizlik va diagnostika
Trace ID odatda secret emas, lekin u orqali bir nechta tizimdagi foydalanuvchi amali bog‘lanishi mumkin. Tenantlar orasida query access cheklanadi. Client bergan correlation qiymatini logga control character bilan yozish log injection keltirishi mumkin; strukturali encoding ishlatiladi.
Correlation sifati missing context ratio, orphan span va loglarning trace IDga egaligi bilan o‘lchanadi. Barcha logga ID qo‘shishning o‘zi yetarli emas: noto‘g‘ri parent-child aloqa trace vaqt chizig‘ini buzadi.
Qidiruv modeli
Log backend trace IDni indexed field yoki derived link sifatida saqlaydi. To‘liq indeks tez exact lookup beradi, ammo har requestdagi noyob qiymat storage xarajatini oshiradi. Loki modelida ID stream labeliga qo‘yilmaydi; log qatori ichidan qidiriladi. Tizim query hajmi va retentionga qarab indeks strategiyasini tanlaydi.
Trace dan logga o‘tishda span start-end oralig‘i va service filteri avtomatik berilishi mumkin. Faqat trace ID filteri uzun workflowda juda ko‘p yozuv qaytaradi. Span ID va resource attribute natijani toraytiradi.
Bog‘liq tushunchalar
Distributed tracing, Trace ID, Span ID, W3C Trace Context, Correlation ID, Exemplar, Context propagation