MongoDB的日志可以完成的记录mongodb的健康状态和运行情况,有助于我们在出现故障的时候对MongoDB的故障进行有效的分析。
在MongoDB4.4以前和以后的版本日志记录的格式是不一样的,4.4以前的格式是
<timestamp> <severity> <component> [<context>] <message>
例如:
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
从mongodb4.4开始日志格式就转化为标准的json格式
格式如下:
{"t":{"$date":"2022-10-19T02:48:44.165+00:00"},"s":"I", "c":"CONTROL", "id":51765, "ctx":"initandlisten","msg":"Operating System","attr":{"os":{"name":"PRETTY_NAME=\"Debian GNU/Linux 10 (buster)\"","version":"Kernel 4.9.2-3.0.0.std7b.el7.6.x86_64"}}}
具体格式如下:
{ "t": <Datetime>, // timestamp "s": <String>, // severity "c": <String>, // component "ctx": <String>, // context "id": <Integer>, // unique identifier "msg": <String>, // message body "attr": <Object> // additional attributes (optional) "tags": <Array of strings> // tags (optional) "truncated": <Object> // truncation info (if truncated) "size": <Integer> // original size of entry (if truncated) }
相关的key说明如下
Timestamp:时间戳,日志事件发生的时间 Serverity:日志信息等级 F:Fatal E:Error W:Warning I:Information D1-D5:Debug级别,从4.2开始支持指定Debug级别。 Compontents:日志事件的分类 ACCESS:登入访问相关的信息,例如登录验证情况。 COMMAND:数据库执行命令相关信息,例如,查询。 CONTROL:记录控制管理相关的信息,例如数据库初始化。 ELECTION:副本集选举相关信息 FTDC:(full-time diagnostic data ) 全程检测数据信息,例如Server的状态统计信息。 GEO:解析地理空间模型相关信息。 INDEX:索引相关信息,例如索引的创建过程信息。 INITSYNC:初始化同步操作相关信息 JOURNAL:日志相关的信息 NETWORK:网络相关信息,例如网络连接信息。 QUERY:查询相关信息,例如查询计划信息。 REPL:副本集相关信息,包括:初始化同步,心疼,状态,回滚等信息,包括ELECTION,INITSYSNC,REPL_HB和ROLLBACK。 REPL_HB:副本集心跳相关信息 ROLLBACK:回滚操作相关信息 SHARDING:分片相关信息,例如mongos的启动信息 STORAGE:存储相关信息,例如将 storage 层的数据刷入磁盘的信息。 TXN:多文档事务相关信息,4.0.2新增 RECOVERY:还原活动相关的信息 WRITE:写操作相关的信息,例如更新(update)的命令。 Context:产生该日志事件的线程名称 id:日志语句的独一无二的编号 Message:日志事件详细信息 Attributes:(可选)附件信息,也就是发生该日志事件时的相关对象属性,例如:操作系统版本,端口号,pid进程号等。 Tags:标签 Truncated :日志截断信息 Size:发生日志截断时,之前的日志文件大小。
日志等级相关
MongoDB将日志详细等级划分为0~5
0 是MongoDB日志的的默认级别,会包含 Informational 类信息
1~5 是调试级别,会记录客户端所有的完整请求
查询日志详细等级的命令。
db.getLogComponents()
修改日志等级的命令
db.setLogLevel() db.setLogLevel(<level>,<component>)
其中,level是等级,可以取值0~5,component是组件名称。可以取accesscontrol、command、control、ftdc、 geo、index、network、query、replication、recovery、sharding、storage、storage.journal、transaction、write等。
全局设置:
db.setLogLevel(1) { "was" : { "verbosity" : 0, "accessControl" : { "verbosity" : -1 }, …… db.getLogComponents() { "verbosity" : 1, "accessControl" : { "verbosity" : -1 }, "command" : { "verbosity" : -1 }, ……
设置某个具体组件:
db.setLogLevel(2,"command") { "was" : { "verbosity" : 1, "accessControl" : { "verbosity" : -1 }, "command" : { "verbosity" : -1 }, "control" : { "verbosity" : -1 }, …… db.getLogComponents() { "verbosity" : 1, "accessControl" : { "verbosity" : -1 }, "command" : { "verbosity" : 2 }, "control" : { "verbosity" : -1 }, ……
一次性设置多个组件的等级的日志
db.adminCommand({ setParameter: 1, logComponentVerbosity: { verbosity: 1, query: { verbosity: 2 }, storage: { verbosity: 2, journal: { verbosity: 1 } } } })
将日志等级设置到配置文件
systemlog: verbosity: 1 component: query: verbosity: 2 storage: verbosity: 2 journal: verbosity: 1
日志文件过大的处理方法
1.直接删除mongodb.log文件,需要停止服务,然后移走或者删除对应目录下的mongodb.log文件,然后再启动会生成一个新的mongodb.log日志文件
2.利用日志轮滚的方法,直接在mongodb的命令行里面输入以下命令进行清理。
use admin db.runCommand({logrotate:1})