MongoDB日志分割

mongo默认是没有进行日志分割的,所有的日志持续写到一个文件中。缺点是很明显的,日志文件会越来越大

  • 占用过多磁盘空间
  • 日志文件写入性能越来越低
  • 问题排查越来越困难

配置分割策略

要实现日志分割,首先要配置日志分割策略,在mongodb的配置中,systemLog下添加logRotate配置。

logRotate总共有两种取值:

rename

说实话,不是很理解这个名字。
这种策略下,需要写一个shell脚本,加到crontab里面
shell脚本内容如下:

#!/bin/sh

datafile=/var/run/mongodb
logfile=/var/log/mongodb
days=15
/bin/kill -SIGUSR1 `cat $datafile/mongod.pid`

find $logfile/ -mtime +$days -delete

crontab配置每晚凌晨0点执行

0 0 * * * /opt/shell/mongodb_log_rotate.sh > /dev/null 2>&1 &

脚本干了两件事

  1. 给mongod进程发出SIGUSR1信号之后,mongod就会乖乖的分割日志。
  2. 清除超过15天的日志

reopen

如果是通过Linux或者Unix系统的logRotate工具来分割,就需要指定reopen, 当然logappend必须也不能少。关闭文件然后重新打开可以防止日志文件丢失。
你需要在/etc/logrotate.d/目录下新建一个名为mongod的文件,加上如下内容:

/var/log/mongodb /*log {
    create 0644 mongod mongod 
    daily
    rotate 15
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /run/mongodb/mongod.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

这个配置文件的权限必须为-rw-r--r--,不然logrotate不认。

分割之后的文件名格式就是文件名加上分割的时间戳,如mongod.log.2018-05-16T13-08-58。当然这个时间格式可以通过timeStampFormat来配置,默认的是iso8601-local,还可以选择ctimeiso8601-utc

    原文作者:挨踢的懒猫
    原文地址: https://www.jianshu.com/p/c3cf130bbf78
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞