Mongodb - लॉग को घुमाने का उचित तरीका


13

मोंगो डॉक्स कहते हैं कि मैं कर सकता हूं:

  1. उपयोग -SIGUSR1 सिग्नल और पुराने लॉग का नाम बदला और चालू स्विच प्राप्त करें
  2. OS से logrotate का उपयोग करें

मैं पुरानी फ़ाइलों को ज़िप करने और सबसे पुरानी हटाने के लिए ओएस की लॉगोट्रेट क्षमता चाहता हूं, लेकिन SIGUSR1 भेजने के अलावा वर्तमान लॉग को स्विच करने के लिए मोंगॉड प्रक्रिया को बताने का कोई तरीका नहीं देखता।

तो मैंने लिखा

/var/log/mongodb/*.log {
    daily
    rotate 5
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    postrotate
        /usr/bin/killall -SIGUSR1 mongod
        /usr/bin/killall -SIGUSR1 mongos
    endscript
}

/etc/logrotate.d/mongo पर जाएं

और अब mongodb.log.2013-09-18T23-49-44SIGUSR1 स्विचिंग के निशान की तरह लॉगरोट और खाली लॉगफाइल्स से अच्छी तरह से नामित लॉगफाइल्स प्राप्त करें। उत्तरार्द्ध से छुटकारा पाने के लिए कैसे?

जवाबों:


11

मैथुन के लिए कोपायट्रुनेट बहुत अच्छी तरह से काम करता है।

इसके समान एक विन्यास आपके लिए काम करना चाहिए:

/var/log/mongodb/*.log {
  daily
  missingok
  rotate 5
  compress
  dateext
  delaycompress
  copytruncate
  notifempty
}

1
इसने मेरे लिए रेडहैट 6.5 पर काम नहीं किया। लॉग घुमाए गए थे, लेकिन मूल .log फ़ाइल बिना बाउंड के बढ़ती रही।
थॉमस ब्राट

@ThomasBratt यह सही है क्योंकि मैंगो प्रक्रियाओं को पुनरारंभ किए बिना फ़ाइल हैंडलर खुला रहता है। इस विधि से सभी अच्छी तरह से काम नहीं करेंगे।
Mxx

@ThomasBratt इस जवाब पर एक नज़र डालें stackoverflow.com/a/8396266/949859
Mxx

1
@ XXX अच्छा लगता है - ऐसा लगता है जैसे कॉप्टीट्रूनेट, मैंगो को लॉगफाइल को रौंदने के लिए एक पोस् टेट स्टेप के साथ काम करेगा
थॉमस ब्राट

16

Mongodb 3.0 के बाद से आप logRotate पैरामीटर के साथ mongodb के व्यवहार को बदल सकते हैं, /etc/mongod.conf में परिवर्तन कर सकते हैं

systemLog:
  logAppend: true
  logRotate: reopen

मानगो मैनुअल भी देखें ।

तब आप इस लॉगरोट कॉन्फ़िगरेशन का उपयोग कर सकते हैं:

/var/log/mongodb/*.log {
    daily
    rotate 30
    size 50M
    compress
    dateext
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -SIGUSR1 `cat /var/lib/mongodb/mongod.lock 2> /dev/null` 2> /dev/null || true
    endscript
}

Config फ़ाइल से बनाई गई PID फ़ाइल का उपयोग संभवतः किया जाना चाहिए .... processManagement.pidFilePathकॉन्फ़िगरेशन या SystemD इकाई फ़ाइल की PIDFile सेटिंग ( /var/run/mongodb/mongod.pidमेरे लिए) में देखें
Gert van den Berg

15

यदि आप लॉगऑफाइल को लॉगरोटेट के साथ ले जाने के बाद सर्वर को mongod में भेजते हैं तो सर्वर मेरे लिए क्रैश हो जाता है।

निम्न कॉन्फ़िगरेशन मेरे द्वारा परीक्षण किए गए संस्करण के लिए सुरक्षित है - ubuntu 12.04 पर 2.6.6 - पिछले उदाहरणों ने सर्वर को क्रैश कर दिया। इसे /etc/logrotate.d/mongod में डालें:

/var/log/mongodb/mongodb.log {
    weekly
    missingok
    rotate 4
    compress
    notifempty
    create
    postrotate
        /usr/bin/pkill -USR1 mongod
        rm /var/log/mongodb/mongodb.log.????-??-??T??-??-??
    endscript
}

देखें: अधिक विवरण के लिए https://jira.mongodb.org/browse/SERVER-11087 और अक्षय कुमार का एक सुझाव जो मैंने ऊपर प्रयोग किया (nocreate और cp / dev / null के बजाय logfile का उपयोग करें)।

बाद के रिलीज में माना जाता है कि लॉगरोट विकल्प आप फ़ाइल को फिर से खोलने के लिए उपयोग कर सकते हैं - इसका नाम नहीं - जो कि नाम बदलने की समस्या के आसपास काम करेगा - लेकिन यह मेरे संस्करण में काम नहीं करता था (यह असमर्थित था)।

देखें: https://github.com/mongodb/mongo/commit/616461d294bd9f5054ca38b302b6fc5d70fde20c

मैंने इसके साथ परीक्षण किया है

logrotate -v -f /etc/logrotate.d/mongod

मेरे लिए महान काम करता है Mongo 2.6.11 में CentOS 7
टिम

मुझे mongod.log को mongod.log से बदलना था और यह काम करता है
cwhisperer

पुष्टि कर सकते हैं कि यदि systemLog.logRotate: reopenमें mongod.conf, तो pkill इरादा के रूप में काम करेगा और नामांकित लॉग फ़ाइल का कोई विलोपन आवश्यक नहीं है क्योंकि कोई भी निर्मित नहीं है।
जूलियन एच। लैम

0

निम्नलिखित ने मेरे लिए काम किया:

/var/log/mongo/mongod.log {
    missingok
    rotate 3
    size 100M
    nodateext
    postrotate
            /usr/bin/kill -USR1 $(cat /var/run/mongod.pid)
            rm -f /var/log/mongo/mongod.log.[0-9][0-9][0-9][0-9]-*
    endscript
}

टिप्पणियाँ:

  • RedHat 6.5 पर परीक्षण किया गया
  • मैंगो द्वारा निर्मित खाली लॉग फ़ाइलों को हटाने का एकमात्र तरीका मुझे एक काम कर सकता था
  • लॉक फ़ाइल का स्थान इस बात पर निर्भर करता है कि MongoDB कैसे स्थापित किया गया था
  • killएक बैश बिलिन है, लेकिन लॉगोट्रेट अंडर रन /bin/shकरता है - जो SIGUSR1रेडहैट 6.5 पर पहचान नहीं करता है
  • मैंने इसके साथ परीक्षण नहीं किया है, compressलेकिन यह एक स्ट्रेचेफोर्वर्ड जोड़ होना चाहिए

-1

ध्यान दें कि संस्करण 3.0 और उच्चतर में लॉग को घुमाने के लिए अपने डेटाबेस डेमन को मारने की आवश्यकता नहीं है। यहाँ प्रलेखन का संदर्भ लें:

https://docs.mongodb.com/manual/tutorial/rotate-log-files/


1
ऐसा लगता है कि एंड्री पहले से ही उस दस्तावेज को पढ़ता है; आप वास्तव में उसके सवाल का जवाब नहीं दे रहे हैं।
1929 को कानून29
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.