0%

MongoDB 日志切分

今天收到监控警告,说服务器磁盘快满了.

登上去看了一下,发现 MongoDB 的日志没做切分,大小也达到了13G,那就给他做个切分吧.

查看 MongoDB 配置

登录服务器,查看 MongoDB 的配置文件,看下有没有配置日志切分的参数.

cat /PATH/TO/MONGODB/CONFIG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
processManagement:
   fork: true
net:
   bindIp: IP1,IP2
   port: 27017
storage:
   dbPath: /PATH/TO/DB/mongodb
systemLog:
   destination: file
   path: "/PATH/TO/LOG/mongod.log"
   logAppend: true
storage:
   journal:
      enabled: true
replication:
   replSetName: rs0
security:
   keyFile: "/PATH/TO/DB/mongod.key"

查看 systemLog 段有没有加 logAppendlogRotate,没有就加上:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
processManagement:
   fork: true
net:
   bindIp: IP1,IP2
   port: 27017
storage:
   dbPath: /PATH/TO/DB/mongodb
systemLog:
   destination: file
   path: "/PATH/TO/LOG/mongod.log"
# 在这里
   logAppend: true
   logRotate: reopen
storage:
   journal:
      enabled: true
replication:
   replSetName: rs0
security:
   keyFile: "/PATH/TO/DB/mongod.key"

MongoDb 配置到这里就完成了,接下来搞切割配置.

新建 logrotate 配置

新建个文件,这里就叫 mongod

touch mongod

把配置写进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/PATH/TO/LOG/*log {
create 0644 root root
# 按日切分
daily
# 最多保留60个
rotate 60
# 切分文件加日期后缀
dateext
# 没有就不执行
missingok
# 空的就不执行
notifempty
sharedscripts
postrotate
# 切分完成后,通知 MongoDB 重开文件
/bin/kill -USR1 `cat /PATH/TO/DB/mongod.lock 2>/dev/null` 2>/dev/null || true
endscript
}

这里要把 postrotate 路径换成你 pid 文件的路径, 一般会在 /var/run 目录下.

测试一下配置是否正常

logrotate -df ./mongod

测试通过后就把它移动到 logrotate 的配置目录.

重启 MongoDB, 应用设置

这里我用的是 supervisor ,所以直接用 supervisorctl 重启 MongoDB.

supervisorctl restart mongodb

直接启动的话就在 MongoDB 终端中关闭:

1
2
3
4
mongod

use admin
db.shutdownServer()

关闭后重新启动即可.

参考文档:
MongoDB - Rotate Log Files

欢迎关注我的其它发布渠道