• MongoDB对日志文件进行归档的方法


    一、MongoDB logRotate命令

    在MongoDB数据库admin数据库下执行logRotate命令手动触发日志切换,切换后会将原日志文件以时间为后缀重命名并创建一个全新且为空的日志文件供MongoDB使用。

    • shard1.log.2019-10-31T06-09-03
    mongo> use admin
    mongo> db.adminCommand({ logRotate: 1 })
    

    二、操作系统层kill信号

    可通过对MongoDB运行的进程pid发送-SIGUSR1的kill操作实现与logRotate命令相同的功能

    1. 找到MongoDB运行的pid文件或使用ps -ef|grep mongod查看进程ID号
    2. 执行kill -SIGUSR1 pid
    ## 查看MongoDB进程ID
    shell> cat /data/mongodb/shard1.pid
    57070
    
    shell> ps -ef|grep mongod|grep shard1|grep -v grep
    mongodb  57070     1  0 Oct29 ?        00:14:44 /usr/local/mongodb/bin/mongod --config /data/mongodb/conf/shard1.conf
    
    ## 触发日志切换
    shell> kill -SIGUSR1 57070
    
    ## 验证日志切换
    shell> ls -ltr shard1.log*
    -rw-rw-r-- 1 mongodb mongodb   7344355 Aug 29 09:38 shard1.log.2019-08-29T01-38-15
    -rw------- 1 mongodb mongodb 853458949 Oct 31 14:09 shard1.log.2019-10-31T06-09-03
    -rw------- 1 mongodb mongodb      6679 Oct 31 14:13 shard1.log.2019-10-31T06-13-30
    -rw------- 1 mongodb mongodb      8579 Oct 31 14:20 shard1.log
    

    三、使用操作系统logrotate功能

    Linux logrotate被设计用来对各服务产生的大日志文件进行归档处理,默认情况下logrotate每天基于cron job自动触发触发,以下是logrotate功能特点

    • 支持自动日志归档
    • 支持对归档的日志进行压缩
    • 支持对归档操作发送邮件提醒
    • 支持基于每天、每周、每月、每年等维度进行归档策略
    • 支持日志达到指定大小的归档策略
    • 支持在日志归档期间进行额外的操作(如重启某服务)
    • 支持归档过程中的常见错误处理机制(如文件不存在、文件为空等)

    1. 常用参数说明

    weekly                      每周进行切换
    rotate                      保留12份归档日志文件
    olddir                      指定归档的目录
    missingok                   如不存在该文件也不报错且进入下一轮
    minsize                     指定日志多大时进行切换,单位字节,可与weekly、monthly一起使用
    dateext                     对归档的日志文件增加日期后缀,默认格式'%Y%m%d'
    copytruncate                
    notifempty                  如果日志文件为空,不会进行日志归档切换
    compress                    对归档的日志进行压缩,默认用gzip压缩,文件名以'.gz结尾'
    

    2. copy与copytruncate的差异

    copy

    • 原样拷贝一份相同的日志文件后,不清空原日志文件

    copytruncate

    • 原样拷贝一份相同的日志文件后,清空原日志文件,该方式不同于将文件先move后新建一个同名文件的方式,主要是针对一些程序在文件的inode改变后无法正常写入日志的情况,对于大日志文件,通过这种方式进行日志的truncate操作期间,会有短暂的处理时间,在这端时间内产生的日志将不会输出到原本的日志文件,所以会有少量数据丢失情况。

    3. 配置示例

    场景需求说明

    • 每周进行切换
    • 保留10份历史日志
    • 历史日志保留在/data/mongodb/log/目录下
    • 如果文件不存在也不报错
    • 归档的日志增加时间扩展名
    • 指定需要达到1G才进行归档
    • 使用先拷贝日志在清空的方式进行归档
    • 对归档的日志进行gzip压缩
    shell> vim /etc/logrotate.d/mongodb-shard1
    	/data/mongodb/log/shard1.log
    	{
    	    weekly
    	    rotate 10
    	    olddir /data/mongodb/log/
    	    missingok
    	    dateext
    	    minsize 104857600
    	    copytruncate
    	    notifempty
    	    compress
    	    create 0644 mongodb mongodb
    	}
    
    ## 手动触发
    shell> logrotate -vf /etc/logrotate.d/mongodb-shard1
    
    
    ## 验证
    shell> ll /data/mongodb/log/*.gz
    -rw------- 1 mongodb mongodb 2670 10月 31 15:18 /data/mongodb/log/shard1.log-20191031.gz
    

    四、参考链接

  • 相关阅读:
    动态表单实现客户端二次过滤及字段汇总统计
    开放一些常见功能的工具类代码
    动态表单
    客户中增加按钮提前判断是否撞单 并提示
    通过插件来对打印数据进行处理
    mac 升级10.12 php debug 环境 跑不起的解决 解决方案
    感觉世界变化太快...
    Mac 升级一次,php 就崩溃一次,有味,苹果....
    http://s22.app1105796624.qqopenapp.com/
    unity 2d 游戏优化之路 遇坑记录
  • 原文地址:https://www.cnblogs.com/zhenxing/p/15899605.html
Copyright © 2020-2023  润新知