অন্য উত্তরটি ব্যাখ্যা করে, যেমন এর লেখক বলেছেন, লিনাক্সে "ক্লাসিক লগিং"। আজকাল প্রচুর সিস্টেমে জিনিসগুলি এমনভাবে কাজ করে না।
কর্নেল
কার্নেল প্রক্রিয়া পরিবর্তিত হয়েছে।
কার্নেল একটি ইন-মেমরি বাফারে আউটপুট উত্পন্ন করে। অ্যাপ্লিকেশন সফ্টওয়্যার দুটি উপায়ে এটি অ্যাক্সেস করতে পারে। লগিং সাবসিস্টেম সাধারণত সিউডো-ফিফোর নাম হিসাবে এটি অ্যাক্সেস করে /proc/kmsg। লগ তথ্যের এই উত্সটি কার্যকরভাবে লগ পাঠকদের মধ্যে ভাগ করা যায় না, কারণ এটি একবারে পঠিত। যদি একাধিক প্রক্রিয়া এটি ভাগ করে নেয় তবে সেগুলি প্রতিটি কার্নেল লগ ডেটা স্ট্রিমের কেবল একটি অংশ পায়। এটি কেবল পঠনযোগ্য।
এটি অ্যাক্সেসের অন্য উপায়টি হ'ল নতুন /dev/kmsgঅক্ষরের ডিভাইস। এটি একটি পঠন-লিখন ইন্টারফেস যা একাধিক ক্লায়েন্ট প্রক্রিয়াগুলির মধ্যে ভাগ করে নেওয়া যায়। যদি একাধিক প্রক্রিয়া এটিকে ভাগ করে দেয় তবে তারা সকলেই একে অপরের দ্বারা প্রভাবিত না হয়ে একই সম্পূর্ণ ডেটা স্ট্রিমটি পড়ে। যদি তারা এটি লেখার অ্যাক্সেসের জন্য খোলেন, তারা কার্নেলের লগ স্ট্রিমে বার্তাগুলিও ইনজেক্ট করতে পারে, যেমন সেগুলি কার্নেল দ্বারা উত্পাদিত হয়েছিল।
/proc/kmsgএবং /dev/kmsgএকটি অ আরএফসি-5424 ফর্মে লগ ডেটা সরবরাহ করুন।
অ্যাপ্লিকেশন
অ্যাপ্লিকেশন পরিবর্তন হয়েছে।
জিএনইউ সি লাইব্রেরির syslog()ফাংশন AF_LOCALনামের একটি ডেটাগ্রাম সকেটের সাথে সংযোগ স্থাপন /dev/logএবং এতে লগ এন্ট্রি লেখার মূল প্রয়াসে attempts (বিএসডি সি লাইব্রেরির syslog()ক্রিয়াকলাপটি আজকাল /var/run/logসকেটের নাম হিসাবে ব্যবহার করে এবং /var/run/logprivপ্রথমে চেষ্টা করে )) অ্যাপ্লিকেশনগুলির অবশ্যই এটি সরাসরি করার জন্য তাদের নিজস্ব কোড থাকতে পারে। লাইব্রেরির ফাংশনটি কেবল কোড (খোলার জন্য, সংযোগ করতে, লিখতে এবং একটি সকেট বন্ধ করার জন্য) অ্যাপ্লিকেশনটির নিজস্ব প্রক্রিয়া প্রসঙ্গে নির্ধারিত হয়।
মেশিনে কোনও AF_INET/ AF_INET6ডাটাগ্রাম সকেটে যদি কেউ শুনছেন তবে অ্যাপ্লিকেশনগুলি কোনও স্থানীয় আরএফসি 5426 সার্ভারে ইউডিপির মাধ্যমে আরএফসি 5424 বার্তা পাঠাতে পারে ।
গত দুই দশক ধরে ডেমোনটোলস বিশ্বের চাপের জন্য ধন্যবাদ, প্রচুর ডেমন এমন একটি মোডে চলমান সমর্থন করে যেখানে তারা জিএনইউ syslog()সি লাইব্রেরি ফাংশন বা ইউডিপি সকেট ব্যবহার করে না , তবে কেবলমাত্র তাদের লগের ডেটাগুলিকে স্ট্যান্ডার্ড ত্রুটির বাইরে থুতু দেয় the সাধারণ ইউনিক্স ফ্যাশন।
নশ এবং সাধারণভাবে ডিমনটোলস পরিবারের সাথে লগ পরিচালনা করুন
টুলসেটের ডেমন্টোলস পরিবারের সাথে লগ ইন করার ক্ষেত্রে অনেক নমনীয়তা রয়েছে। তবে সাধারণভাবে পুরো পরিবার জুড়েই ধারণাটি হ'ল প্রতিটি "প্রধান" ড্যামনের একটি "লগিং" ডমন থাকে। "মুখ্য" ডেমোনগুলি নন-ড্যামন প্রক্রিয়াগুলির মতোই কাজ করে এবং তাদের লগ বার্তাগুলিকে স্ট্যান্ডার্ড ত্রুটি (বা স্ট্যান্ডার্ড আউটপুট) এ লেখেন, যা সার্ভিস ম্যানেজমেন্ট সাবসিস্টেম একটি পাইপের মাধ্যমে সংযোগ স্থাপনের ব্যবস্থা করে (যা এটি উন্মুক্ত রাখে যাতে লগ ডেটা হারিয়ে না যায়) "লগিং" ড্যামনের স্ট্যান্ডার্ড ইনপুটটিতে একটি পরিষেবা পুনঃসূচনা করুন)।
সমস্ত "লগিং" ডমন একটি প্রোগ্রাম চালায় যা কোথাও লগ ইন করে । সাধারণত এই প্রোগ্রাম মত কিছু multilogবা cyclogযে তার মান ইনপুট থেকে পড়ে এবং লিখেছেন (ন্যানোসেকেন্ড timestamped) লগ ইন করুন একটি কঠোরভাবে আকার-টুপিওয়ালা, স্বয়ংক্রিয়ভাবে আবর্তিত, একচেটিয়া-রাইট, ডিরেক্টরির মধ্যে ফাইল। সাধারণত, এই ডায়মোনগুলি সমস্ত স্বতন্ত্র নিবেদিত অনিবদ্ধ ব্যবহারকারী অ্যাকাউন্টগুলির অধীনে চলে।
সুতরাং এক একটি সম্পূর্ণরূপে বিতরণ লগিং সিস্টেমের সাথে শেষ হয়, প্রতিটি পরিষেবার লগ ডেটা পৃথকভাবে প্রক্রিয়া করা হয়।
এক করতে ভালো কিছু চালানো klogdবা syslogdবা rsyslogdএকটি daemontools পরিবার পরিষেবা পরিচালন করেন। কিন্তু ডেমনটোলস বিশ্ব বহু বছর আগে বুঝতে পেরেছিল যে "লগিং" ডেমনের সাহায্যে পরিষেবা পরিচালনার কাঠামো একটি সহজ ফ্যাশনে কাজগুলি করতে বেশ ঝরঝরে .ণ দেয়। সমস্ত লগ স্ট্রিমগুলিকে এক বিশাল মেশ-ম্যাসে ফ্যান করার দরকার নেই, লগের ডেটা পার্স করুন, এবং তারপরে স্ট্রিমগুলি ফ্যান করে আলাদা লগ ফাইলগুলি পৃথক করে; এবং তারপরে (কিছু ক্ষেত্রে) পাশের একটি অবিশ্বাস্য বাহ্যিক লগ রোটেশন প্রক্রিয়াটি বল্ট করুন। এর স্ট্যান্ডার্ড লগ পরিচালনার অংশ হিসাবে ডিমনটোলস-ফ্যামিলি কাঠামো ইতিমধ্যে লগ রোটেশন, লগফিল রচনা এবং স্ট্রিম বিভাজন করে।
তদ্ব্যতীত: সমস্ত পরিষেবা জুড়ে সাধারণ সরঞ্জামগুলির সাথে সুবিধাগুলি বাদ দেওয়ার চেইন-লোডিং মডেলটির অর্থ হ'ল লগিং প্রোগ্রামগুলিতে অতিরিক্ত ব্যবহারকারীর সুবিধার কোনও দরকার নেই; এবং ইউসিএসপিআই মডেলের অর্থ হল যে তাদের কেবল স্ট্রিম বনাম ডেটাগ্রাম ট্রান্সপোর্টের মত পার্থক্য সম্পর্কে যত্ন নেওয়া দরকার।
নশ টুলসেট এর উদাহরণ দেয়। যতক্ষণ এক করতে চালানোর rsyslogdনীচে বাক্সের বাইরে, এবং মাত্র কার্নেল পরিচালনা, /run/logএবং এর ফলে UDP লগ ইন করুন পুরাতন ভাবে ইনপুট; এটা এছাড়াও উপলব্ধ আরো "daemontools নেটিভ 'এসব কথা লগ-ইন করার উপায়:
- এমন একটি
klogdপরিষেবা যা পড়তে পারে /proc/kmsgএবং সহজভাবে লিখতে পারে যে লগ স্ট্রিমটিকে তার প্রমিত ত্রুটিতে দেখায়। এটি নামের একটি সাধারণ প্রোগ্রাম দ্বারা সম্পন্ন হয় klog-read। সম্পর্কিত লগিং ড্যামন একটি /var/log/sv/klogdলগ ডিরেক্টরিতে তার স্ট্যান্ডার্ড ইনপুটটিতে লগ স্ট্রিমটি ফিড করে ।
- এমন একটি
local-syslog-readপরিষেবা যা /dev/log( /run/logবিএসডিগুলিতে) থেকে ডেটাগ্রাম পড়ে এবং কেবল সেই লগ স্ট্রিমটিকে তার প্রমিত ত্রুটিতে লেখায়। এটি একটি প্রোগ্রাম দ্বারা সম্পন্ন হয় syslog-read। সম্পর্কিত লগিং ড্যামন একটি /var/log/sv/local-syslog-readলগ ডিরেক্টরিতে তার স্ট্যান্ডার্ড ইনপুটটিতে লগ স্ট্রিমটি ফিড করে ।
- একটি
udp-syslog-readপরিষেবা যা ইউডিপি সিসলোগ বন্দরে শোনায়, এতে কী পাঠানো হয় তা পড়ে এবং কেবল সেই লগ স্ট্রিমটিকে তার প্রমিত ত্রুটিতে লেখায়। আবার, প্রোগ্রামটি হয় syslog-read। সম্পর্কিত লগিং ড্যামন একটি /var/log/sv/udp-syslog-readলগ ডিরেক্টরিতে তার স্ট্যান্ডার্ড ইনপুটটিতে লগ স্ট্রিমটি ফিড করে ।
- (বিএসডিগুলিতে) একটি
local-priv-syslog-readপরিষেবা যা থেকে ডেটাগ্রামগুলি পড়ে /run/logprivএবং কেবল সেই লগ স্ট্রিমটিকে তার প্রমিত ত্রুটিতে লেখায়। আবার, প্রোগ্রামটি হয় syslog-read। সম্পর্কিত লগিং ড্যামন একটি /var/log/sv/local-priv-syslog-readলগ ডিরেক্টরিতে তার স্ট্যান্ডার্ড ইনপুটটিতে লগ স্ট্রিমটি ফিড করে ।
এই টুলসেটটি এমন একটি সরঞ্জামও নিয়ে আসে যা export-to-rsyslogএক বা একাধিক লগ ডিরেক্টরি (নন-ইন্টারফেসিভ লগ কার্সার সিস্টেম ব্যবহার করে ) নিরীক্ষণ করতে পারে এবং নেটওয়ার্কের মাধ্যমে আরএফসি 5424 ফর্মের নতুন এন্ট্রিগুলি একটি নির্ধারিত আরএফসি 5426 সার্ভারে প্রেরণ করতে পারে।
systemd সহ লগ পরিচালনা
systemd এর একটি একক একক লগ পরিচালনা প্রোগ্রাম রয়েছে systemd-journald,। এটি সিস্টেমড দ্বারা পরিচালিত একটি পরিষেবা হিসাবে চলে।
- এটি
/dev/kmsgকার্নেল লগ ডেটার জন্য পড়তে পারে ।
- এটি জিএনইউ সি লাইব্রেরির ফাংশন থেকে অ্যাপ্লিকেশন লগ ডেটার জন্য
/dev/log(একটি প্রতীকী লিঙ্ক /run/systemd/journal/dev-log) পড়ে readssyslog()
- এটি
AF_LOCALসিস্টেম /run/systemd/journal/stdout-পরিচালিত পরিষেবাদি থেকে আসা লগ ডেটার জন্য স্ট্রিম সকেটে শোনা ।
- এটি সিস্টেমড-নির্দিষ্ট জার্নাল প্রোটোকল (যেমন ইত্যাদি।) বলে এমন প্রোগ্রাম থেকে আগত লগ ডেটার জন্য
AF_LOCALডেটাগ্রাম সকেটে শোনা যায় ।/run/systemd/journal/socketsd_journal_sendv()
- এই সব একসাথে মিশ্রিত।
- এটি সিস্টেম-ব্যাপী এবং প্রতি-ব্যবহারকারী জার্নাল ফাইলগুলির সেটগুলিতে
/run/log/journal/বা এর মধ্যে লিখেছে /var/log/journal/।
- এটি যদি কোনও
AF_LOCALডেটাগ্রামের সকেটের সাথে (ক্লায়েন্ট হিসাবে) সংযুক্ত করতে পারে /run/systemd/journal/syslogতবে সেখানে জার্নাল ডেটা লেখেন, যদি সিসলগে ফরোয়ার্ড কনফিগার করা থাকে।
- যদি কনফিগার করা থাকে তবে এটি লিখনযোগ্য
/dev/kmsgপ্রক্রিয়াটি ব্যবহার করে কার্নেল বাফারে জার্নাল ডেটা লিখে ।
- যদি কনফিগার করা থাকে তবে এটি টার্মিনাল এবং কনসোল ডিভাইসে জার্নাল ডেটা লিখে writes
এই প্রোগ্রামটি ক্র্যাশ হয়ে গেলে বা পরিষেবাটি বন্ধ হয়ে গেলে সিস্টেমে খারাপ জিনিসগুলি ঘটে।
সিস্টেমেড নিজেই /run/systemd/journal/stdoutসকেটের সাথে সংযুক্ত হওয়ার জন্য (কিছু) পরিষেবাগুলির স্ট্যান্ডার্ড আউটপুট এবং ত্রুটির ব্যবস্থা করে । সুতরাং সাধারণ ফ্যাশনে স্ট্যান্ডার্ড ত্রুটিতে লগইন করা ডেমনগুলি তাদের আউটপুট জার্নালে প্রেরণ করে।
এটি সম্পূর্ণরূপে ক্লগড, সিসলগড, সিসলগ-এনজি, এবং আরএসিস্লাগডকে সরবরাহ করে।
এগুলি এখন সিস্টেম-নির্দিষ্ট হওয়া দরকার। একটি সিস্টেমযুক্ত সিস্টেমে তারা সার্ভারের শেষ হতে পারে না /dev/log। পরিবর্তে, তারা দুটি পদ্ধতির একটি গ্রহণ করে:
- তারা সার্ভারের শেষে হতে পারে
/run/systemd/journal/syslog, যা (যদি আপনি মনে করেন) এর systemd-journaldসাথে জার্নাল ডেটা সংযোগ স্থাপন এবং লেখার চেষ্টা করে। কয়েক বছর আগে, কেউ এটি করতে rsyslogd এর imuxsockইনপুট পদ্ধতিটি কনফিগার করেছিল ।
- বাইনারি জার্নাল ফর্ম্যাটটি বোঝে এবং নতুন এন্ট্রি যুক্ত হওয়ার জন্য জার্নাল ফাইল এবং ডিরেক্টরি নিরীক্ষণ করতে পারে এমন একটি সিস্টেমড-নির্দিষ্ট লাইব্রেরি ব্যবহার করে তারা সরাসরি সিস্টেমড জার্নাল থেকে পড়েন। আজকাল, কেউ এটি করতে rsyslogd এর
imjournalইনপুট পদ্ধতিটি কনফিগার করে ।