Instrumentation — dastur bajarilishi haqida ma’lumot yig‘ish uchun kod, bytecode yoki runtime’ga kuzatuv nuqtalarini qo‘shish jarayoni. Coverage counterlari, metric, trace span, profiler hook va security audit eventlari instrumentation shakllaridir. Maqsad dastur xatti-harakatini kuzatish, o‘lchash yoki tahlil qilishdir.
Static va dynamic usul
Source instrumentation compile’dan oldin kodga counter yoki callback qo‘shadi. Compiler instrumentation bytecode yoki machine instruction darajasida qo‘shilishi mumkin. Dynamic instrumentation esa ishlayotgan processga agent, probe yoki binary rewriting orqali ulanadi.
| Usul | Xususiyat |
|---|---|
| Source-level | Original qator va funksiya bilan bog‘lash oson |
| Compiler-level | Branch va instruction haqida aniqroq |
| Runtime agent | Kodni qayta qurmasdan ulanishi mumkin |
| Kernel probe | System call va network hodisasini kuzatadi |
| Manual telemetry | Domain ma’noli metric va span beradi |
Har qatlam boshqa savolga javob beradi. Kernel probe application user ID yoki order holatini o‘zicha bilmaydi.
Coverage instrumentation
Coverage tool executable line, branch yoki function kirishiga counter joylaydi. Test tugaganda counterlar fayl yoki collector’ga yoziladi. Multi-process ishda har process natijasi alohida bo‘lib, keyin build ID va source map asosida birlashtiriladi.
Counter faqat kod nuqtasi bajarilganini ko‘rsatadi. Assertion mavjudligi yoki natija to‘g‘riligini baholamaydi. Instrumentationdan olingan raw hit ma’lumoti reportda source qatorlariga map qilinadi.
Observability instrumentation
Metric counter request sonini, histogram latency distributionini o‘lchaydi. Trace instrumentation request boundary va dependency chaqiruvlarida span yaratadi. Log hodisa tafsilotini yozadi. OpenTelemetry kabi API va SDK telemetry’ni vendor-neutral shaklda chiqarishga yordam beradi.
Auto-instrumentation HTTP framework yoki database driver chaqiruvini avtomatik ushlaydi. U tez qamrov beradi, lekin biznes operatsiya nomi va foydali atributlar uchun manual span zarur bo‘lishi mumkin.
Overhead
Har counter, timestamp, allocation va export CPU, memory hamda I/O sarflaydi. Juda ko‘p span yoki yuqori cardinality label production latency’siga ta’sir qiladi. Sampling faqat trace’larning bir qismini saqlaydi; head sampling boshida, tail sampling natijani ko‘rgach tanlaydi.
Coverage instrumentation odatda test buildda ishlatiladi, chunki har branch counteri production uchun qimmat bo‘lishi mumkin. Performance benchmark instrumented va release buildda alohida o‘tkaziladi.
Semantik ta’sir
Instrumentation timingni o‘zgartirib race conditionni yashirishi yoki yuzaga chiqarishi mumkin. Bu Heisenbug holatidir. Function wrapper stack trace va identityga ta’sir qilishi, bytecode rewriting esa signature validation bilan to‘qnashishi mumkin.
Real-time yoki embedded tizimda probe’ning worst-case execution time’i hisoblanadi. “Kuzatuv kodining o‘zi tizimni buzmasin” talabi instrumentation dizaynining bir qismi.
Context propagation
Distributed tracing trace ID va span context’ni thread, async task va network boundary bo‘ylab uzatadi. Context yo‘qolsa trace bo‘laklarga ajraladi. Baggage’ga katta yoki maxfiy ma’lumot qo‘yish har request headerini oshiradi va privacy xavfini yaratadi.
Queue’da producer context message headeriga yoziladi, consumer undan yangi span bog‘laydi. Retry va batch processing’da bitta xabar bilan ko‘p xabar lineage’i aniq modellashtiriladi.
Xavfsizlik
Instrumentation request body, token, SQL parametr yoki shaxsiy ma’lumotni tasodifan yig‘ishi mumkin. Allowlist atributlar, redaction va retention siyosati qo‘llanadi. Telemetry exporter credential’i ham secret hisoblanadi.
Dynamic agent yuqori huquq bilan process ichiga kiradi. Agent manbasi, imzosi, versioni va access nazorati supply-chain siyosatiga mos bo‘ladi.
Bog‘liq tushunchalar
Code coverage, Telemetry, OpenTelemetry, Distributed tracing, Profiling, Sampling, Observability