我的服务器上的MongoDB版本是v2.6.3,mongod正在运行:
ubuntu@koala:/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刚出现一个奇怪的问题。 我检查日志文件:
ubuntu@koala:/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。 1 而不是.log。当我使用tail -fn检查 log.1 文件时,我可以看到日志仍然附加到它,并且正在增长:
ubuntu@koala:/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 config 文件中可以看出,MongoDB应该登录到logpath:
ubuntu@koala:/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 config 文件在此处给出:
ubuntu@koala:/var/log/mongodb$ vim /etc/logrotate.d/mongodb
/var/log/mongodb/*.log {
daily
rotate 52
missingok
copytruncate
notifempty
compress
delaycompress
}
相同的logrotate配置只适用于MongoDB v2.6.5 的其他服务器上的其他 MongoDB 日志,我想postrotate不是这里的诀窍(我也尝试过postrotate,但没有运气)。
如何解决这个问题?
答案 0 :(得分:1)
我不是mongo专家,但是:
如果您打算使用logrotate配置文件,如您所示,那么您的配置需要postrotate
lint(未能这样做是为什么mongodb会继续登录 log.1 文件)
postrotate
kill -SIGUSR1 `cat /var/run/mongodb.pid` >/dev/null 2>&1 || true
答案 1 :(得分:0)
您需要修改logrorate配置,如下所示。这对我有用
ubuntu@koala:/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 restart all //if your running pm2 on background, otherwise not needed