MongoDB 日誌切換(Rotate Log Files)實戰

MongoDB 日誌切換(Rotate Log Files)實戰

2019.03.09 14:42 274瀏覽python

MongoDB 日誌切換(Rotate Log Files)實戰mongodb

 

1. 在mongo shell下,執行logRotate命令:    shell

use admin    工具

db.runCommand({logRotate:1})post

須要在mongos,mongod,config server運行。ui

該方式的變種:spa

a) 在unix shell下運行:   unix

mongo localhost/admin –eval 「dbo.runCommand({logRotate:1})」日誌

 

b) Bash腳本:   server

#!/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-473九、SERVER-3339。

©著做權歸做者全部:來自51CTO博客做者UltraSQL的原創做品,如需轉載,請註明出處,不然將追究法律責任

Rotatemongodb日誌切換NoSQL

相關文章
相關標籤/搜索