工作疑问之mongodb日志轮转及上传

前因:

mongo出了点小问题,但是日志级别不够所以没记录到问题。然后我在配置文件中设置了日志级别

#日志级别设置,verbose表示debug v表示级别共五级,v越多日志越详细。

#verbose=true

#vvv=true

后果:

没过多久我就收到数据库重启的报警邮件。检查之后发现磁盘已经爆满,mongo的日志文件把磁盘占满了。

原来因为日志级别的提高,打印的日志非常详细。日志文件以每分钟5M的速度增加,导致磁盘不够用。

 

解决:我要设置一个定时轮转日志的脚本,当日志增加到一定大小时轮转日志。然后把轮转的日志保存到aws的S3

开始我的想法是 cp 一份原日志文件,命名为log1,并上传log1到s3,完成后echo清空原日志文件删除log1,减小日志的空间占用。

 问题:在上传的时候我发现一个有趣的问题,原日志在被echo清空后du查看大小只有1 M多一点,cp这个只有1M的原日志为log2,上传到s3,发现log2的大小为log1+log2,日志呈现的是是增量增长。

 原因:mongodb的日志文件正在运行,不断地被写入。这时候echo可以清空日志的内容,但是不会释放block。所以日志大小一直呈现增量增长。

 修改:检查原日志大小,超过制定大小则发送信号  kill -SIGUSR1 $pid,这时log目录中就会多一个以时间命名的日志文件,这个文件就是轮转下来的文件。它是静态的,上传这个文件,上传完成后删除。

 下面是脚本:

#! /bin/bash

#

pid=`ps -ef | grep mongod| grep -v grep | awk '{print$2}'`

path=/data/mongodb/log/

path1=/data/mongodb/log/mongodb.log

num=`du $path1|awk '{print $1}'`

if [ $num -gt 100 ];

  then 

    kill -SIGUSR1 $pid

    #cp $path1 $path/`date +%Y-%m-%dT%H:%M`

    #echo > $path1

    aws s3 cp $path/mongodb.log.2018*  s3://myS3/mongo.`date +%Y-%m-%dT%H:%M:%SZ`.log 

    rm -rf  $path/mongodb.log.2018*

    #echo `date +%Y-%m-%dT%H:%M:%SZ`'上传完成' >>/data/uplogtoS3.log

疑虑:   这时我在网上查询到的一个命令 kill -SIGUSR1 $pid ,虽然它确实可以轮转日志,但我并不清除这个命令可能造成的坏的结果。

 如果这个命令有隐患,请在下面 mark 一下

posted @ 2018-03-01 18:12  showdbs  阅读(335)  评论(0编辑  收藏  举报