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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,941评论 6 342
  • 日志管理Rsyslog [TOC] 背景 有一个4台机器的分布式服务,不多不少,上每台机器上查看日志比较麻烦,用F...
    ferret阅读 31,597评论 0 6
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,438评论 0 5
  • 背景: 阅读新闻 12C CDB模式下RMAN备份与恢复 [日期:2016-11-29] 来源:Linux社区 作...
    阳屯okyepd阅读 3,582评论 0 7
  • 山东卫视最近在播放电视剧《搭错车》李雪健和马少骅两个版本,十年前,李雪健老师和殷桃的一部《搭错车》,让不少观众...
    温柔你不懂得爱阅读 1,019评论 0 0