MongoDB日志以及配置说明

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})


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/889.html

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。