如何在MongoDB 3.4上设置日志旋转

时间:2020-03-05 15:29:31  来源:igfitidea点击:

在本文中,我要讲述MongoDB日志旋转。
日志是文本文件,可以在我们的程序运行时包含信息,警告或者错误记录。
我们需要执行日志旋转,因为这些文件变得太大并使用太多的磁盘空间。
大文件也需要更多的时间来打开和分析。
还可以拉图缩小旧日志文件以减少其大小。

我将使用在VMware工作站中创建的CentOS 7虚拟机,其中1个VCPU,1 GB的内存和20 GB的磁盘空间和MongoDB 3.4.

默认情况下,MongoDB日志位于/var/log/mongodb中。
我们可以通过启动mongodb服务与--logpath更改日志文件的位置

# mongod -v --logpath /var/log/mongodb/server1.log

执行日志旋转的最简单方法是手动执行

# kill -SIGUSR1 $(cat /var/lib/mongo/mongod.lock)

并删除日志

# rm -rf /var/log/mongodb/mongod.log.*

或者压缩它们以释放一些磁盘空间

# tar -cf /var/log/mongodb/mongod.log.*

SIGUSR1信号被发送到Mongod进程并执行日志旋转。
执行日志旋转的另一种方式是通过在命令行中键入"mongo"来进入Mongo控制台。
然后在数据库控制台执行

> use admin
    > db.runCommand( { logRotate : 1 } )

输出必须是

{ "ok" : 1 }

我们还可以通过使用--logrotate键启动Mongo来指定LogRotate命令的行为。
我们应该指定此密钥重命名或者重新开放的选项。
默认使用默认选项重命名。
重命名选项只是重命名日志文件。
重新打开选项关闭并重新开放文件。
此选项必须与--Logappend键和Logotate实用程序一起使用,以避免数据丢失。

对于自动rotaion,我们可以使用Logotate实用程序。
首先创建文件

# vi /etc/logrotate.d/mongodb

并插入那里

/var/log/mongodb/mongodb.log {
    daily
    rotate 30
    compress
    missingok
    sharedscripts
    postrotate
        	kill -SIGUSR1 $(cat /var/lib/mongo/mongod.lock)
    endscript
}

关于此配置文件的几句话。
"每日"意味着日志每天旋转,'旋转30'日志将在通过电子邮件或者删除发送之前保存30天,"压缩"旧日志用Gzip压缩,'MissingOk'跳过任何日志文件中的任何错误缺少,'SharedScript的脚本在脚本运行脚本,'postrotate'和'sudencript'rotation后执行脚本。

使用--syslog运行Mongo Instanse也可以发送到主机系统日志文件。
Windows主机不支持此选项。