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

Structured Log: request context ও sensitive data

Structured Logs and Sensitive Data

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

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

  • Structured event ও free-text message আলাদা করা
  • Request correlation ও safe context যোগ করা
  • Retention, redaction ও logging failure বোঝা

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

Customer বললেন payment কেটে গেছে, order pending। চার server-এর log-এ একই message আছে: something went wrong। কোন order, কোন attempt এবং provider outcome কী ছিল বোঝা যাচ্ছে না। আবার debug করতে পুরো request dump করায় password ও token log-এ জমেছে। Useful logging এবং অতিরিক্ত sensitive data সংগ্রহ এক জিনিস নয়। শুরুতেই event schema ও permitted context নির্ধারণ করা দরকার।

সহজ করে বুঝি

Log একটি ঘটনার timestamped record। Structured log stable event name ও typed context রাখে, ফলে search এবং aggregation সহজ হয়। request_id, operation_id ও release identifier correlation-এ সাহায্য করে। Password, bearer token, session cookie বা raw payment details লিখবেন না। Severity business meaning অনুযায়ী দিন; প্রতিটি expected validation error emergency নয়। Application log, audit event এবং access log-এর উদ্দেশ্য ও retention আলাদা হতে পারে।

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

ডাক্তারের notes-এ শুধু রোগী খারাপ না লিখে সময়, measurement ও action রাখা হয়। কিন্তু public notice board-এ রোগীর সব গোপন কথা টাঙানো হয় না। Log-ও investigation-এর record, uncontrolled data warehouse নয়।

নকশাটি দেখুন

Diagram লোড হচ্ছে…

ভালো log প্রশ্নের উত্তর দেয়: কখন, কোন operation, কী ফল; secret ও অনিয়ন্ত্রিত payload তার অংশ নয়।
Diagram-এর text flow দেখুন
flowchart LR
 R[Laravel request] --> E[Structured event with safe IDs]
 E --> C[Collector or file channel]
 C --> S[Restricted searchable store]
 S --> I[Incident investigation]
 S --> T[Retention expiry]

Request থেকে stable event তৈরি হয়। Configured channel collector বা file-এ পাঠায়। Central store access-controlled এবং retention-limited থাকে। Investigator operation ID দিয়ে সংশ্লিষ্ট event মেলান। Logging pipeline unavailable হলে application latency ও disk usage কেমন হবে তা design করুন; log write failure business request থামাবে কি না সব event-এ একই সিদ্ধান্ত নয়।

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

Checkout service-এর fragment; $order persisted model, $requestId server-generated bounded string। Monolog JSON formatter configured না হলে context structured থাকলেও output plain text হতে পারে। Remote channel বা audit durability setup আলাদা। Personal data না লিখে identifier ব্যবহার করুন।

php
use Illuminate\Support\Facades\Log;
Log::info('order_payment_pending', [
    'order_id' => $order->id,
    'request_id' => $requestId,
    'provider' => 'primary_gateway',
    'release' => config('app.release'),
]);

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

Detailed log root-cause investigation সহজ করে, কিন্তু storage, indexing এবং privacy cost বাড়ায়। Sampling high-volume debug event কমাতে পারে; security audit বা financial transition-এর policy আলাদা। Synchronous remote log call slow হলে request path আক্রান্ত হয়। Collector buffering durable কি না এবং buffer full হলে drop না block—সেটি configuration-এর বিষয়।

সাধারণ ভুল

  • Request headers ও form-এর সব field dump করা।
  • প্রতিটি message-এ নতুন random event name বানানো।
  • Log file rotation ছাড়া disk ভরে যেতে দেওয়া।

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

Correlation ID user input থেকে নিলে length ও character validate করুন; trusted boundary-তে নতুন ID তৈরি করা সহজ। Queue job-এ operation context explicit carry করুন। Long-running worker-এর shared context পরের job-এ leak না হয় তা দেখুন। Exception stack-এ SQL bindings বা URL secret থাকতে পারে। Redaction policy এবং log-access audit নিয়মিত review করুন।

মনে রাখুন

ভালো log প্রশ্নের উত্তর দেয়: কখন, কোন operation, কী ফল; secret ও অনিয়ন্ত্রিত payload তার অংশ নয়।

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

Payment incident-এর জন্য পাঁচটি stable event name এবং allowed context লিখুন। একটি successful ও একটি unknown-outcome sequence তৈরি করুন। Log store বন্ধ হলে disk growth ও request latency কীভাবে পরীক্ষা করবেন পরিকল্পনা দিন।

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

1. Structured log কেন?

Stable fields দিয়ে search ও correlation করা যায়। Free-text spelling বদলালে automated analysis ভেঙে যেতে পারে।

2. সব input লিখলে debug সহজ?

Sensitive data exposure ও storage risk বাড়ে। Investigation-এর প্রয়োজনীয় safe identifiers ও selected fields রাখুন।

3. Request ID secret?

সাধারণত correlation identifier, authorization credential নয়। তবু untrusted value sanitize ও access context বিবেচনা করুন।

4. Info ও error কীভাবে?

Expected business outcome এবং unexpected failure আলাদা করুন। সব event error হলে actionable signal হারায়।

5. Log pipeline failure ভাবব কেন?

Remote write, buffer বা disk saturation app performance বদলাতে পারে। Failure policy ও alert আলাদা থাকতে হবে।

আরও পড়ুন

এই পাঠের কুইজ

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

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

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

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

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