python解决mongo日志占用存储过大的问题

当操作mongo,很频繁存取的时候,mongo的日志会变得越来越大,

针对公司每天百亿级别的取和存,并保持mongo不重启的情况下,

用python写定时脚本,并保持mongo一直在线,不重启。

首先看一下在linux(centos)测试机上的mongo简单配置文件(mongodb.conf)

bind_ip=0.0.0.0
port=27017
dbpath=/usr/local/mongodb/data/db
logappend=true
fork=true
logpath=/usr/local/mongodb/data/logs
slowms=100

为了保证所有的操作对mongo的运行不受影响,

(1)手动清除(不影响mongo运行)

使用mongo自带的日志回滚功能

在mongo的交互式shell中我们需要执行以下两条命令:

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

执行完以后会在data目录下生成如这种文件(logs.2018-08-18T07-12-58)

同时logs文件还会存在,初始化了(变小了)

因为我们的日志是存储在logs(logpath=/usr/local/mongodb/data/logs)下的

所以我们还要手动删除(logs.2018-08-18T07-12-58)这种文件。

(2)脚本自动清除(不影响mongo运行)

# coding: UTF-8
import os,time
def re_logs():
    os.system('/usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin -eval "db.runCommand({logRotate: 1})"')
    path = '/usr/local/mongodb/data'
    list1 = os.listdir(path)
    print('所有文件',list1)
    remove_list = []
    for i in list1:
        if i.find('logs.') != -1:
            remove_list.append(i)
    for i in remove_list:
        os.system('rm -rf {0}'.format(path+'/'+i,))
    print('清空后剩余文件',os.listdir(path))
if __name__=="__main__":
    while True:
        re_logs()
        time.sleep(60 * 10)

定时10分钟清一次

猜你喜欢

转载自blog.csdn.net/m0_38124502/article/details/81809234