Span — distributed trace ichidagi bitta nomlangan ish birligini ifodalovchi yozuvdir. HTTP request, database query, function execution yoki message processing span bo‘lishi mumkin. Har span boshlanish vaqti, davomiylik, trace ID, o‘z span IDsi va parent yoki link aloqasiga ega.
Asosiy maydonlar
Span name barqaror operatsiyani bildiradi, masalan GET /users/{id}. Haqiqiy user IDni nomga qo‘yish juda ko‘p noyob nom yaratadi; u kerak bo‘lsa attribute sifatida ham ehtiyotkor saqlanadi. Span kind client, server, producer, consumer yoki internal rolini ko‘rsatadi.
Attribute key-value metadata beradi. Semantic conventions http.request.method, server.address yoki db.system kabi umumiy nomlarni belgilaydi. Bir xil convention turli library va service trace larini birgalikda tahlil qilishni osonlashtiradi.
Parent, child va link
Child span parent bajarilish doirasidagi ishni ifodalaydi. Server span incoming client spanga remote parent orqali ulanadi. Parent ID yo‘q span root hisoblanadi. Noto‘g‘ri parent tanlansa waterfall va exclusive duration noto‘g‘ri ko‘rinadi.
Link parentlikdan tashqari causal aloqani beradi. Batch consumer bir nechta producer contextiga link qilishi, retry yangi span sifatida avvalgi attemptga bog‘lanishi mumkin. Link aloqasi timeline ownershipini o‘zgartirmaydi.
Event va status
Span event ma’lum timestampdagi hodisani, masalan exception, cache miss yoki reconnectni saqlaydi. Exception event type, message va stack trace atributlariga ega bo‘lishi mumkin. Har logni eventga nusxalash telemetry hajmini oshiradi; faqat trace tahliliga tegishlisi tanlanadi.
Status Unset, Ok yoki Error kabi umumiy natijani bildiradi. HTTP 404 ayrim route uchun kutilgan biznes natija bo‘lishi mumkin; instrumentation semantic conventionga mos status qo‘yadi. Error status exception avtomatik qayta tashlanganini emas, operatsiya natijasini ifodalaydi.
Lifecycle
Span ish boshlanishiga yaqin yaratiladi va barcha relevant amallar tugagach end qilinadi. Span juda erta tugasa keyingi event va child context yo‘qoladi; end unutilsa duration va exporter buffer buziladi. try/finally yoki context manager lifecycle ni kafolatlaydi.
Async ish parent scope tugagandan keyin davom etsa context explicit uzatiladi. Thread-local qiymat coroutine almashinishida yetarli bo‘lmasligi mumkin. Detached background ish yangi root yoki linkli span sifatida modellanishi mumkin.
Granularity va xarajat
Har kichik function uchun span yaratish trace ni shovqinli va qimmat qiladi. Network, storage, muhim algorithm bosqichi yoki mustaqil latency budgetga ega ishlar span uchun yaxshi nomzod. Juda katta bitta span esa qaysi ichki bosqich sekinligini yashiradi.
Attribute soni va uzunligi backend limitiga ega. High-cardinality qiymat trace query indeksini qimmatlashtirishi mumkin. Secret, raw payload va query parameterlar default holda yozilmaydi. Sampling qilinsa span eksport qilinmasligi mumkin, ammo instrumentation yaratish xarajati qisman qoladi.
Duration tahlili
Parent durationdan child durationlarni oddiy ayirish exclusive vaqtni har doim bermaydi, chunki child spanlar parallel va ustma-ust bo‘lishi mumkin. Critical path interval unioni bilan tahlil qilinadi. Client va server span orasidagi bo‘shliq network, queue yoki soat farqini o‘z ichiga oladi.
Clock skew turli host spanlarini timeline da noto‘g‘ri joylashtirishi mumkin. Collector ayrim vizual tuzatish qilsa ham source soat sinxronizatsiyasi kerak. Monotonic clock duration uchun wall clock sakrashidan barqarorroq.
Bog‘liq tushunchalar
Trace, Span ID, Parent span, Span link, Span event, Semantic conventions, OpenTelemetry