𝗖𝗲𝗻𝘁𝗿𝗮𝗹𝗶𝘇𝗲𝗱 𝗟𝗼𝗴𝗴𝗶𝗻𝗴 𝗪𝗶𝘁𝗵 𝗚𝗿𝗮𝗳𝗮𝗻𝗮 𝗔𝗹𝗹𝗼𝘆 𝗮𝗻𝗱 𝗟𝗼𝗸𝗶
আগে লগ খোঁজার মানে ছিল নির্দিষ্ট সার্ভারে SSH করা এবং grep চালানো।
কোনো ইনসিডেন্টের সময় আপনি প্রায়ই জানেন না কোন সার্ভারে ত্রুটিটি রয়েছে। ফলে আপনাকে এক হোস্ট থেকে অন্য হোস্টে যেতে হয় এবং চোখের আন্দাজে টাইমস্ট্যাম্প মেলানোর চেষ্টা করতে হয়। দ্রুততার প্রয়োজন হলে এই প্রক্রিয়াটি ব্যর্থ হয়।
আমি সেন্ট্রালাইজড লগিংয়ে চলে এসেছি। এখন প্রতিটি সার্ভারের প্রতিটি লগ লাইন এক জায়গায় জমা থাকে। আমি প্রতিটি হোস্টে Grafana Alloy ব্যবহার করি যাতে লগগুলো Loki-তে পাঠানো যায়।
কেন এই স্ট্যাক (stack)?
- ELK অনেক ভারী। Elasticsearch-এর জন্য প্রচুর রক্ষণাবেক্ষণ এবং হার্ডওয়্যারের প্রয়োজন হয়।
- Loki পুরো টেক্সটের পরিবর্তে লেবেল (labels) ইনডেক্স করে। এটি চালানো সাশ্রয়ী এবং সহজ করে তোলে।
- আপনার সার্ভারের সংখ্যা বাড়ার সাথে সাথে SaaS টুলগুলো দ্রুত ব্যয়বহুল হয়ে ওঠে।
- Alloy হলো Grafana-এর নতুন স্ট্যান্ডার্ড এজেন্ট। এটি দক্ষ এবং নির্ভরযোগ্য।
সেটআপ (The Setup)
Alloy প্রতিটি হোস্টে ফাইলগুলো পড়ে। এটি host, environment এবং service-এর মতো লেবেল যোগ করে। তারপর এগুলো Loki-তে পুশ করে। আমি একটি Slack বটও তৈরি করেছি। এটি Loki API ব্যবহার করে, যাতে টিম তাদের চ্যাট চ্যানেল না ছেড়েই লগগুলো সংগ্রহ করতে পারে।
বাস্তব জীবনে আমি যেসব চ্যালেঞ্জের সম্মুখীন হয়েছি:
- পারমিশন (Permissions): Alloy নিজস্ব ইউজার হিসেবে চলে। যদি আপনার অ্যাপের লগগুলো সীমাবদ্ধ (restricted) থাকে, তবে Alloy কোনো ত্রুটি ছাড়াই কাজ করা বন্ধ করে দেবে। আপনাকে অবশ্যই alloy ইউজারকে আপনার অ্যাপের গ্রুপে যুক্ত করতে হবে।
- মিশ্র ওএস (Mixed OS) ফ্লিট: আপনার কাছে Debian, Ubuntu এবং RHEL বক্স থাকতে পারে। প্রতিটি ক্ষেত্রে আপনাকে সঠিক প্যাকেজ ম্যানেজার ব্যবহার করতে হবে।
- লিগ্যাসি এজেন্ট (Legacy agents): পুরনো লগ শিপারগুলো ডাবল-শিপিংয়ের কারণ হতে পারে। রোলআউটের সময় আপনাকে সেগুলো খুঁজে বের করে সরিয়ে ফেলতে হবে।
- মাল্টিলাইন লগ (Multiline logs): Java stack trace অনেকগুলো লাইন জুড়ে থাকে। একটি মাল্টিলাইন regex ছাড়া, একটি মাত্র ত্রুটি চল্লিশটি আলাদা এবং অকেজো এন্ট্রিতে পরিণত হয়।
লেবেলের গোল্ডেন রুল (The Golden Rule of Labels)
লেবেলে হাই-কার্ডিনালিটি (high-cardinality) ডেটা রাখবেন না। রিকোয়েস্ট আইডি (request ID) বা ইউজার আইডি (user ID)-কে কখনোই লেবেল হিসেবে ব্যবহার করবেন না। এটি আপনার ইনডেক্স নষ্ট করে দেবে। সার্ভিস নাম বা এনভায়রনমেন্টের মতো জিনিসের জন্য লেবেল ব্যবহার করুন। অন্য সবকিছুর জন্য ফিল্টার ব্যবহার করুন।
ফলাফল (The Result)
সেন্ট্রালাইজড লগিং লগগুলোকে মেট্রিকসে (metrics) রূপান্তরিত করে। কোনো সমস্যা মানুষের নজরে পড়ার জন্য অপেক্ষা না করে আপনি এরর রেট (error rate)-এর ওপর অ্যালার্ট সেট করতে পারেন। কোনো ইনসিডেন্ট ঘটলে, একটি Slack কমান্ডের মাধ্যমেই সমাধান পাওয়া সম্ভব।
Optional learning community: https://t.me/GyaanSetuAi
