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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值