由于mongodb不提供自动按天来输出日志文件的rotate配置。
如果日志文件清理不及时,会导致mongo越来越慢,甚至服务莫名down掉。
下面就我们在实践过程中使用logRotate的解决日志文件切割的方案叙述一下。
首先看一下官方文档对于logRotate的叙述:
一、定义(Definition)
logRotate
logRotate命令是一个管理命令,它可以轮转MongoDB日志,以防止单个日志文件占用过多的磁盘空间。
必须对admin database发出logRotate命令,方式如下:
{ logRotate: 1 }
注意:您的mongod实例需要使用--logpath [file]选项运行。
也可以通过将SIGUSR1信号发送到mongod进程来轮转日志。比如mongod的进程ID为2200,则在Linux上发送信号的方法如下:
kill -SIGUSR1 2200
二、行为(Behavior)
systemLog.logRotate设置或--logRotate选项规定了logRotate的行为。
当systemLog.logRotate或--logRotate设置为rename时,logRotate通过将当前时间戳附加到文件名来重命名现有日志文件。附加的时间戳格式如下:
<YYYY>-<mm>-<DD> T <HH>-<MM>-<SS>
然后,logRotate创建一个新的日志文件,新文件名与最初由mongod或mongos的systemLog.path设置规定的日志文件名相同。
将systemLog.logRotate或--logRotate设置为reopen时,logRotate遵循典型的Linux / Unix行为,仅关闭日志文件,然后重新打开同名的日志文件。通过reopen,mongod期望在轮转之前,另一个进程会重命名该文件,并且创建新文件实现重新打开会。
原文链接:https://docs.mongodb.com/manual/reference/command/logRotate/
三、实践篇
1.打开mongo shell(由于在mongod实例的本地打开此命令,故--ip省略)。
D:\MongoDB\Server\3.4\bin>mongo --port 你的端口
2.切换到admin数据库。
use admin
3.授权。
db.auth("你的管理账号", "你的密码")
4.执行logRotate命令。
db.adminCommand({logRotate:1})
1-4步执行过程如下图所示:
5.执行结果
四、制定计划任务,每天自动轮转
1.制定计划任务
在操作系统的“任务计划程序”中添加计划任务,填写时间、操作等信息,内容如下:
2.编写bat脚本
编写日志轮转的bat执行脚本文件,新建一个后缀名是.bat文件内容如下:
@call :output>logRotate.log
exit
:output
@ECHO OFF
echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time% log rotate begin......
D:\MongoDB\Server\3.4\bin\mongo --host 你的ip --port 你的端口 -u 你的管理账号 -p 你的密码 --authenticationDatabase admin --eval "printjson(db.adminCommand({logRotate:1}))"
echo log rotate end......
end