OpenVPN লগের মালিক কে: ডেমন, rsyslog নাকি logrotate?
এক লেখক, এক রোটেটর, এক ধারণনীতি। আগে পথ বেছে নিন, সংকীর্ণ ফিল্টারের জন্য ডেমনটির নাম দিন, আর একটি রোটেট হওয়া ফাইল দিয়েই পুনরায় খোলা প্রমাণ করুন।
লগ রোটেশন একটি অনুমানযোগ্য উপায়ে ভেঙে পড়ে: তিনটি উপাদানই মনে করে তারাই ফাইলটির মালিক, আর ফলাফল হলো এমন একটি রোটেট হওয়া লগ যা নতুনটি খালি থাকা অবস্থায় বাড়তেই থাকে। ডেমন একটি ডেসক্রিপ্টর ধরে রাখে, logrotate পথটির নাম বদলায়, আর rsyslog সম্পূর্ণ অন্য জায়গায় লেখে। স্তূপে আরেকটি নিয়ম যোগ করার আগে একজন লেখক ও একজন রোটেটর বেছে নিন। নিচের চেকলিস্ট ঠিক এই ক্রমে এগোয়, কারণ পরের প্রতিটি ধাপ তার উপর নির্ভর করে।
ফাইলটি কে লেখে তা ঠিক করুন
দুটি নকশাই বৈধ। প্রথমটিতে VPN প্রক্রিয়া নিজের log বা log-append অপশনের মাধ্যমে নিজেই একটি ফাইল লেখে। দ্বিতীয়টিতে এটি রেকর্ডগুলো সিস্টেম লগারে পাঠায় এবং rsyslog বা journald ঠিক করে সেগুলো কোথায় জমা হবে।
এগুলো বিকল্প, স্তর নয়। যে হোস্ট দুটোই চালু করে সে দুটি পরস্পরবিরোধী ফাইল নিয়ে শেষ করে, আর আপনি যে ফাইলটি পড়ছেন সেটিই প্রায়ই পুরোনো। সচেতনভাবে পথটি বেছে নিন, তারপর অন্য লেখকটিকে সরিয়ে দিন।
কিছু বদলানোর আগে পরিষেবার কার্যকর কনফিগারেশন পড়ুন, unit ফাইলকে অগ্রাহ্য করতে পারে এমন drop-in ফাইলসহ। আপনি যে প্রোফাইল সম্পাদনা করেছেন সেখানে থাকা কোনো নির্দেশনা এটির প্রমাণ নয় যে এটিই চলমান প্রক্রিয়াটি লোড করেছে। unit-টি প্রক্রিয়ার আর্গুমেন্টের সঙ্গে, তারপর সত্যিই যে ফাইলগুলো এটি খুলেছে তার সঙ্গে মিলিয়ে দেখুন।
ডেমনটির নাম দিন যাতে ফিল্টার সংকীর্ণ হয়
syslog পথে ডেমনকে আলাদা পরিচয় দিন এবং তার উপরেই ফিল্টার করুন। এই VPN ইনস্ট্যান্সের প্রোগ্রাম-নামের সঙ্গে মেলে এমন নিয়ম তার রেকর্ডগুলোকে ভাগাভাগি করা ফাইলের বাইরে রাখে, যার ধারণনীতি অন্য কিছুর।
সংকীর্ণ নিয়ম পরের প্রশ্নটিকেও উত্তরযোগ্য করে: এই লাইনটি কোন পরিষেবা তৈরি করেছে? যে ফিল্টার VPN শব্দযুক্ত সবকিছুর সঙ্গে মেলে, সে আনন্দের সঙ্গে দ্বিতীয় টানেলের ট্র্যাফিকও কুড়িয়ে নেবে এবং দুটোই অস্পষ্ট করে দেবে। unit যে সঠিক শনাক্তকারীটি লগারকে দেয় তার সঙ্গে মিল করুন।
ক্রিয়ার পরে নিয়মটি বন্ধ করুন, যাতে রেকর্ডগুলো ডিফল্ট গন্তবেও গিয়ে না পড়ে। দুটি ফাইলে পুনরাবৃত্ত লাইন লগিং বাগের মতো দেখায়, আসলে সেটি একটি অনুপস্থিত স্টপ। এই একটিমাত্র বাদ পড়া ধারণনীতির ডিস্ক-খরচও দ্বিগুণ করে দেয়।
ডেসক্রিপ্টর না হারিয়ে রোটেট করুন
ডেমন যখন ফাইলটি লেখে, logrotate পথটির নাম বদলায় কিন্তু প্রক্রিয়া তার খোলা ডেসক্রিপ্টর ধরে রাখে। নতুন রেকর্ডগুলো নাম-বদলানো ফাইলেই চলতে থাকে যতক্ষণ না কিছু প্রক্রিয়াটিকে মূল পথটি আবার খুলতে বাধ্য করে; এজন্যই রোটেশন কাজ করছে বলে মনে হতে পারে অথচ নতুন ফাইল খালি থাকে।
সমাধান হলো একটি postrotate ক্রিয়া যা পরিষেবার নথিভুক্ত রিলোড বা রিস্টার্ট আচরণ চালু করে। লগারকে সিগন্যাল পাঠানো সম্পূর্ণ ভিন্ন একটি ক্রিয়া এবং নিজের ফাইল ধরে রাখা ডেমনের জন্য কিছুই করে না।
যেখানে পুনরায় খোলা অসম্ভব, সেখানে copytruncate হলো বিকল্প: ফাইলটি কপি করুন, তারপর জায়গাতেই ছেঁটে দিন। এটি ডেসক্রিপ্টর বৈধ রাখে, কিন্তু কপি ও ছাঁটাইয়ের মধ্যে লেখা সবকিছু হারায়, তাই এটি সমাধান নয়, একটি বিনিময়। লোডের চাপে ওই ফাঁকটিই আপনার ধরতে চাওয়া ব্যর্থতাটিকে গিলে ফেলতে পারে।
প্রতি ফাইলে দুটির একটি বেছে নিন এবং পছন্দটি লিখে রাখুন, কারণ একই পথে দুটো মিশিয়ে দিলে এমন ফাঁক তৈরি হয় যা পরে চিহ্নিত করা খুব কঠিন। এক ডিরেক্টরিতে দুটি প্যাটার্নই পেলে পাঠক বুঝতে পারেন না কোনটি প্রামাণিক।
ঘটনার জানালা থেকে ধারণকাল ঠিক করুন
ধারণকাল, কম্প্রেশন ও সর্বোচ্চ আকার আপনার প্রকৃত তদন্তের গভীরতা থেকেই আসা উচিত। কম্প্রেশন ও আকারের সীমাসহ সাত দিনের একটি জানালা অনেক ডিপ্লয়মেন্টের জন্য যুক্তিসঙ্গত সূচনা; কোনো টিউটোরিয়াল থেকে কপি করা সংখ্যা নয়।
নীতিটি এক জায়গায় রাখুন। logrotate যদি ফাইলটি রোটেট করে আর rsyslogও তা রোটেট করে, দ্বিতীয় রোটেশনই জেতে এবং প্রথমটির নামকরণ-পদ্ধতি এলোমেলো জিনিস হিসেবে টিকে থাকে। মালিক ঠিক করুন, অন্য রোটেশনটি বন্ধ করুন, আর সেই সিদ্ধান্তটি নীতির পাশে লিখে রাখুন।
rsyslog-এর ডকুমেন্টেশন তার রাউটিং ও অ্যাকশন মডেল কভার করে, আর OpenVPN পরিষেবার ডকুমেন্টেশন ডেমনটির নিজের লগিং অপশনের জন্য প্রামাণিক থাকে। কোনোটিই আপনার হয়ে আপনার ধারণনীতি ঠিক করে না।
একটি রোটেশন ও একটি নতুন ঘটনা পরীক্ষা করুন
একটি মাত্র রোটেশন জোর করে করুন, তারপর একটি নতুন ঘটনা তৈরি করুন, যেমন একটি ব্যর্থ প্রমাণীকরণ। নিশ্চিত করুন নতুন রেকর্ডটি নতুন ফাইলে দেখা যাচ্ছে এবং পুরোনো ফাইলটি আর বাড়ছে না।
নতুন ফাইলের অনুমতিগুলোও দেখুন, কারণ ভিন্ন মালিকে ফাইলটি পুনরায় তৈরি করা একটি রোটেশন পরের লেখার সময়েই লেখককে ভেঙে দেয় এবং ক্র্যাশের মতো দেখানো একটি ফাঁক তৈরি করে। চলে যাওয়ার আগে মালিক ও মোড পরিষেবা অ্যাকাউন্টের সঙ্গে মিলিয়ে নিন। তারপর যাচাই করুন কম্প্রেসড আর্কাইভটি পড়া যায়, কারণ কেউ খুলতে না পারা আর্কাইভ ধারণকাল নয়। পুরোনো ফাইলের সবচেয়ে নতুন রেকর্ডটি দ্রুত পড়েই কম্প্রেশন ও অনুমতি দুটোই প্রমাণ হয়।
শেষ করুন প্রতিটি ধাপের মালিক লিখে রেখে: কোন উপাদান লেখে, কোনটি রোটেট করে, আর ধারণনীতি কোথায় থাকে। এই রেকর্ডটিই পরের লগিং ঘটনাটিকে কোন স্তর লাইনটি ফেলেছে তা অনুমান করতে গোটা বিকেলের বদলে পাঁচ মিনিটের যাচাইয়ে পরিণত করে।