MongoDB 日志切换(Rotate Log Files)实战

1. 在mongo shell下,执行logRotate命令:

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

需要在mongos,mongod,config server运行。

该方式的变种:

a) 在unix shell下运行:

mongo localhost/admin –eval “dbo.runCommand({logRotate:1})”

b) 在unix shell下运行:

mongo localhost/admin –eval “dbo.runCommand({logRotate:1})”

c) Bash脚本:

#!/bin/sh    
### log rotate    
mongo localhost/admin –evel “db.runCommand({logRotate:1})”    
### compress newly rotated    
for f in /var/log/mongodb/mongod.log.????-??-??T??-??-??;    
do    
7za a “$f.z” “$f”    
rm –f “$f”    
done

d) 将如下脚本保存到logRotate.js文件:

db.getMongo().getDB(“admin”).runCommand({logRotate:1})

创建脚本logRotate.sh:

#!/bin/sh    
# Clear old logs    
rm /var/log/mongodb/mongod.log.*    
# Rotate logs    
mongo logRotate.js

e) logRotate.sh //写到计划任务crontab即可(需要expect软件包)

#!/usr/bin/expect –f    
spawn /usr/local/mongodb/bin/mongo admin -udev -ptest –quiet    
expect ">"    
send db.runCommand("logRotate")    
send "\r\n"    
expect ">"    
send "exit"

2. 使用SIGUSR1信号:

kill –SIGUSR1 <mongod process id>    
find /var/log/mongodb/mongodb.log.* -mtime +7 –delete

该方法的变种:

a) 用python写的定时脚本,每天产生一个新的log,超过7天的log自行删除。

#!/bin/env python
import sys
import os
import commands
import datetime,time
#get mongo pid
mongo_pid = commands.getoutput("/sbin/pidof mongod")
print mongo_pid
#send Sig to mongo
if mongo_pid != ‘‘:
cmd = "/bin/kill -USR1 %s" %(mongo_pid)
print cmd
mongo_rotate = commands.getoutput(cmd)
else:
print "mongod is not running..."
#clean log which > 7 days
str_now = time.strftime("%Y-%m-%d")
dat_now = time.strptime(str_now,"%Y-%m-%d")
array_dat_now = datetime.datetime(dat_now[0],dat_now[1],dat_now[2])
lns = commands.getoutput("/bin/ls --full-time /var/log/mongodb/|awk ‘{print $6, $9}‘")
for ln in lns.split(‘\n‘):
ws = ln.split()
if len(ws) != 2:
continue
ws1 = time.strptime(ws[0],"%Y-%m-%d")
ws2 = datetime.datetime(ws1[0],ws1[1],ws1[2])
if (array_dat_now - ws2).days > 7:
v_del = commands.getoutput("/bin/rm -rf /var/log/mongodb//%s" % (ws[1]))

在root下crontab –e编辑定时任务

0 2 * * * /root/mongo_log_rotate.py >/root/null 2>&1

3. 日志管理工具logrotate

自动化的最好方式是使用logrotate,其中copytruncate参数能更好工作。

拷贝以下代码到/etc/logrotate.d/mongodb文件中,确保脚本中的路径和文件名正确。

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

4. Mongodb bug    
mongodb稳定性差强人意。在切换过程中也会导致mongodb进程终止。    
具体内容可以查看下mongodb bug系统:SERVER-4739SERVER-3339

时间: 2024-10-12 22:54:38

MongoDB 日志切换(Rotate Log Files)实战的相关文章

Oracle 联机重做日志文件(ONLINE LOG FILE)

--========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --========================================= 一.Oracle中的几类日志文件 Redo log files      -->联机重做日志 Archive log files   -->归档日志 Alert log files     -->告警日志 Trace files        

实战 SQL Server 2008 日志传送(Log Shipping)

实战 SQL Server 2008 日志传送(Log Shipping) 一.什么是日志传送? 原理很简单,三个动作六个字:备份->复制->恢复. 如果由人来完成这个三个动作,只能叫日志搬运工:而由SQL Server Job自动完成,就叫日志传送.同样的事情,不一样的档次,所以叫法也不一样. 二.日志传送能解决什么问题? 解决数据库的多服务器热备份问题.多台服务器定时备份,随时可以作为主数据库服务器的替补. 三.日志传送的优点是什么? 简单!比SQL Server的数据库复制.镜像简单多了

【翻译自mos文章】Oracle db 12c中,每次日志切换时,会改变alert_sid.log的权限

12c中,每次日志切换时,会改变alert_sid.log的权限 来源于: Alert log file's permissions Change with every log switch in 12c (Doc ID 1637367.1) 适用于: Oracle Database - Enterprise Edition - Version 12.1.0.1 and later Information in this document applies to any platform. 症状:

[翻译]mongodb日志分析工具mtools之mplotqueries

mtools是一组非常好用的mongodb日志分析工具,里面最复杂的命令是mplotqueries,上网查了一下,还没有人翻译过.英文不好,费了好大的劲翻完,翻的不好,但没有办法,我英文水平就这么多~ 原文地址:https://github.com/rueckstiess/mtools/wiki/mplotqueries ----------------------------------------------------------------------------------------

手动创建binary log files和手动编辑binary log index file会有什么影响

一.了解Binary Log结构 1.1.High-Level Binary Log Structure and Contents • Binlog包括binary log files和index file• 每个binary log文件的前4字节是Magic Number,紧接着是一组描述数据修改的Events • The magic number bytes are 0xfe 0x62 0x69 0x6e = 0xfe 'b''i''n' • 每个Event包括header bytes和da

日志切换

http://blog.chinaunix.net/uid-16362696-id-3472265.html [[email protected] logrotate.d]# cat message /var/log/messages { daily dateext copytruncate nocompress rotate 15 } [[email protected] logrotate.d]# pwd /etc/logrotate.d 日志切换:[[email protected] lo

mongodb日志清理

mongodb的日志相对其他数据库来说应该算是很大的,刚才由于报警,所以我查看啦一下,有15G的日志产生,下面是我的清理过程 出于对安全方面,我们服务器禁止使用rm命令,所以我在/home目录下创建啦一个mongolog文件夹 先查看一下日志大小和数量 #ls /opt/mongodb/log total 15G-rw-r--r--. 1 root root 6.6G Jul  2 17:10 mongodb.log-rw-r--r--. 1 root root 6.5K Oct 16  201

【oracle】oracledba14 archived log files

The loss of which two types of files may require a recovery with the RESETLOGS option?(Choose two.) A. control files B. password file C. archived log files D. system-critical data files for which all the redo entries are present E. non-system-critica

MySQL log files &nbsp; (1)

MySQL has several log files that can help you find out what activity is taking place. log type      information write to log file error log  Problems encoutered  starting, running or stopping mysqld General query  log      Established client connecti