लॉग लॉग के बाद दूरस्थ सर्वर पर डेटा भेजना बंद हो जाता है


9

मेरे कॉन्फ़िगरेशन में, मेरे पास rsyslog है जो /home/user/my_app/shared/log/unicorn.stderr.logउपयोग के परिवर्तनों के बाद प्रभारी है imfile। सामग्री को टीसीपी का उपयोग करके दूसरे दूरस्थ लॉगिंग सर्वर पर भेजा जाता है।

जब लॉग फ़ाइल घूमती है, तो rsyslog रिमोट सर्वर पर डेटा भेजना बंद कर देता है।

मैंने rsyslog को फिर से लोड करने, HUP सिग्नल भेजने और इसे पूरी तरह से पुनः आरंभ करने की कोशिश की, लेकिन कुछ भी काम नहीं किया।

केवल तरीके मैं पा सकता था कि वास्तव में काम गंदा था:

  • सेवा को रोकें, rsyslog स्टेट फाइल को हटाएं और rsyslog को फिर से शुरू करें। मेरी logrotate फ़ाइल में वह सब कुछ जो एक हुक हुक में है।
  • kill -9 rsyslog और इसे शुरू करें।

क्या rsyslog internals को छुए बिना ऐसा करना मेरे लिए एक उचित तरीका है?

Rslog फ़ाइल

$ मोडलड इममार्क
$ मोडलड इमडप
$ मोदलाद imtcp
$ मोदलाद इमक्ससॉक
$ मोडलॉड इमकलॉग
$ मोडलड इम्फाइल

$ टेम्पलेट विदाउटफ़ॉर्मैट, "[पर्यावरण] [% syslogtag%] -% msg%"

$ WorkDirectory / var / स्पूल / rsyslog

$ InputFileName /home/user/my_app/sared/log/unicorn.stderr.log
$ InputFileTag गेंडा-स्टैडर
$ InputFileStateFile स्टेट-यूनिकॉर्न-स्टैडर
$ InputFileSeverity जानकारी
$ InputFileFacility स्थानीय 8
$ InputFilePollInterval 1
$ InputFilePersistStateInterval 1
$ InputRunFileMonitor

# रिमोट सर्वर के लिए आगे
अगर $ syslogtag में 'apache-' है, तो @@ my_server: 5000; WithoutTimeFormat
: syslogtag, में, "अपाचे-" ~ शामिल हैं

*। * @@ my_server: 5000; SyslFormat

लॉगट्रेट फ़ाइल

/ home/user/my_app/sared/log/*.log {
  रोज
  missingok
  dateext
  घूमना ३०
  संकुचित करें
  notifempty
  विस्तार gz
  copytruncate
  640 उपयोगकर्ता उपयोगकर्ता बनाएँ
  sharedscripts
  पोस्ट घुमाने
    (stop rsyslog && rm / var / spool / rsyslog / stat- * && start rsyslog 2> & 1) || सच
  endscript
}

FYI करें, फ़ाइल rsyslog उपयोगकर्ता के लिए पठनीय है, मेरा सर्वर पहुंच योग्य है और अन्य लॉग फाइलें जो एक ही चक्र पर नहीं घूमती हैं उन्हें ठीक से ट्रैक किया जाना जारी है।

मैं Ubuntu 12.04 चला रहा हूं।

जवाबों:


8

समस्या वास्तव में लॉगरोट से आ रही थी।

मूल रूप से मेरे विन्यास के साथ, गेंडा चलाना, मुझे copytruncateनिर्देशन का उपयोग करने की आवश्यकता नहीं है । (जो यहाँ समस्याओं का कारण बनता है)

USR1 - कार्यकर्ता प्रक्रिया के स्वामित्व वाले सभी लॉग को फिर से खोलें। यूनिकॉर्न देखें :: एक लॉग माना जाता है के लिए Util.reopen_logs। लॉग फ़ाइलों को तब तक फिर से खोला नहीं जाता है जब तक कि यह वर्तमान अनुरोध को संसाधित नहीं करता है, इसलिए एक अनुरोध के लिए एक से अधिक लॉग लाइनें (जैसा कि रेल द्वारा किया जाता है) कई लॉग में विभाजित नहीं होगी।

इस कॉन्फ़िगरेशन को अपडेट करने के बाद यह ठीक से काम करना शुरू कर देता है:

/home/user/my_app/shared/log/*.log {
  daily
  missingok
  dateext
  rotate 30
  compress
  notifempty
  extension gz
  create 640 user user
  sharedscripts

  post-rotate
    # Telling Unicorn to reload files
    test -s /home/user/my_app/shared/pids/unicorn.pid && kill -USR1 "$(cat /home/user/my_app/shared/pids/unicorn.pid)"

    # Reloading rsyslog telling it that files have been rotated
    reload rsyslog 2>&1 || true
  endscript
}

यदि ये आपकी फ़ाइल की प्रत्यक्ष प्रतियां हैं, तो मुझे लगता है कि आपकी समस्या वास्तव में थी जो आप post-rotate(जो कोई बात नहीं है) का उपयोग कर रहे थे postrotate, क्योंकि उस मूल लॉगरेट स्क्रिप्ट को आपको rsyslog के साथ ठीक काम करना चाहिए था (यदि पोस्ट स्क्रिप्ट स्क्रिप्ट चल रही थी ) ...?
mltsy 16

2
मुझे याद नहीं है कि कब, लेकिन मैंने बदलाव post-rotateकिया lastaction। आपकी टिप्पणी अभी भी बहुत समझदार है और इसने मेरी समस्या को हल किया हो सकता है :)। हालांकि रिकॉर्ड के लिए, मैं copytruncateभविष्य में वैसे भी उपयोग करने से बचूंगा क्योंकि यह धीमा है और फ़ाइल हैंडल के साथ खेलता है।
विंसेंट बी।

2

आपकी लॉगोट फ़ाइल में एक प्रविष्टि है /home/user/shared/log/*.log, जो आपके लॉगफ़ाइल से मेल नहीं खाती है /home/user/my_app/shared/log/unicorn.stderr.log। आपको उस निर्देशिका के लिए एक लॉग एंट्री प्रविष्टि जोड़ने की आवश्यकता है और यह सुनिश्चित करें कि इसमें शामिल है copytruncate- जैसा कि है, rsyslog वर्तमान फ़ाइल का नाम बदलकर एक नया बना रहा है, और imfile अब नामांकित फ़ाइल के फ़ाइलहैंडल का अनुसरण करता है।


क्षमा करें फ़ाइल नाम सिर्फ एक टाइपो है। हालाँकि कॉपीरुनेट एक अच्छा बिंदु हो सकता है। मुझे बस उस एक पर नज़र रखने दो :)।
विंसेंट बी।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.