默认安装好mongodb后是没有日志分割的。比如搭建mongodb副本集,运行一段时间后发现日志文件变的很大。过大的日志文件造成磁盘空间浪费,写入性能降低,而且在大文件中查找问题麻烦。虽然mongodb提供了关闭日志的配置参数,但官方不推荐。那么为了避免实际使用中一个日志文件过大,我们需要对日志进行切割。
mongodb提供了一个 “systemlog.logrotate” 参数,可配置 rename 或者 reopen,默认是rename。
官方文档:https://docs.mongodb.com/v3.2/reference/configuration-options/#systemlog.logrotate
例如配置文件:
# where to write logging data.systemlog: verbosity: 0 destination: file logappend: true logrotate: rename path: /var/log/mongodb/mongod27017.logrename姑且根据字面意思认为是重命名,官方文档中也没有找到其他详细的说明。向mongodb进程发送 sigusr1 信号,会自动切割日志,例如老日志文件以 mongodb27017.log.2019-08-19t11:00:00 保存。写脚本配置crontab实现日志切割。
脚本:
#!/bin/shdatafile=/var/run/mongodblogfile=/var/log/mongodbdays=15/bin/kill -sigusr1 `cat $datafile/mongod27017.pid`find $logfile/ -mtime $days -delete计划任务:
0 0 * * * /root/scripts/mongodb_log_rotate.sh > /dev/null 2>&1 &reopen通过linux或者unix系统的logrotate工具关闭和重新打开文件,在使用logrotate时要设置成reopen模式,可以避免日志丢失。同时开启这个配置后需要确认?systemlog.logappend 是true。修改配置后重启mongodb 。
在/etc/logrotate.d/目录下新建一个名为mongod的文件,加上如下内容:
/var/log/mongodb/*.log { create 0644 mongod mongod daily rotate 30 missingok notifempty compress sharedscripts postrotate /bin/kill -usr1 `cat /var/run/mongodb/mongod27017.pid 2>/dev/null` 2>/dev/null || true endscript}通过这两种方法都可以实现日志分割,个人使用的是 reopen logrotate 的方案。
参考:
mongodb安装:http://www.szl724.com/?p=2927.html
mongodb副本集搭建:http://www.szl724.com/?p=2933.html
日志分割:https://www.jianshu.com/p/c3cf130bbf78
云服务器都是多少硬盘的我们的网站管理系统无法使用是怎么回事怎样申请免费ssl证书云服务器挂机哪种好用一点联想模拟器有必要安装吗 联想模拟器用着安全吗“小狗”域名xiaogou.com近50万元领衔!这些精品米也结拍了…2020年阿里云高配服务器买数据库无法登录提示无法链接到无法打开用户默认数据库