首页 > 代码库 > MongoDB日志轮转
MongoDB日志轮转
OverView
MongoDB可使用标准的方法实现日志轮转,即获取到当前日志并开启一个新的。为了实现它,mongod实例通过在文件名称末尾添加UTC(GMT)时间戳的方式重命名当前的日志文件,然后打开这个新的log文件,关闭之前旧的log 文件,并发送所有新的日志信息到新的log文件中。
Rotation Setps
MongoDB标准的日志轮转方法是通过日志轮转命令,或者让mongod进程接受到一个SIGUSER1信号,以下具体的实现方法
1 开启mongod进程,保证appending enabled
mongod -v --logpath /var/log/mongodb/server1.log --logappend
2 在终端查看是否有mongo日志文件
ls /var/log/mongodb/server1.log*
3 如果是Windows系统,打开mongo shell,进入admin数据库并敲入轮转命令,即
use admin
db.runCommand( { logRotate : 1 } )
如果是Linux系统,则在终端运行 kill -SIGUSR1 <mongod process id>
4 再次查看结果是否有新的mongo日志文件生成
ls /var/log/mongodb/server1.log*
My auto script and crontab
以下是我用python写的定时脚本,每天产生一个新的log,超过10天的log自行删除
#!/bin/env python
import sys
import os
import commands
import datetime,time
#get mongo pid
mongo_pid = commands.getoutput("/sbin/pidof mongod")
print mongo_pid
#send Sig to mongo
if mongo_pid != ‘‘:
cmd = "/bin/kill -USR1 %s" %(mongo_pid)
print cmd
mongo_rotate = commands.getoutput(cmd)
else:
print "mongod is not running..."
#clean log which > 10 days
str_now = time.strftime("%Y-%m-%d")
dat_now = time.strptime(str_now,"%Y-%m-%d")
array_dat_now = datetime.datetime(dat_now[0],dat_now[1],dat_now[2])
lns = commands.getoutput("/bin/ls --full-time /var/log/mongodb/|awk ‘{print $6, $9}‘")
for ln in lns.split(‘\n‘):
ws = ln.split()
if len(ws) != 2:
continue
ws1 = time.strptime(ws[0],"%Y-%m-%d")
ws2 = datetime.datetime(ws1[0],ws1[1],ws1[2])
if (array_dat_now - ws2).days > 10:
v_del = commands.getoutput("/bin/rm -rf /var/log/mongodb//%s" % (ws[1]))
在root下crontab -e查看定时任务
0 2 * * * /home/jiangjianjian/mongo_log_rotate.py >/home/jiangjianjian/null 2>&1
MongoDB日志轮转