MongoDB日志分割

某天突然收到阿里云的短信通知,说A服务器磁盘使用率超过80%,接到警报后,我们第一时间进行排查,首先,服务器只有数据备份时才可能发生,因为备份数据时会保留两份(由于本机保留最近12小时数据,每个备份大概1G)可是算下来才不过14个G,加上其他一些占用最多也就占用30%左右,现在超过80%,很诡异。

于是乎查看了一下系统内的大文件

$ find / -type f -size +100M

发现 原来随着访问的增加,mongo的日志文件大小已经达到12G(原来没有进行日志分割,所有日志存在一起,滚雪球,越滚越大)
由于是查看了下官方的文档;

日志分割

SIGUSR1 方法

#该方法只能在Linux系统下进行
# kill -SIGUSR1 <mongod process id>
# find /data/mongodb_data/log/mongodb.log.* -mtime +7 -delete # 保留七天

mongo logRotate 命令方法

use admin
db.runCommand( { logRotate : 1 } )

Syslog Log Rotation 系统日志分割

# vi /etc/logrotate.d/mongodb 
/opt/mongodb/log/mongodb.log {
daily
rotate 7
compress
dateext
missingok
notifempty
sharedscripts
copytruncate
postrotate
/bin/kill -SIGUSR1 `cat /data/mongodb_data/mongod.lock 2> /dev/null` 2> /dev/null || true
endscript
}

# logrotate -f /etc/logrotate.d/mongodb

定期分割并清理日志

$ touch cron-logRotate-log.sh
$ chmod u+x cron-logRotate-log.sh
$ vi u+x cron-logRotate-log.sh

#!/bin/bash
app=mongod
timeAgo=$(date -d -7day +%Y-%m-%d)
rm -rf /var/log/mongodb/mongod.log.$timeAgo*

pidArray=$(/sbin/pidof $app)
for pid in $pidArray;do
if [ $pid ]
then
kill -SIGUSR1 $pid
fi
done

exit

50 03 * * * /data/config/cron-logRotate-mongodb.sh 每天晚上分割一下

坚持原创技术分享,您的支持将鼓励我继续创作!