【MongoDB】日志文件过大/logRotate解决日志轮转的方案

本文详细介绍了如何使用MongoDB的logRotate命令进行日志文件的轮转,避免单个日志文件占用过多磁盘空间导致的服务问题。通过实例演示了在mongoshell中执行logRotate命令的过程,并提供了制定计划任务自动轮转日志的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值