লগিং ও মনিটরিং কী?
লগিং (Logging) হলো সিস্টেমের বিভিন্ন ইভেন্ট ও ডাটা জমা করে রাখার প্রক্রিয়া। আর মনিটরিং (Monitoring) হলো সেই লগ ও মেট্রিক বিশ্লেষণ করে সিস্টেমের স্বাস্থ্য বোঝার প্রক্রিয়া।
সহজ ভাষায়:
লগিং = ডায়েরি লেখা। মনিটরিং = ডায়েরি পড়ে বোঝা কখন কী হয়েছে, সিস্টেম ঠিক আছে কিনা।
[অ্যাপ্লিকেশন] → লগ তৈরি করে → স্টোরেজ → অ্যানালাইসিস → অ্যালার্ট → অ্যাকশন
↑ ↑
(লগিং) (মনিটরিং)
কেন লগিং ও মনিটরিং দরকার?
| কারণ |
ব্যাখ্যা |
| ডিবাগিং |
প্রোডাকশনে বাগ হলে লগ দেখে কারণ বের করা যায় |
| পারফরম্যান্স ট্র্যাকিং |
রেসপন্স টাইম, থ্রুপুট, এরর রেট দেখা |
| অ্যালার্টিং |
কিছু ভুল হলে সঙ্গে সঙ্গে নোটিফিকেশন পাওয়া |
| ক্যাপাসিটি প্ল্যানিং |
ট্রেন্ড দেখে বুঝা কবে রিসোর্স বাড়াতে হবে |
| সিকিউরিটি অডিট |
কে কখন কী করলো তার হিসাব রাখা |
| কমপ্লায়েন্স |
律法 অনুযায়ী লগ রাখা বাধ্যতামূলক (GDPR, HIPAA) |
পার্ট ১: লগিং (Logging)
লগের প্রকারভেদ
| লেভেল |
ব্যবহার |
উদাহরণ |
| DEBUG |
ডেভেলপমেন্টে ডিটেইল |
"ভেরিয়েবল x = 10, ফাংশনে ঢুকলাম" |
| INFO |
সাধারণ অপারেশন |
"User 123 লগইন করেছে" |
| WARN |
সমস্যা হতে পারে |
"ডাটাবেস কানেকশন ধীর (২ সেকেন্ড)" |
| ERROR |
এরর কিন্তু সিস্টেম চালু |
"পেমেন্ট ফেইলড, রি-ট্রাই করা হবে" |
| FATAL |
মারাত্মক এরর, অ্যাপ বন্ধ |
"ডাটাবেস কানেক্ট করতে পারিনি, বন্ধ করছি" |
স্ট্রাকচার্ড লগিং
লগ মেশিন-রিডেবল হওয়া উচিত (JSON ফরম্যাট)।
❌ খারাপ লগ (টেক্সট):
2024-01-15 10:30:45 User 123 login success from IP 192.168.1.1
✅ ভালো লগ (স্ট্রাকচার্ড JSON):
{
"timestamp": "2024-01-15T10:30:45Z",
"level": "INFO",
"service": "auth-service",
"user_id": 123,
"action": "login",
"ip": "192.168.1.1",
"duration_ms": 45,
"trace_id": "abc-123-def"
}
লগ ফরম্যাটে কী থাকা দরকার
| ফিল্ড |
প্রয়োজনীয়তা |
কেন |
| timestamp |
আবশ্যক |
কখন ঘটেছে তা জানতে |
| level |
আবশ্যক |
DEBUG/INFO/ERROR চিহ্নিত করতে |
| service |
আবশ্যক |
কোন সার্ভিস থেকে লগ এসেছে |
| message |
আবশ্যক |
মানুষের পড়ার জন্য |
| trace_id |
সুপারিশড |
একই রিকোয়েস্টের লগ গ্রুপ করতে |
| user_id |
প্রয়োজনমতো |
কোন ইউজার প্রভাবিত |
| duration_ms |
প্রয়োজনমতো |
পারফরম্যান্স ট্র্যাকিং |
লগিং বেস্ট প্র্যাকটিস
| টিপস |
বিস্তারিত |
| কনফিডেনশিয়াল ডাটা লগ করবেন না |
পাসওয়ার্ড, টোকেন, ক্রেডিট কার্ড নম্বর কখনো লগ করবেন না |
| লগ রোটেশন করুন |
logrotate বা elk stack দিয়ে পুরোনো লগ ডিলিট করুন |
| সেন্ট্রালাইজড লগিং |
সব সার্ভিসের লগ এক জায়গায় আনুন (ELK, Loki) |
| কনটেক্সট যোগ করুন |
শুধু "এরর" না লিখে বলুন কোন ফাংশন, কোন লাইন |
| স্যাম্পলিং |
খুব বেশি লগ হলে ১% স্যাম্পল করুন |
পার্ট ২: মনিটরিং (Monitoring)
মেট্রিকের প্রকারভেদ
| মেট্রিক টাইপ |
ব্যাখ্যা |
উদাহরণ |
| কাউন্টার (Counter) |
শুধু বাড়ে, কখনো কমে না |
রিকোয়েস্ট总数, এরর总数 |
| গেজ (Gauge) |
বাড়ে/কমে |
মেমোরি ইউসেজ, একটিভ কানেকশন |
| হিস্টোগ্রাম |
ডিস্ট্রিবিউশন মাপে |
রেসপন্স টাইম (p50, p95, p99) |
| মিটার (Meter) |
রেট মাপে |
রিকোয়েস্ট/সেকেন্ড |
গোল্ডেন সিগন্যাল (Google SRE)
চারটি মেট্রিক সব সিস্টেমে মনিটর করতে হবে:
১. লেটেন্সি → রিকোয়েস্ট কত সময় নিচ্ছে
২. ট্রাফিক → কত রিকোয়েস্ট আসছে (RPS)
৩. এরর → কত রিকোয়েস্ট ফেইল করছে (%)
৪. স্যাচুরেশন → সিস্টেম কতটুকু ব্যস্ত (CPU, মেমরি, ডিস্ক)
USE মেথড (ব্রেন্ডান গ্রেগ)
প্রতি রিসোর্সের জন্য তিনটি মেট্রিক:
U = Utilization (কতটা ব্যবহার হচ্ছে - %)
S = Saturation (কতটা লাইন বাকি আছে - queue length)
E = Errors (কত এরর হচ্ছে)
RED মেথড (মাইক্রোসার্ভিসের জন্য)
R = Rate (প্রতি সেকেন্ডে কত রিকোয়েস্ট)
E = Errors (কত শতাংশ রিকোয়েস্ট ফেইল করছে)
D = Duration (রিকোয়েস্ট কত সময় নিচ্ছে)
মেট্রিক সংগ্রহ আর্কিটেকচার
পুল মডেল (Prometheus)
[মেট্রিক সার্ভার] → প্রতি ১৫ সেকেন্ডে → [অ্যাপ ১] (HTTP /metrics)
→ প্রতি ১৫ সেকেন্ডে → [অ্যাপ ২]
→ প্রতি ১৫ সেকেন্ডে → [ডাটাবেস]
পুশ মডেল (Graphite, InfluxDB)
[অ্যাপ ১] → (কিয়ের মাধ্যমে) → [মেট্রিক সার্ভার]
[অ্যাপ ২] ↗
জনপ্রিয় টুল স্ট্যাক
| স্ট্যাক |
উপাদান |
কখন ব্যবহার |
| ELK |
Elasticsearch + Logstash + Kibana |
লগিং ফোকাস |
| Prometheus + Grafana |
Prometheus + Grafana |
মেট্রিক ফোকাস |
| Loki + Promtail + Grafana |
Loki |
কুবারনেটিস পরিবেশ |
| Datadog |
অল-ইন-ওয়ান (পেইড) |
এন্টারপ্রাইজ |
| New Relic |
APM ফোকাস |
অ্যাপ্লিকেশন পারফরম্যান্স |
| Sentry |
এরর ট্র্যাকিং ফোকাস |
এরর মনিটরিং জন্য |
অ্যালার্টিং (Alerting)
অ্যালার্টের প্রকারভেদ
| টাইপ |
ব্যাখ্যা |
উদাহরণ |
| শর্ট-টার্ম |
১-২ মিনিট পরে কিছু হয় |
৫০০ এরর বেড়ে গেলে |
| লং-টার্ম |
১০-১৫ মিনিট দেখে |
ডিস্ক ফুল হতে ৯০% পূর্ণ |
| প্রেডিকটিভ |
ভবিষ্যতে সমস্যা হবে |
রেট অনুযায়ী আর ২ দিনে ডিস্ক শেষ |
অ্যালার্ট রুল উদাহরণ (PromQL)
groups:
- name: example
rules:
# হাই এরর রেট
- alert: HighErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.05
for: 2m
annotations:
summary: "High error rate: {{ $value }}"
# হাই লেটেন্সি
- alert: HighLatency
expr: histogram_quantile(0.95, http_request_duration_seconds) > 0.5
for: 5m
# ডিস্ক প্রায় ফুল
- alert: DiskAlmostFull
expr: (node_filesystem_free_bytes / node_filesystem_size_bytes) < 0.1
for: 5m
# সার্ভিস ডাউন
- alert: ServiceDown
expr: up{job="myapp"} == 0
for: 1m
অ্যালার্ট বেস্ট প্র্যাকটিস
| টিপস |
কেন গুরুত্বপূর্ণ |
| শুধু অ্যাকশনেবল অ্যালার্ট |
যে অ্যালার্টে কিছু করার নেই, সেটা বাদ দিন |
| ফলস পজিটিভ কমানো |
খুব স্পর্শকাতর অ্যালার্ট সতর্কতা কমায় |
| এস্কেলেশন পলিসি |
৫ মিনিটে কেউ রেসপন্ড না করলে অন্যের কাছে যান |
| সাইলেন্ট (শান্ত) সময় |
রক্ষণাবেক্ষণের সময় অ্যালার্ট বন্ধ রাখুন |
| অ্যালার্ট ডকুমেন্টেশন |
প্রতিটি অ্যালার্টের জন্য "কী করবেন" লিখে রাখুন |
ডিস্ট্রিবিউটেড ট্রেসিং
পুরো রিকোয়েস্টের গল্প বোঝার জন্য ট্রেসিং জরুরি।
[ফ্রন্টএন্ড] → [অর্ডার সার্ভিস] → [পেমেন্ট সার্ভিস] → [ডাটাবেস]
│ │ │ │
└─────────────────┴───────────────────┴────────────────┘
(ট্রেসের আইডি: abc123)
ওপেনটেলিমেট্রি (OpenTelemetry): স্ট্যান্ডার্ড ট্রেসিং ফরম্যাট (সব ক্লাউডে কাজ করে)
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("process-order"):
# আপনার কোড
with tracer.start_as_current_span("check-inventory"):
check_inventory()
with tracer.start_as_current_span("charge-payment"):
charge_payment()
লগিং & মনিটরিং আর্কিটেকচার
প্রোডাকশন রেডি আর্কিটেকচার
[অ্যাপ ১] ─┐
[অ্যাপ ২] ─┼→ [লগ এজেন্ট] → [কাফকা] → [লগ প্রসেসর] → [Elasticsearch] → [কিবানা]
[অ্যাপ ৩] ─┘ (Fluentd) (Logstash) ↑
│
[মেট্রিক] ───→ [Prometheus] ──────────────────────────────────────┘
[Grafana]
↑
[অ্যালার্ট ম্যানেজার]
লগ ভলিউম ও খরচ
| সিস্টেম সাইজ |
ডেইলি লগ ভলিউম |
লগ রাখার সময় |
স্টোরেজ খরচ (প্রায়) |
| ছোট (১০ সার্ভিস) |
১০ GB |
৭ দিন |
৭০ GB |
| মাঝারি (৫০ সার্ভিস) |
৫০০ GB |
৩০ দিন |
১৫ TB |
| বড় (২০০+ সার্ভিস) |
২-৫ TB |
৩০-৯০ দিন |
১০০+ TB |
খরচ বাঁচানোর কৌশল:
- পুরোনো লগ কম্প্রেস করুন
- DEBUG লগ খুব কম রাখুন
- শুধু ERROR লগ অনেকদিন রাখুন
- স্যাম্পলিং (১০% রিকোয়েস্টের লগ রাখুন)
লগ ও মেট্রিক ভিজুয়ালাইজেশন
গুরুত্বপূর্ণ ড্যাশবোর্ড
| ড্যাশবোর্ড |
কী দেখায় |
| ওভারভিউ |
সব সার্ভিসের স্ট্যাটাস (সবুজ/লাল) |
| পারফরম্যান্স |
লেটেন্সি গ্রাফ, থ্রুপুট, এরর রেট |
| ইনফ্রাস্ট্রাকচার |
CPU, মেমরি, ডিস্ক, নেটওয়ার্ক |
| বিজনেস মেট্রিক |
কত অর্ডার হয়েছে, কত ইউজার লগইন করেছে |
| এরর অ্যানালাইসিস |
সবচেয়ে ঘন ঘন এরর কোনটা |
চিটশিট: কখন কী করবেন
| সমস্যা |
লগ দেখবেন? |
মেট্রিক দেখবেন? |
ট্রেস দেখবেন? |
| অ্যাপ্লিকেশন ক্র্যাশ |
✅ |
❌ |
❌ |
| রেসপন্স টাইম বেড়েছে |
❌ |
✅ |
✅ |
| ইউজার বলছে "কাজ করছে না" |
✅ |
✅ |
✅ |
| সার্ভারের CPU ১০০% |
❌ |
✅ |
❌ |
| ডাটাবেস কুয়েরি ধীর |
✅ |
✅ |
✅ |
| সিকিউরিটি ইনসিডেন্ট |
✅ |
❌ |
❌ |
সাধারণ ভুল ও সমাধান
| ভুল |
সমস্যা |
সমাধান |
| অতিরিক্ত অ্যালার্ট |
কেউ রেসপন্ড করে না |
গুরুত্ব অনুযায়ী প্রায়োরিটি দিন |
| কোনও স্ট্রাকচার ছাড়া লগ |
পার্স করা কঠিন |
JSON ফরম্যাটে লগ করুন |
| PII ডাটা লগ করা |
GDPR ভায়োলেশন |
লগিং করার আগে স্যানিটাইজ করুন |
| লগ রোটেশন নেই |
ডিস্ক ফুল হয়ে যায় |
logrotate সেট করুন |
| অ্যাকশনেবল অ্যালার্ট নেই |
অ্যালার্ট এলেও কী করবেন বুঝবেন না |
রানবুক লেখুন |