MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगो लॉग रोटेशन विंडोज़ पर काम नहीं करता है

Wernfried-Domscheit की सहायता से , बहुत सारे शोध, परीक्षण के सप्ताह और त्रुटि और निराशा मैंने विंडोज़ पर एक कार्यशील समाधान निकाला।

आवश्यकताएं
  • आपके पास एक MongoDB-सेवा है जो एक कॉन्फ़िगरेशन फ़ाइल के साथ चल रही है mongod.cfg
  • LogRotateWin स्थापित है। यह यूनिक्स कार्यान्वयन के आधार पर लॉगफाइल्स को घुमाने के लिए एक तृतीय पक्ष पैकेज है। यह कई अनुकूलन योग्य कार्यक्षमता प्रदान करता है जैसे संपीड़न, घूर्णन लागू होने पर, पुरानी फ़ाइल हटाना और बहुत कुछ। आप एक पूर्ण विकल्प सूची यहां पा सकते हैं LogRotateWin Configuration
  • Windows कार्य शेड्यूलर का बुनियादी ज्ञान।
  • बैट फाइलों का बहुत बुनियादी ज्ञान।
<एच5>1. MongoDB-Service की कॉन्फ़िगरेशन फ़ाइल समायोजित करें
  1. सेवा बंद करो
  2. mongod.cfgखोलें और उन कोड पंक्तियों को खोजें जहां systemLog कॉन्फ़िगर किया गया है:
# where to write logging data. 
systemLog:
      destination: file
      logAppend: true
      path:  E:\MongoDB\Server\4.4\log\mongod.log
      logRotate: reopen

सुनिश्चित करें, कि आप अपने mongod.log . के पथ को अधिलेखित कर दें . यह भी सुनिश्चित करें कि logAppend: true और logRotate: reopen सेट हैं।

  1. मौजूदा mongod.log हटाएं फ़ाइल
  2. सेवा फिर से शुरू करें
2. लॉगरोटेट कॉन्फ़िगरेशन कॉन्फ़िगर करें

यह मेरा विन्यास है। आप इसे अपनी आवश्यकताओं के अनुसार अनुकूलित कर सकते हैं। लेकिन copy का उपयोग न करें , copytruncate और create और नहीं postrotate हटाएं आज्ञा! (सोर्सफोर्ज के चर्चा सूत्र में मैंने देखा कि notifempty काम नहीं कर रहा है और rotate 10 अनुमति त्रुटियों में परिणाम, इस पोस्ट के नीचे मेरा संपादन देखें)

E:\MongoDB\Server\4.4\log\mongod.log {
  nocompress
  daily
  size 100m
  missingok
  rotate 50
  postrotate
    E:\logrotate\notify_mongodb_service.bat
  endscript
}

यह कॉन्फ़िगरेशन लॉग को हर दिन असम्पीडित या आकार 100 मेगाबाइट से अधिक होने पर घुमाता है। अधिकतम 50 लॉग संग्रहीत हैं, पुरानी फाइलें हटा दी जाएंगी। रोटेशन सफल होने पर पोस्टरोटेट स्क्रिप्ट निष्पादित की जाएगी।

3. notify_mongodb_service.bat फ़ाइल

यह फ़ाइल MongoDB-Service को एक कमांड भेजती है, कि एक नई फ़ाइल का उपयोग किया जाएगा। यदि आपने प्राधिकरण सक्षम किया है तो आप -u username -p password add जोड़ सकते हैं साथ ही।

E:\MongoDB\Server\4.4\bin\mongo.exe --eval "db.adminCommand({ logRotate: 1 })"
  • पथ को mongo.exe में बदलें आपके सिस्टम के स्थान पर।
  • फ़ाइल सहेजें और सुनिश्चित करें कि logrotate . में पथ कॉन्फ़िगरेशन समान है! (postrotate . के बीच की रेखा और endscript

कमांड को एक अतिरिक्त फ़ाइल में संग्रहीत किया जाता है, क्योंकि LogRotateWin ब्रैकेट्स की व्याख्या करता है ({} ) मोंगो कमांड का और एक अपवाद फेंकता है।

4. जांचें कि सब कुछ काम कर रहा है
  1. लॉग का फ़ोल्डर खोलें। आपको एक ही फाइल दिखाई देनी चाहिए mongod.log

  2. एक टर्मिनल खोलें और जांचें कि लॉगरोटेशन काम कर रहा है ( -f कोई ट्रिगर ट्रिगर न होने पर भी लॉगरोटेशन को बल देता है):

logrotate logrotate.conf -f

एक नई लॉग फ़ाइल आनी चाहिए। (मेरे लिए यह mongod.log.1 . है )mongod.log खाली होना चाहिए।

  1. कुछ ऐसा ट्रिगर करें जिसे लॉग किया जाएगा। उदाहरण के लिए monogdbCompass से अपने MongoDB से कनेक्ट करें।

  2. चेक mongod.log . कनेक्शन वहां लॉग होना चाहिए।

5. समय-समय पर लॉगरोटेशन चलाने के लिए टास्क शेड्यूलर जॉब बनाएं

मैं कार्य शेड्यूलर निर्माण के बारे में बात नहीं करूंगा लेकिन यहां मेरी कॉन्फ़िगरेशन का एक उदाहरण है। आप उस फ़ाइल को आयात कर सकते हैं और इसे अपनी आवश्यकताओं के अनुसार संशोधित कर सकते हैं।

logrotate.exe . का पथ भी बदलें आपके सिस्टम के आपके स्थान पर।

यह कार्य यह जांचने के लिए हर घंटे चलता है कि लॉगरोटेट के एक या एक से अधिक ट्रिगर ट्रिगर हुए या नहीं:

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.4" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2021-12-02T17:57:55.9541897</Date>
    <Author>Grayknife</Author>
    <Description>Execute Logrotate Hourly</Description>
    <URI>\docker\LogRotate</URI>
  </RegistrationInfo>
  <Triggers>
    <CalendarTrigger>
      <Repetition>
        <Interval>PT1H</Interval>
        <StopAtDurationEnd>false</StopAtDurationEnd>
      </Repetition>
      <StartBoundary>2021-12-02T18:00:00</StartBoundary>
      <ExecutionTimeLimit>PT30M</ExecutionTimeLimit>
      <Enabled>true</Enabled>
      <ScheduleByDay>
        <DaysInterval>1</DaysInterval>
      </ScheduleByDay>
    </CalendarTrigger>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>1234</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <Exec>
      <Command>E:\logrotate\logrotate.exe</Command>
      <Arguments>logrotate.conf</Arguments>
      <WorkingDirectory>E:\logrotate</WorkingDirectory>
    </Exec>
  </Actions>
</Task>

मुझे उम्मीद है कि मैं उस गाइड के साथ किसी की मदद कर सकता हूं।

2022-05-01 संपादित करें

मुझे इस समस्या का सामना करना पड़ा कि logrotate 9 से अधिक फ़ाइलें होने पर अपवाद फेंकता है:

E:\logrotate>E:\logrotate\logrotate.exe logrotate.conf -f
logrotate: Force option set to true
logrotate: Exception: Cannot create a file when that file already exists.

logrotate: StackTrace:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.__Error.WinIOError()
   at System.IO.File.InternalMove(String sourceFileName, String destFileName, Boolean checkHost)
   at logrotate.Program.AgeOutRotatedFiles(logrotateconf lrc, FileInfo fi, String rotate_path)
   at logrotate.Program.RotateFile(logrotateconf lrc, FileInfo fi)
   at logrotate.Program.Main(String[] args)

E:\logrotate>E:\logrotate\logrotate.exe logrotate.conf -f
logrotate: Force option set to true
logrotate: Exception: Access to the path 'E:\MongoDB\Server\4.4\log\mongod.log.10' is denied.
logrotate: StackTrace:    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.File.InternalDelete(String path, Boolean checkHost)
   at System.IO.File.Delete(String path)
   at logrotate.Program.DeleteRotateFile(String m_filepath, logrotateconf lrc)
   at logrotate.Program.AgeOutRotatedFiles(logrotateconf lrc, FileInfo fi, String rotate_path)
   at logrotate.Program.RotateFile(logrotateconf lrc, FileInfo fi)
   at logrotate.Program.Main(String[] args)
E:\logrotate>

अभी के लिए क्विकफिक्स अधिकतम 9 फाइलें सेट करना है।




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo id डरावने URL की ओर ले जाती है

  2. जावा परिणाम को हल करना 137

  3. मोंगो में कुशलतापूर्वक क्वेरी द्वारा दस्तावेज़ कैसे हटाएं?

  4. मुझे उपयोगकर्ता या अलग से एम्बेडेड, मोंगोडब में गतिविधियों की समयरेखा कहां रखनी चाहिए?

  5. उल्का.जेएस में एक Mongo.db संग्रह को कैसे अपडेट करें?