rsyslogd (8) के माध्यम से अतुल्यकालिक लॉगिंग और बफर वृद्धि लिखें


10

वर्चुअल कंटेनर (VMware) में चल रहे एक बहुत ही उच्च ट्रैफ़िक वेब साइट पर और स्थानीय भंडारण की कमी होने पर, हम सीधे लॉग-फाइल (जो रिमोट नेटवर्क स्टोरेज पर रहते हैं) में लॉगिंग से स्विच करके थ्रूपुट (प्रति सेकंड अनुरोध) को बढ़ाने में कामयाब रहे हैं। rsyslogd

अनिवार्य रूप से हमने सिंक्रोनस से एसिंक्रोनस लॉगिंग पर स्विच किया है। वेब सर्वर कर्मी कुछ मेमोरी बफर और rsyslogd (8 ) के लिए syslog (3) का उपयोग करके लिखते हैं, समानांतर में एक वास्तविक फ़ाइल में डेटा भेजता है, और अपनी गति से, इसलिए लॉग करते समय IO पर प्रक्रियाएं ब्लॉक नहीं होती हैं।

अब तक सब ठीक है। समस्या यह है कि नेत्रहीन rsyslogd को लिखने से रोका जाता है (उदाहरण के लिए क्षणिक / लंबे समय तक नेटवर्क आउटेज) और आने वाला बफर जल्दी भर जाता है।

मेरे प्रश्न हैं:

  • क्या कोई क्लाइंट कभी भी ब्लॉक कर सकता है जब syslog (3) का उपयोग करके rsyslogd पर लिख सकता है ?
  • क्या rsyslogd आँकड़े देखने का एक तरीका है , उदाहरण के लिए बफर कितना बड़ा / पूर्ण है?
  • क्या rsyslogd आने वाले बफर के आकार को बढ़ाने का कोई तरीका है ?

2
क्या आपने कभी इसे हल किया? यदि हां, तो मुझे आपका उत्तर पढ़ने में दिलचस्पी होगी।
djeikyb

1
@ डेजिकब: सॉरी नहीं। मैं रुचि (प्रश्न पर वोट) देखता हूं लेकिन किसी ने भी इसका जवाब नहीं दिया है। ऐसा लगता है कि स्रोत-कोड डाइव की आवश्यकता है।
अरीफ

1
आप यह नहीं कहते कि आप किस वेब सर्वर का उपयोग कर रहे हैं। शायद आप syslog का उपयोग बिल्कुल नहीं करना चाहिए। क्या अपाचे, उदाहरण के लिए, लॉग करने के लिए syslog का उपयोग करता है, या बस लॉग फाइल करने के लिए लिखता है? डेटाबेस में लॉग इन करना एक और संभावना है।
अपराह्न

जवाबों:


1

जहाँ तक मुझे याद है rsyslog में मुख्य संदेश कतार के लिए डिफ़ॉल्ट मोड निश्चित आकार सरणी है। यह 10k तत्वों या तो के लिए एक सीमा है। इसे लिंक की गई सूची कतार में बदलने का प्रयास करें, यह आपके सामयिक संदेश को बहुत बेहतर तरीके से संभालना चाहिए।

हाँ, FixedArrayऔर LinkedListकतारें हैं।


"बदलने की कोशिश करें" ... क्या आप अधिक स्पष्ट हो सकते हैं? देख /etc/rsyslog.confरहा हूँ: मुझे आपके द्वारा उल्लिखित कतारों के प्रकार से संबंधित कुछ भी दिखाई नहीं दे रहा है। क्या इसके लिए कोड परिवर्तन की आवश्यकता है? इन्हें कहाँ और कैसे कॉन्फ़िगर किया जा सकता है? धन्यवाद!
अरीफ

1

आपके पहले प्रश्न का उत्तर है:

हां, syslog () के लिए कोई भी कॉल अवरुद्ध है। हो सकता है कि बहुत कम समय के लिए, लेकिन यह अभी भी एक तुल्यकालिक कॉल है जिसमें एक फाइल डिस्क्रिप्टर शामिल है। man 3 syslogअधिक धारावाहिकों के लिए देखें ।

जब तक आपके सर्वर अतुल्यकालिक आर्किटेक्चर और प्राइमिटिव का उपयोग नहीं करते हैं, तब तक हमेशा कुछ लॉकिंग रहेगा। Thsi को कम किया जा सकता है, लेकिन समाप्त नहीं किया जाता है, उदाहरण के लिए, लॉगिंग के लिए एक पृथक्करण का उपयोग करके। अन्य दो प्रश्नों के लिए मुझे वास्तव में नहीं पता है, लेकिन rsyslogd स्रोत कोड का निरीक्षण (और साथ ही syslog () कार्यों के परिवार के लिए) यह जानने का एकमात्र तरीका है।

सामान्य तौर पर, यदि आप यूडीपी: 514 "नेटवर्क सिसलॉग प्रोटोकॉल" के माध्यम से किसी बाहरी सर्वर में प्रवेश करते हैं, तो आप लगभग शून्य तक ताले बनाने की संभावनाएं लाते हैं। उच्च भार के दौरान कुछ लॉगिंग के संभावित नुकसान की कमी के साथ ।

सबसे पहले , "मूल" सर्वर में आपको यह सुनिश्चित करने की आवश्यकता है कि सभी लॉगिंग syslog के माध्यम से होती है। उदाहरण के लिए, अपाचे 2 में आपको निर्दिष्ट करने की आवश्यकता है:

ErrorLog "syslog:daemon"

अन्य सर्वरों के लिए कृपया उचित मैन पेज देखें। यदि आप यह सुनिश्चित नहीं कर सकते हैं, तो कृपया ध्यान रखें कि फाइलसिस्टम पर लॉगिंग बना सकते हैं

दूसरा , मूल rsyslogd कॉन्फ़िगरेशन में आप अपने द्वारा चुने गए सुविधा के लिए सभी syslog ट्रैफ़िक को निर्देशित करने के लिए कहते हैं (इस उदाहरण में "डेमॉन") एक या अधिक बाहरी syslog सर्वरों के लिए। Rsyslog कॉन्फ़िगरेशन फ़ाइल में आप निर्दिष्ट कर सकते हैं:

daemon.* @192.168.128.1
daemon.* @192.168.254.1

एक ही समय में दो अलग-अलग सर्वरों को भेजे जाने वाले लॉग की दो प्रतियां हैं।

तीसरा , गंतव्य सर्वर (ओं) में आप UDP: 514 पर syslog संदेश के रिसेप्शन को सक्षम करते हैं। यह (गंतव्य) rsyslogd कॉन्फ़िगरेशन फ़ाइल में है और सामान्य रूप से डिफॉल्ट द्वारा अक्षम किया गया है (यह अग्रणी # नंबर को हटाने के लिए पर्याप्त होगा:

$ModLoad imudp
$UDPServerRun 514

चौथा , वैकल्पिक लेकिन अत्यधिक अनुशंसित, मैं उच्च संकल्प टाइमस्टैम्प को भी सक्षम करूंगा:

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

साथ ही यह विकल्प सामान्य रूप से डिफ़ॉल्ट रूप से अक्षम है (पृथ्वी पर क्यों?)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.