广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB 日志切换(Rotate Log Files)实战
  • 702
分享到

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

2024-04-02 19:04:59 702人浏览 薄情痞子
摘要

mongoDB 日志切换(Rotate Log Files)实战 1. 在mongo shell下,执行logRotate命令:    use admin 

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) 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

 

c) 将如下脚本保存到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

 

d) 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-4739、SERVER-3339。


您可能感兴趣的文档:

--结束END--

本文标题: MongoDB 日志切换(Rotate Log Files)实战

本文链接: https://www.lsjlt.com/news/38054.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB 日志切换(Rotate Log Files)实战
    MongoDB 日志切换(Rotate Log Files)实战 1. 在mongo shell下,执行logRotate命令:    use admin ...
    99+
    2022-10-18
  • MongoDB日志切换(Rotate Log Files)指南
    MongoDB日志切换(Rotate Log Files)指南 MongoDB默认情况下不会自动的切换轮转日志的,这将会导致日志日渐增大,在繁忙的业务下,日志增长量非常大的。如此之大的日志文件,查...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作