2015-06-18 3 views
3

версия MongoDB является v2.6.3 на моем сервере, и mongod работает:MongoDB, журнал не в состоянии LogRotate

[email protected]:/var/log/mongodb$ ps -ef | grep mongo 
root  7434  1 17 Jun16 ?  06:57:26 mongod -f /etc/mongodb-onepiece.conf --fork 

Я использую LogRotate ежедневно вращать файл журнала MongoDB. Странная проблема возникла с помощью logrotate. проверить файл журнала:

[email protected]:/var/log/mongodb$ ls -lth | grep mongodb 
-rw-r--r-- 1 ubuntu ubuntu 1.9G Jun 18 10:23 mongodb-onepiece.log.1 
-rw-r--r-- 1 ubuntu ubuntu 0 Jun 17 07:35 mongodb-onepiece.log 
-rw-r--r-- 1 ubuntu ubuntu 838M Jun 15 07:35 mongodb-onepiece.log.3.gz 
-rw-r--r-- 1 ubuntu ubuntu 22 Jun 14 20:52 mongodb-onepiece.log.2.gz 
-rw-r--r-- 1 ubuntu ubuntu 1.1G Jun 4 17:10 mongodb-onepiece.log.4.gz 
-rw-r--r-- 1 ubuntu ubuntu 53M May 29 19:14 mongodb-onepiece.log.5.gz 

Самый лог-файл уточненный является .log. вместо .log. Когда я использую хвост -fn проверить файл лог.1, я могу видеть, что журнал по-прежнему добавляется к нему, и это растет:

[email protected]:/var/log/mongodb$ tail -fn 2 mongodb-onepiece.log.1 
2015-06-18T10:36:50.163+0800 [initandlisten] connection accepted from 192.168.1.52:50278 #2507 (49 connections now open) 
2015-06-18T10:36:50.163+0800 [conn2503] command koala.$cmd command: isMaster { ismaster: 1 } keyUpdates:0 numYields:0 reslen:178 0ms 

Это означает, что MongoDB регистрирует в файл это не предполагается. Как видно из mongod конфигурации файл, MongoDB должен войти в LOGPATH:

[email protected]:/var/log/mongodb$ vim /etc/mongodb-onepiece.conf 
dbpath=/var/lib/mongodb-onepiece 
logpath=/var/log/mongodb/mongodb-onepiece.log 
logappend=true 
bind_ip = 192.168.1.* 
port = 47017 
fork=true 
journal=true 
master = true 

Из вышесказанного, я полагаю, что проблема была не с Logrotate конфигурации, но с MongoDB писать на неправильный файл. Каждый день, когда начинается logrotate, он проверяет только файл .log и обнаруживает, что он пуст, и он прекратит вращать журнал.

Если я перезапущу демона mongod, лог-путь будет исправлю на мгновение (записывает в правый файл журнала). В этот день файл .log не пуст, и он будет успешно повернут в файл .log.1. Но такая же проблема повторится и после логарифмирования, т. Е. MongoDB будет записываться в файл .log.1. Цикл приходит сюда.

Logrotate конфигурационный файл приведен здесь:

[email protected]:/var/log/mongodb$ vim /etc/logrotate.d/mongodb 
/var/log/mongodb/*.log { 
    daily 
    rotate 52 
    missingok 
    copytruncate 
    notifempty 
    compress 
    delaycompress 
} 

То же Logrotate конфигурации просто отлично работает с другими MongoDB бревен на другом сервере с MongoDB v2.6.5, и я полагаю, постротат - это не трюк здесь (я также пробовал постротат, но без везения).

Как решить эту проблему?

+0

HTTP: //docs.mongodb. org/manual/tutorial/rotate-log-files/ –

ответ

1

Я не эксперт Монго, но:

  1. Вы должны быть после официальной документации https://docs.mongodb.org/v2.6/tutorial/rotate-log-files/
  2. Если вы собираетесь использовать файл конфигурации Logrotate, как вы указали, то вам нужно postrotate ворса к вашей конфигурации (неспособность сделать так, почему MongoDB продолжает входить в лог.1 файл)

    postrotate 
        kill -SIGUSR1 `cat /var/run/mongodb.pid` >/dev/null 2>&1 || true 
    
+0

Я подтвердил, что эта опция работает и для mongo 3.2. – DrStrangepork

+0

Я использую версию Mongodb3.2.1. Я включил logrotate с параметром rename для файла конфигурации mongodb. Какой вид я получаю из этой конфигурации, а logrotate будет основываться на размере файла или по дате? –

+0

На основе * logrotate config *, который вы опубликовали, поворот будет основываться на дате (ежедневно). – DrStrangepork

0

Вам необходимо изменить конфигурацию logrorate, как показано ниже.Это работает для меня

[email protected]:/var/log/mongodb$ vim /etc/logrotate.d/mongodb 
/var/log/mongodb/*.log { 
    daily 
    rotate 5 
    compress 
    dateext 
    missingok 
    notifempty 
    sharedscripts 
    postrotate 
     /usr/bin/killall -SIGUSR1 mongod 
    endscript 
} 

, а затем

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

, а затем перезапустить службу mongod и другое приложение узла (если таковые имеются), подключенные к нему

sudo service mongod restart 

sudo pm2 restat all // if your running pm2 on background otherwise not needed