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。

转载于:https://blog.51cto.com/ultrasql/1620675

MongoDB 日志切换(Rotate Log Files)实战相关推荐

  1. MongoDB日志切换(Rotate Log Files)指南

    MongoDB日志切换(Rotate Log Files)指南 MongoDB默认情况下不会自动的切换轮转日志的,这将会导致日志日渐增大,在繁忙的业务下,日志增长量非常大的.如此之大的日志文件,查看某 ...

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

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

  3. Widows Log Files (windows日志文件)

    1.1 计划任务服务 Schedlgu.txt为计划任务服务的日志文件,可以在下面的键值指定该文件的路径 Key: HKLM/SOFTWARE/Microsoft/SchedulingAgent Va ...

  4. MongoDB 日志管理

    MongoDB默认情况下不会自动的切换轮转日志的,这将会导致日志日渐增大,在繁忙的业务下,日志增长量非常大的.如此之大的日志文件,查看某天的日志也不太方便.如是,需要对mongodb 日志文件进行切换 ...

  5. MongoDB一篇从入门到实战

    目录 MongoDB 数据库介绍 01.MongoDB简介 1.性能高 2.支持分布式 3.安装和部署容易 4.便于开发 5.NOSQL与SQL对比 02.文档存储结构 1.键值对 2.文档 3.集合 ...

  6. java去掉mongodb日志_MongoDB日志文件过大的解决方法 清理

    MongoDB日志文件过大的解决方法 2016年05月09日 14:43:11 jjwen 阅读数 1261 MongoDB的日志文件在设置 logappend=true 的情况下,会不断向同一日志文 ...

  7. mysql数据库重做日志文件_数据库:mysql:重做日志文件(redo log file)

    一.重做日志缓冲(redo log buffer) 1. log block 在InnoDB存储引擎中,重做日志都是以512字节进行存储的.这意味着重做日志缓存.重做日志文件都是以块(block)的方 ...

  8. 认真学习MySQL中的二进制日志(binlog)与中继日志(Relay log)

    binlog即binary log,二进制日志文件,也叫作变更日志(update log).它记录了数据库所有执行的DDL和DML等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语 ...

  9. MongoDB 日志分析工具 mtools

    概述 mtools is a collection of helper scripts to parse and filter MongoDB log files (mongod, mongos), ...

最新文章

  1. OpenCV读写图像文件解析
  2. mediav聚效广告代码片段
  3. 带你100% 地了解 Redis 6.0 的客户端缓存
  4. 《算法设计编程实验:大学程序设计课程与竞赛训练教材》——2.3 构造法模拟的实验范例...
  5. linux怎么查看fastq格式文件,2020-01-11 了解FASTQ格式并处理FASTQ文件
  6. ACE_Service_Handler类的理解和使用
  7. what to look if you want to debug your docsify based website
  8. SAP Gateway类型为multipart mixed的请求处理逻辑
  9. 数据全景洞察概念简介
  10. 物联网-移远M26模块OpenCPU开发第1讲
  11. rsa加解密的内容超长的问题解决
  12. LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算(二)
  13. kotlin环境配置
  14. oracle update导入clob,【Oracle】给clob字段插入数据
  15. objective-c 编程总结(第一篇)字符串操作
  16. 疫情下跨越一万公里的友情:熊超与飒特电子哨兵的故事
  17. 2022年危险化学品经营单位安全管理人员考试模拟100题及模拟考试
  18. 三菱FX5U系列PLC中的DSZR机械原点回归指令(带DOG搜索)的详细分析
  19. 【100 种语言速成】第 4 节:Lua
  20. WPF 几何图形之图形微语言命令

热门文章

  1. 【STM32 .NET MF开发板学习-29】摄像头蓝牙图像远程获取
  2. ASP.NET -- 缓存技术(1)
  3. MySQL 误操作恢复表
  4. 推荐系统-03-简单基于用户的推荐
  5. MongoDB学习(五)使用Java驱动程序3.3操作MongoDB快速入门
  6. MySQL数据库提升篇-----触发器
  7. ASP.NET 获取IIS应用程序池的托管管道模式
  8. BaaS模式的开发思路
  9. sudo重定向失败解决方法
  10. yii2手动添加图片处理插件Imagine