MongoDB的日志可以完成的记录mongodb的健康状态和运行情况,有助于我们在出现故障的时候对MongoDB的故障进行有效的分析。
在MongoDB4.4以前和以后的版本日志记录的格式是不一样的,4.4以前的格式是
01.<timestamp> <severity> <component> [<context>] <message>
例如:
01.2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017
从mongodb4.4开始日志格式就转化为标准的json格式
格式如下:
01.{"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"}}}
具体格式如下:
01.{02. "t": <Datetime>, // timestamp03. "s": <String>, // severity04. "c": <String>, // component05. "ctx": <String>, // context06. "id": <Integer>, // unique identifier07. "msg": <String>, // message body08. "attr": <Object> // additional attributes (optional)09. "tags": <Array of strings> // tags (optional)10. "truncated": <Object> // truncation info (if truncated)11. "size": <Integer> // original size of entry (if truncated)12.}
相关的key说明如下
01.Timestamp:时间戳,日志事件发生的时间02.Serverity:日志信息等级03. F:Fatal04. E:Error05. W:Warning06. I:Information07. D1-D5:Debug级别,从4.2开始支持指定Debug级别。08.Compontents:日志事件的分类09. ACCESS:登入访问相关的信息,例如登录验证情况。10. COMMAND:数据库执行命令相关信息,例如,查询。11. CONTROL:记录控制管理相关的信息,例如数据库初始化。12. ELECTION:副本集选举相关信息13. FTDC:(full-time diagnostic data ) 全程检测数据信息,例如Server的状态统计信息。14. GEO:解析地理空间模型相关信息。15. INDEX:索引相关信息,例如索引的创建过程信息。16. INITSYNC:初始化同步操作相关信息17. JOURNAL:日志相关的信息18. NETWORK:网络相关信息,例如网络连接信息。19. QUERY:查询相关信息,例如查询计划信息。20. REPL:副本集相关信息,包括:初始化同步,心疼,状态,回滚等信息,包括ELECTION,INITSYSNC,REPL_HB和ROLLBACK。21. REPL_HB:副本集心跳相关信息22. ROLLBACK:回滚操作相关信息23. SHARDING:分片相关信息,例如mongos的启动信息24. STORAGE:存储相关信息,例如将 storage 层的数据刷入磁盘的信息。25. TXN:多文档事务相关信息,4.0.2新增26. RECOVERY:还原活动相关的信息27. WRITE:写操作相关的信息,例如更新(update)的命令。28.Context:产生该日志事件的线程名称29.id:日志语句的独一无二的编号30.Message:日志事件详细信息31.Attributes:(可选)附件信息,也就是发生该日志事件时的相关对象属性,例如:操作系统版本,端口号,pid进程号等。32.Tags:标签33.Truncated :日志截断信息34.Size:发生日志截断时,之前的日志文件大小。
日志等级相关
MongoDB将日志详细等级划分为0~5
0 是MongoDB日志的的默认级别,会包含 Informational 类信息
1~5 是调试级别,会记录客户端所有的完整请求
查询日志详细等级的命令。
01.db.getLogComponents()
修改日志等级的命令
01.db.setLogLevel()02.db.setLogLevel(<level>,<component>)
其中,level是等级,可以取值0~5,component是组件名称。可以取accesscontrol、command、control、ftdc、 geo、index、network、query、replication、recovery、sharding、storage、storage.journal、transaction、write等。
全局设置:
01.db.setLogLevel(1)02.{03. "was" : {04. "verbosity" : 0,05. "accessControl" : {06. "verbosity" : -107. },08.……09.db.getLogComponents()10.{11. "verbosity" : 1,12. "accessControl" : {13. "verbosity" : -114. },15. "command" : {16. "verbosity" : -117. },18.……
设置某个具体组件:
01.db.setLogLevel(2,"command")02.{03. "was" : {04. "verbosity" : 1,05. "accessControl" : {06. "verbosity" : -107. },08. "command" : {09. "verbosity" : -110. },11. "control" : {12. "verbosity" : -113. },14.……15.db.getLogComponents()16.{17. "verbosity" : 1,18. "accessControl" : {19. "verbosity" : -120. },21. "command" : {22. "verbosity" : 223. },24. "control" : {25. "verbosity" : -126. },27.……
一次性设置多个组件的等级的日志
01.db.adminCommand({02. setParameter: 1,03. logComponentVerbosity: {04. verbosity: 1,05. query: {06. verbosity: 207. },08. storage: {09. verbosity: 2,10. journal: {11. verbosity: 112. }13. }14. }15.})
将日志等级设置到配置文件
01.systemlog:02. verbosity: 103. component:04. query:05. verbosity: 206. storage:07. verbosity: 208. journal:09. verbosity: 1
日志文件过大的处理方法
1.直接删除mongodb.log文件,需要停止服务,然后移走或者删除对应目录下的mongodb.log文件,然后再启动会生成一个新的mongodb.log日志文件
2.利用日志轮滚的方法,直接在mongodb的命令行里面输入以下命令进行清理。
01.use admin02.db.runCommand({logrotate:1})
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/886
评论列表