পাঠ্যক্রম খুলুন
অগ্রসর পর্যায়

Distributed Tracing: span, OpenTelemetry ও sampling

Distributed Tracing, OpenTelemetry, and Sampling

এই পাঠের কুইজ ↓৫ মিনিট পড়াPHP 8.3+ · Laravel 12
এই পাঠের সূচিপত্র

এই পাঠে যা শিখবেন

  • Trace ও span দিয়ে request path বোঝা
  • Context propagation ও baggage আলাদা করা
  • Sampling-এর investigation সীমা বুঝতে পারা

সমস্যা দিয়ে শুরু

Checkout request মোট তিন সেকেন্ড নিচ্ছে। Laravel log-এ database query দ্রুত, payment service team-ও নিজেদের latency স্বাভাবিক বলছে। মাঝের queue wait, DNS বা repeated call কারো dashboard-এ একসঙ্গে নেই। Distributed tracing একটি logical operation-এর ছড়ানো কাজকে সম্পর্কিত করে, যাতে critical path দেখা যায়। প্রতিটি service আলাদা trace শুরু করলে সেই সম্পর্ক হারিয়ে যায়।

সহজ করে বুঝি

Trace হলো related spans-এর graph। Span একটি timed operation, যেমন HTTP handler, database call বা external request। Parent context downstream-এ propagate হলে একই trace-এ সম্পর্ক থাকে। OpenTelemetry instrumentation, SDK এবং exporter দিয়ে signals সংগ্রহে standard interfaces দেয়। Trace ID authorization credential নয়। Baggage context attributes বহন করতে পারে, তাই sensitive personal data বা secret সেখানে দেবেন না।

পরিচিত একটি উপমা

Parcel বিভিন্ন depot ঘুরে পৌঁছায়। প্রতিটি depot-এর scan একই tracking number-এ যুক্ত হলে কোথায় সময় গেল বোঝা যায়। সব depot নিজস্ব অমিল নম্বর দিলে শেষ customer-এর journey একত্র করা কঠিন হয়।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

Trace ছড়ানো কাজের causal path দেখায়; context propagation, safe attributes এবং sampling policy তার মান নির্ধারণ করে।
Diagram-এর text flow দেখুন
sequenceDiagram
 participant U as User
 participant A as Laravel API
 participant P as Payment API
 participant D as Database
 U->>A: Checkout root span
 A->>D: Query child span
 D-->>A: Rows
 A->>P: HTTP child span and context
 P-->>A: Provider result
 A-->>U: Response

Root span user request সময় ধরে। Database ও payment call child span হিসেবে তাদের duration দেখায়। HTTP client outgoing context propagate করে এবং instrumented receiver তা extract করে। Parallel child spans যোগ করলে total duration সব span duration-এর যোগফল নয়। Queue boundary-তে scheduling delay ও worker execution আলাদা মাপুন; asynchronous causality parent বা span link দিয়ে model করা যায়।

PHP ও Laravel-এ প্রয়োগ

Composer-এ OpenTelemetry API এবং app SDK/exporter configured ধরে service fragment। এটি manual span; HTTP auto-instrumentation ও propagator আলাদা setup। finally block exception হলেও scope detach ও span end করে। Attribute bounded রাখুন; raw card data, SQL bindings বা request body দেবেন না।

php
use OpenTelemetry\API\Globals;
$tracer = Globals::tracerProvider()->getTracer('shop.checkout');
$span = $tracer->spanBuilder('checkout.validate')->startSpan();
$scope = $span->activate();
try {
    $span->setAttribute('checkout.channel', 'web');
    $this->validator->validate($cart);
} finally {
    $scope->detach();
    $span->end();
}

সুবিধা, সীমাবদ্ধতা ও trade-off

Tracing cross-service bottleneck দেখায়, কিন্তু collection ও storage overhead আছে। Head sampling request শুরুতে সিদ্ধান্ত নেয়; rare error বাদ পড়তে পারে। Tail sampling outcome দেখে selection করতে পারে কিন্তু collector buffering এবং infrastructure বেশি লাগে। সব request trace করা দরকার কি না traffic ও investigation goal দিয়ে ঠিক করুন। Instrumentation failure যেন core request-এর availability নষ্ট না করে।

সাধারণ ভুল

  • প্রতিটি service-এ নতুন unrelated trace শুরু করা।
  • Baggage-এ token বা customer personal data রাখা।
  • Sampled trace দেখে সব traffic-এর error rate ধরে নেওয়া।

আরও একটু গভীরে

Logs-এ trace/span ID যোগ করলে detail থেকে path-এ যাওয়া যায়। Trusted boundary পেরোনো incoming trace headers validate ও constrain করুন। Trace context correlation দেয়, identity নয়। Clock skew timeline ব্যাখ্যা বদলাতে পারে; service duration local monotonic source-এ রাখা দরকার। Exporter flush behavior short-lived PHP execution ও long-running workers-এ আলাদা হতে পারে, তাই actual deployment model-এ পরীক্ষা করুন।

মনে রাখুন

Trace ছড়ানো কাজের causal path দেখায়; context propagation, safe attributes এবং sampling policy তার মান নির্ধারণ করে।

নিজে চেষ্টা করুন

Checkout-এ database, payment এবং queued email-এর span tree আঁকুন। কোন spans parallel আর কোনটি critical path বলুন। Rare failure sample বাদ পড়লে logs ও metrics কীভাবে সাহায্য করবে লিখুন।

নিজের বোঝা যাচাই করুন

1. Trace ও span এক?

Trace related spans-এর group; span একটি operation। Parent বা link causal সম্পর্ক দেখায়।

2. Total latency সব span যোগ?

না। Parallel spans overlap করে। Critical path এবং waiting time বুঝতে হবে।

3. Context identity proof?

না। Trace header correlation data; authorization credential হিসেবে ব্যবহার করা যাবে না।

4. Sampling কী হারায়?

কিছু request-এর detailed trace থাকে না। Selected sample দিয়ে unbiased traffic-wide rate দাবি করা ভুল।

5. Baggage safe কীভাবে?

Limited non-sensitive attributes দিন এবং boundary review করুন। এটি downstream-এ ছড়ায়, তাই secret রাখবেন না।

আরও পড়ুন

এই পাঠের কুইজ

এই পাঠ থেকে ২টি প্রশ্ন। উত্তর দিয়ে ব্যাখ্যা দেখুন; অধ্যায়ের কুইজ আলাদাভাবে দিতে হবে।

এই পাঠের ২টি প্রশ্নের উত্তর দিন। পাস করতে দুটিই সঠিক হতে হবে।

জমা দেওয়ার পর সঠিক উত্তর ও ব্যাখ্যা দেখবেন। ফলাফল এই ব্রাউজারে সংরক্ষিত থাকবে। অনুশীলনের ফল অধ্যায় সম্পন্নের হিসাবে যোগ হয় না।

সব বিষয় মিলিয়ে অনুশীলন করুন →

অগ্রগতি এই ব্রাউজারে সংরক্ষিত থাকে। শুধু পাঠ খুললে সম্পন্ন হয় না।