python解決mongo日誌佔用儲存過大的問題
阿新 • • 發佈:2019-01-01
當操作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分鐘清一次