1. 首页
  2. 数据库运维

MongoDB日志切割 分割日志的几个方法

默认安装好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.log

Rename

姑且根据字面意思认为是重命名,官方文档中也没有找到其他详细的说明。向MongoDB进程发送 SIGUSR1 信号,会自动切割日志,例如老日志文件以 mongodb27017.log.2019-08-19T11:00:00 保存。写脚本配置crontab实现日志切割。

脚本:

#!/bin/sh

datafile=/var/run/mongodb
logfile=/var/log/mongodb
days=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

原创文章,作者:章郎虫,如若转载,请注明出处:http://www.szl724.com/database/3081.html

联系我们

0574-55011290

QQ:248687950

邮件:admin@nbhao.org

工作时间:周一至周五,9:00-18:00,节假日休息

QR code