1. 程式人生 > >python解決mongo日誌佔用儲存過大的問題

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分鐘清一次