अन्य उत्तर बताते हैं, जैसा कि इसके लेखक कहते हैं, लिनक्स में "क्लासिक लॉगिंग"। यही कारण है कि आजकल बहुत सारी प्रणालियों में चीजें कैसे काम करती हैं।
गिरी
कर्नेल तंत्र बदल गए हैं।
कर्नेल एक इन-मेमोरी बफर में आउटपुट उत्पन्न करता है। एप्लिकेशन सॉफ्टवेयर्स इसे दो तरीकों से एक्सेस कर सकते हैं। लॉगिंग सबसिस्टम आमतौर पर इसे नाम के छद्म-फीफो के रूप में एक्सेस करता है /proc/kmsg
। लॉग जानकारी का यह स्रोत लॉग पाठकों के बीच उपयोगी रूप से साझा नहीं किया जा सकता है, क्योंकि यह एक बार पढ़ा जाता है। यदि कई प्रक्रियाएं इसे साझा करती हैं, तो वे प्रत्येक को कर्नेल लॉग डेटा स्ट्रीम का केवल एक हिस्सा प्राप्त करते हैं। यह भी केवल पढ़ने के लिए है।
इसे एक्सेस करने का दूसरा तरीका नया /dev/kmsg
कैरेक्टर डिवाइस है। यह एक पढ़ा-लिखा इंटरफ़ेस है जो कई क्लाइंट प्रक्रियाओं के बीच साझा करने योग्य है। यदि कई प्रक्रियाएं इसे साझा करती हैं, तो वे सभी एक ही पूर्ण डेटा स्ट्रीम को पढ़ते हैं, एक दूसरे से अप्रभावित। यदि वे इसे लिखने की पहुंच के लिए खोलते हैं, तो वे संदेश को कर्नेल की लॉग स्ट्रीम में भी इंजेक्ट कर सकते हैं, जैसे कि वे कर्नेल द्वारा उत्पन्न किए गए थे।
/proc/kmsg
और /dev/kmsg
गैर- RFC-5424 फॉर्म में लॉग डेटा प्रदान करते हैं।
अनुप्रयोग
एप्लिकेशन बदल गए हैं।
जीएनयू सी लाइब्रेरी के syslog()
मुख्य समारोह में एक AF_LOCAL
डाटाग्राम सॉकेट से जुड़ने का प्रयास किया जाता है, जिसे /dev/log
लॉग एंट्रीज लिखा जाता है और इसे लॉग एंट्रीज लिखा जाता है। (बीएसडी सी लाइब्रेरी का syslog()
फ़ंक्शन आजकल /var/run/log
सॉकेट नाम के रूप में उपयोग करता है , और /var/run/logpriv
पहले कोशिश करता है ।) सीधे यह करने के लिए आवेदन का अपना कोड हो सकता है। लाइब्रेरी फ़ंक्शन केवल एप्लिकेशन का कोड, खोलने, कनेक्ट करने, लिखने और सॉकेट को बंद करने) का कोड है।
यदि कोई मशीन पर AF_INET
/ AF_INET6
डेटाग्राम सॉकेट पर सुन रहा है, तो अनुप्रयोग UFC के माध्यम से RFC 5424 संदेश स्थानीय RFC 5426 सर्वर पर भी भेज सकता है।
पिछले दो दशकों में डेमोंटोल्स की दुनिया के दबाव के लिए धन्यवाद, बहुत सारे डॉमन एक मोड में चल रहे हैं, जहां वे GNU syslog()
C लाइब्रेरी फ़ंक्शन या UDP सॉकेट का उपयोग नहीं करते हैं, लेकिन मानक त्रुटि के लिए अपने लॉग डेटा को थूक देते हैं साधारण यूनिक्स फैशन।
सामान्य रूप से नोश और डेमोंटोल्स परिवार के साथ लॉग प्रबंधन
टूलसेट के डेमोंटोल्स परिवार के साथ लॉगिंग में बहुत लचीलापन है। लेकिन पूरे परिवार में सामान्य तौर पर यह विचार है कि प्रत्येक "मुख्य" डूमोन में एक संबद्ध "लॉगिंग" डॉमन होता है। "मुख्य" dæmons गैर-डॉमॉन प्रक्रियाओं की तरह काम करते हैं और मानक त्रुटि (या मानक आउटपुट) के लिए अपने लॉग संदेश लिखते हैं, जिसे सेवा प्रबंधन सबसिस्टम एक पाइप के माध्यम से कनेक्ट करने की व्यवस्था करता है (जो इसे खुला रखता है ताकि लॉग डेटा खत्म न हो जाए "लॉगिंग" d servicemon के मानक इनपुट के लिए एक सेवा पुनरारंभ)।
"लॉगिंग" के सभी डॉमन एक प्रोग्राम चलाते हैं जो कहीं न कहीं लॉग होता है । आम तौर पर यह प्रोग्राम कुछ ऐसा होता है multilog
या cyclog
जो इसके मानक इनपुट से पढ़ता है और (नैनोसेकंड टाइमस्टैम्प्ड) लॉग फ़ाइलों को कड़ाई से आकार में छाया हुआ, स्वचालित रूप से घुमाए गए, विशेष-लेखन, निर्देशिका में लिखता है। आम तौर पर, ये भी, ये सभी व्यक्तिगत समर्पित अनपेक्षित उपयोगकर्ता खातों के तत्वावधान में चलते हैं।
इसलिए प्रत्येक सेवा के लॉग डेटा को अलग से संसाधित करने के साथ, एक बड़े पैमाने पर वितरित लॉगिंग सिस्टम के साथ समाप्त होता है।
एक या एक डेमोंटोल्स-परिवार सेवा प्रबंधन के तहत कुछ या जैसे चला सकते हैं । लेकिन डेमोंटोल्स की दुनिया ने कई साल पहले महसूस किया था कि "लॉगिंग" डमन्स के साथ सेवा प्रबंधन संरचना चीजों को सरल तरीके से करने के लिए बहुत करीने से उधार देती है। एक विशाल मिश-मैश में लॉग स्ट्रीम के सभी पंखे लगाने की आवश्यकता नहीं है, लॉग डेटा को पार्स करें, और फिर लॉग फाइल को अलग करने के लिए स्ट्रीम को वापस पंखा करें; और फिर (कुछ मामलों में) पक्ष पर एक अविश्वसनीय बाहरी लॉग रोटेशन तंत्र बोल्ट। अपने मानक लॉग प्रबंधन के हिस्से के रूप में डेमोनटूलस-पारिवारिक संरचना पहले से ही लॉग रोटेशन, लॉगफ़ाइल लेखन और स्ट्रीम पृथक्करण करती है।klogd
syslogd
rsyslogd
इसके अलावा: सभी सेवाओं के लिए उपकरण के साथ विशेषाधिकारों को छोड़ने का चेन-लोडिंग मॉडल का मतलब है कि लॉगिंग कार्यक्रमों को सुपरयूसर विशेषाधिकारों की कोई आवश्यकता नहीं है; और UCSPI मॉडल का मतलब है कि उन्हें केवल स्ट्रीम बनाम डेटाग्राम ट्रांसपोर्ट जैसे मतभेदों के बारे में ध्यान रखने की आवश्यकता है।
नोश टूलसेट इसका उदाहरण देता है। जबकि कोई भी इसके rsyslogd
अंतर्गत चला सकता है, बॉक्स से बाहर, और सिर्फ कर्नेल का प्रबंधन कर सकता है /run/log
, और पुराने तरीके से UDP लॉग इनपुट; यह इन चीजों को लॉग करने के और अधिक "डेमोनटूल देशी" तरीके भी प्रदान करता है:
- एक
klogd
सेवा जो इससे पढ़ती है /proc/kmsg
और बस उस मानक त्रुटि के लिए लॉग स्ट्रीम लिखती है। यह नाम के एक साधारण प्रोग्राम द्वारा किया जाता है klog-read
। संबंधित लॉगिंग d feedmon एक /var/log/sv/klogd
लॉग डायरेक्टरी में अपने मानक इनपुट पर लॉग स्ट्रीम को फीड करता है ।
- ऐसी
local-syslog-read
सेवा जो /dev/log
( /run/log
BSD पर) से डेटाग्राम पढ़ती है और बस उस लॉग स्ट्रीम को उसकी मानक त्रुटि पर लिखती है। यह नाम के एक कार्यक्रम द्वारा किया जाता है syslog-read
। संबंधित लॉगिंग d associatedmon एक /var/log/sv/local-syslog-read
लॉग डायरेक्टरी में अपने मानक इनपुट पर लॉग स्ट्रीम को फीड करता है ।
- एक
udp-syslog-read
सेवा जो UDP syslog पोर्ट पर सुनती है, पढ़ती है कि उसे क्या भेजा गया है और बस उस लॉग स्ट्रीम को उसकी मानक त्रुटि पर लिखती है। फिर से, कार्यक्रम है syslog-read
। संबंधित लॉगिंग d associatedmon एक /var/log/sv/udp-syslog-read
लॉग डायरेक्टरी में अपने मानक इनपुट पर लॉग स्ट्रीम को फीड करता है ।
- (BSDs पर) एक ऐसी
local-priv-syslog-read
सेवा जिसमें से datagrams पढ़ता है /run/logpriv
और बस उस मानक त्रुटि के लिए लॉग स्ट्रीम लिखता है। फिर से, कार्यक्रम है syslog-read
। संबंधित लॉगिंग d associatedmon एक /var/log/sv/local-priv-syslog-read
लॉग डायरेक्टरी में अपने मानक इनपुट पर लॉग स्ट्रीम को फीड करता है ।
टूलसेट भी एक export-to-rsyslog
उपकरण के साथ आता है जो एक या कई लॉग निर्देशिकाओं (गैर-घुसपैठ लॉग कर्सर की एक प्रणाली का उपयोग करके) की निगरानी कर सकता है और आरएफसी 5424 फॉर्म में नेटवर्क पर एक निर्दिष्ट आरएफसी 5426 सर्वर पर नई प्रविष्टियां भेज सकता है।
systemd के साथ लॉग प्रबंधन
systemd एक अखंड लॉग प्रबंधन कार्यक्रम है, systemd-journald
। यह सिस्टमड द्वारा प्रबंधित सेवा के रूप में चलता है।
- यह
/dev/kmsg
कर्नेल लॉग डेटा के लिए पढ़ता है ।
- यह GNU C लाइब्रेरी के फ़ंक्शन से एप्लिकेशन लॉग डेटा के लिए
/dev/log
(एक प्रतीकात्मक लिंक /run/systemd/journal/dev-log
) पढ़ता है syslog()
।
- यह सिस्टम-प्रबंधित सेवाओं से आने वाले लॉग डेटा के लिए
AF_LOCAL
स्ट्रीम सॉकेट पर सुनता है /run/systemd/journal/stdout
।
- यह
AF_LOCAL
डेटाग्राम सॉकेट पर /run/systemd/journal/socket
लॉग ऑन प्रोग्राम्स से आने वाले डेटा के लिए सुनता है जो सिस्टमड-विशिष्ट जर्नल प्रोटोकॉल (यानी sd_journal_sendv()
एट अल।) बोलते हैं ।
- यह इन सभी को एक साथ मिलाता है।
- यह सिस्टम-वाइड और प्रति-उपयोगकर्ता जर्नल फ़ाइलों के एक सेट में
/run/log/journal/
या में लिखता है /var/log/journal/
।
- अगर यह कनेक्ट कर सकता है (एक ग्राहक के रूप में) यह एक
AF_LOCAL
डेटाग्राम सॉकेट के लिए, /run/systemd/journal/syslog
वहाँ जर्नल डेटा लिखता है, अगर syslog को अग्रेषित करना कॉन्फ़िगर किया गया है।
- यदि कॉन्फ़िगर किया गया है, तो यह राइटिंग
/dev/kmsg
तंत्र का उपयोग करके कर्नेल बफर को जर्नल डेटा लिखता है।
- यदि कॉन्फ़िगर किया गया है, तो यह जर्नल डेटा को टर्मिनलों और कंसोल डिवाइस को भी लिखता है।
यदि यह प्रोग्राम क्रैश हो जाता है, या सेवा बंद हो जाती है, तो खराब चीजें सिस्टम-वाइड हो जाती हैं।
systemd स्वयं मानक आउटपुट और /run/systemd/journal/stdout
सॉकेट से जुड़ी (कुछ) सेवाओं की त्रुटियों के लिए व्यवस्था करता है । इसलिए सामान्य फैशन में मानक त्रुटि के लिए लॉग इन करने वाले डॉमन्स का अपना आउटपुट जर्नल को भेज दिया जाता है।
यह पूरी तरह से klogd, syslogd, syslog-ng और rsyslogd को दबा देता है।
इन्हें अब सिस्टम-विशिष्ट होना आवश्यक है। एक systemd सिस्टम पर उन्हें सर्वर का अंत नहीं मिलता है /dev/log
। इसके बजाय, वे दो तरीकों में से एक लेते हैं:
- उन्हें सर्वर का अंत मिलता है
/run/systemd/journal/syslog
, जो (यदि आपको याद है) systemd-journald
जर्नल डेटा को कनेक्ट करने और लिखने का प्रयास करता है। कुछ साल पहले, किसी ने imuxsock
ऐसा करने के लिए rsyslogd के इनपुट विधि को कॉन्फ़िगर किया होगा ।
- वे सीधे सिस्टमड जर्नल से पढ़ते हैं, एक सिस्टम-विशिष्ट लाइब्रेरी का उपयोग करते हैं जो बाइनरी जर्नल प्रारूप को समझता है और जो नई प्रविष्टियों को जोड़े जाने के लिए जर्नल फ़ाइलों और निर्देशिका की निगरानी कर सकता है। आजकल, कोई
imjournal
ऐसा करने के लिए rsyslogd के इनपुट विधि को कॉन्फ़िगर करता है।