默認(rèn)安裝好mongodb后是沒有日志分割的。比如搭建mongodb副本集,運(yùn)行一段時間后發(fā)現(xiàn)日志文件變的很大。過大的日志文件造成磁盤空間浪費(fèi),寫入性能降低,而且在大文件中查找問題麻煩。雖然mongodb提供了關(guān)閉日志的配置參數(shù),但官方不推薦。那么為了避免實(shí)際使用中一個日志文件過大,我們需要對日志進(jìn)行切割。
mongodb提供了一個 “systemlog.logrotate” 參數(shù),可配置 rename 或者 reopen,默認(rèn)是rename。
官方文檔:https://docs.mongodb.com/v3.2/reference/configuration-options/#systemlog.logrotate
例如配置文件:
# where to write logging data.systemlog: verbosity: 0 destination: file logappend: true logrotate: rename path: /var/log/mongodb/mongod27017.logrename姑且根據(jù)字面意思認(rèn)為是重命名,官方文檔中也沒有找到其他詳細(xì)的說明。向mongodb進(jìn)程發(fā)送 sigusr1 信號,會自動切割日志,例如老日志文件以 mongodb27017.log.2019-08-19t11:00:00 保存。寫腳本配置crontab實(shí)現(xiàn)日志切割。
腳本:
#!/bin/shdatafile=/var/run/mongodblogfile=/var/log/mongodbdays=15/bin/kill -sigusr1 `cat $datafile/mongod27017.pid`find $logfile/ -mtime $days -delete計(jì)劃任務(wù):
0 0 * * * /root/scripts/mongodb_log_rotate.sh > /dev/null 2>&1 &reopen通過linux或者unix系統(tǒng)的logrotate工具關(guān)閉和重新打開文件,在使用logrotate時要設(shè)置成reopen模式,可以避免日志丟失。同時開啟這個配置后需要確認(rèn)?systemlog.logappend 是true。修改配置后重啟mongodb 。
在/etc/logrotate.d/目錄下新建一個名為mongod的文件,加上如下內(nèi)容:
/var/log/mongodb/*.log { create 0644 mongod mongod daily rotate 30 missingok notifempty compress sharedscripts postrotate /bin/kill -usr1 `cat /var/run/mongodb/mongod27017.pid 2>/dev/null` 2>/dev/null || true endscript}通過這兩種方法都可以實(shí)現(xiàn)日志分割,個人使用的是 reopen logrotate 的方案。
參考:
mongodb安裝:http://www.szl724.com/?p=2927.html
mongodb副本集搭建:http://www.szl724.com/?p=2933.html
日志分割:https://www.jianshu.com/p/c3cf130bbf78