Container Logs: লগ ম্যানেজমেন্ট এবং তদারকি 📜
ডকার কন্টেইনারে চলমান অ্যাপ্লিকেশনের স্ট্যাটাস এবং এরর চেক করার জন্য লগ অত্যন্ত গুরুত্বপূর্ণ। প্রোডাকশন লেভেলে লগগুলো কিভাবে জেনারেট হয়, কোথায় সেভ হয় এবং কিভাবে ম্যানেজ করা হয়, তা এই গাইডে আলোচনা করা হলো।
১. লগিং ড্রাইভার (Logging Drivers)
ডকার ডিফল্টভাবে কন্টেইনারের লগগুলো ফাইল আকারে হোস্ট মেশিনে জমা রাখে। তবে আপনি চাইলে বিভিন্ন ড্রাইভার ব্যবহার করে এগুলোকে অন্য জায়গায় পাঠাতে পারেন।
- json-file (Default): লগগুলো JSON ফরম্যাটে লোকাল ফাইলে সেভ হয়।
- syslog: লিনাক্স সিস্টেমের স্ট্যান্ডার্ড
syslogসার্ভিসে লগ পাঠায়। - journald: সিস্টেমের
journaldলগিং সিস্টেমে লগ জমা রাখে। - gelf (Graylog Extended Log Format): Graylog সার্ভারে লগ পাঠানোর জন্য।
- fluentd: লগ অ্যাগ্রিগেশন টুল Fluentd-তে ডাটা পাঠানোর জন্য।
২. লগ কনফিগার করা (Configuration)
ব্যাবহারকারী চাইলে কমান্ড লাইন থেকে বা ডকার কম্পোজ ফাইল থেকে লগের ধরন সেট করতে পারেন:
docker run --log-driver syslog nginxDocker Compose উদাহরণ:
services:
web:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m" # একটি লগের সাইজ সর্বোচ্চ ১০ মেগাবাইট
max-file: "3" # সর্বোচ্চ ৩টি লগ ফাইল রাখবে (Log Rotation)৩. লগ রোটেশন (Log Rotation)
যদি আপনি লিমিট না করে দেন, তবে লগ ফাইল বাড়তে বাড়তে পুরো ডিস্ক ফুল করে দিতে পারে। এটি এড়ানোর জন্য Log Rotation জরুরি। উপরের উদাহরণের মতো max-size এবং max-file ব্যবহার করে আপনি ডিস্ক স্পেস সেভ করতে পারেন।
৪. লগ অ্যাগ্রিগেশন (Log Aggregation)
যখন আপনার অনেকগুলো সার্ভার এবং শয়ে শয়ে কন্টেইনার থাকে, তখন প্রতিটি কন্টেইনারে ঢুকে লগ দেখা সম্ভব হয় না। এজন্য Centralized Logging ব্যবহার করা হয়।
- EFK Stack: ElasticSearch + Fluentd + Kibana
- ELK Stack: ElasticSearch + Logstash + Kibana
- Grafana Loki: বর্তমান সময়ের খুব পপুলার এবং লাইট-ওয়েট লগিং সলিউশন।
৫. গুরুত্বপূর্ণ কমান্ডসমূহ
- লাইভ লগ দেখা:bash
docker logs -f container_name - শেষ ১০০ লাইন লগ দেখা:bash
docker logs --tail 100 container_name - নির্দিষ্ট সময়ের লগ দেখা:bash
docker logs --since 30m container_name
TIP
প্রোডাকশনে সবসময় json-file ড্রাইভারের সাথে max-size লিমিট সেট করে দিন, অথবা সেন্ট্রালাইজড কোনো লগ সার্ভিস ব্যবহার করুন।