签到成功

知道了

CNDBA社区CNDBA社区

MongoDB 4.4 日志格式 / 组件 / 等级设置 说明

2022-05-23 12:46 2586 0 原创 MongoDB
作者: dave

1 日志格式说明


在之前的博客,我们了解了MongoDB 中的几种日志:

MongoDB 4.4 中 journal 和 oplog 日志 说明
https://www.cndba.cn/dave/article/107979

对于MongoDB 4.4 之前的版本,log 日志格式如下:

<timestamp> <severity> <component> [<context>] <message>
2014-11-03T18:28:32.450-0500 I NETWORK [initandlisten] waiting for connections on port 27017

从MongoDB 4.4 开始,mongod/mongos 实例的输出日志格式变成了JSON格式。

{"t":{"$date":"2020-05-01T15:16:17.180+00:00"},"s":"I", "c":"NETWORK", "id":12345, "ctx":"listener", "msg":"Listening on","attr":{"address":"127.0.0.1"}}

这种格式对程序可能比较友好,但对DBA来说,并不那么友好,格式化后:

{
  "t": {
    "$date": "2020-05-01T15:16:17.180+00:00"
  },
  "s": "I",
  "c": "NETWORK",
  "id": 12345,
  "ctx": "listener",
  "msg": "Listening on",
  "attr": {
    "address": "127.0.0.1"
  }
}

相关格式的说明可以直接参考官方手册:

https://www.mongodb.com/docs/v4.2/reference/log-messages/
https://www.mongodb.com/docs/v5.0/reference/log-messages/index.html

具体格式如下:

{
  "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:发生日志截断时,之前的日志文件大小。

2 日志组件种类


在上节我们已经说明,JSON 输出的日志格式C代表日志的组件。 也可以通过MQL 进行查询。

[dave@www.cndba.cn_3 ~]# mongo_conn 27018
MongoDB shell version v5.0.8
shard1:SECONDARY> db.getLogComponents()
{
        "verbosity" : 0,
        "accessControl" : {
                "verbosity" : -1
        },
        "command" : {
                "verbosity" : -1
        },
        "control" : {
                "verbosity" : -1
        },
        "executor" : {
                "verbosity" : -1
        },
        "geo" : {
                "verbosity" : -1
        },
        "index" : {
                "verbosity" : -1
        },
        "network" : {
                "verbosity" : -1,
                "asio" : {
                        "verbosity" : -1
                },
                "bridge" : {
                        "verbosity" : -1
                },
                "connectionPool" : {
                        "verbosity" : -1
                }
        },
        "processHealth" : {
                "verbosity" : -1
        },
        "query" : {
                "verbosity" : -1
        },
        "replication" : {
                "verbosity" : -1,
                "election" : {
                        "verbosity" : -1
                },
                "heartbeats" : {
                        "verbosity" : -1
                },
                "initialSync" : {
                        "verbosity" : -1
                },
                "rollback" : {
                        "verbosity" : -1
                }
        },
        "sharding" : {
                "verbosity" : -1,
                "rangeDeleter" : {
                        "verbosity" : -1
                },
                "shardingCatalogRefresh" : {
                        "verbosity" : -1
                },
                "migration" : {
                        "verbosity" : -1
                },
                "reshard" : {
                        "verbosity" : -1
                },
                "migrationPerf" : {
                        "verbosity" : -1
                }
        },
        "storage" : {
                "verbosity" : -1,
                "recovery" : {
                        "verbosity" : -1
                },
                "journal" : {
                        "verbosity" : -1
                }
        },
        "write" : {
                "verbosity" : -1
        },
        "ftdc" : {
                "verbosity" : -1
        },
        "tracking" : {
                "verbosity" : -1
        },
        "transaction" : {
                "verbosity" : -1
        },
        "tenantMigration" : {
                "verbosity" : -1
        },
        "test" : {
                "verbosity" : -1
        }
}
shard1:SECONDARY>

各值的含义在官方手册里有说明:http://www.cndba.cn/dave/article/108020http://www.cndba.cn/dave/article/108020

https://www.mongodb.com/docs/manual/reference/log-messages/#componentshttp://www.cndba.cn/dave/article/108020

每个日志组件都有一个verbosity 选项:

https://www.mongodb.com/docs/manual/reference/configuration-options/#mongodb-setting-systemLog.verbosityhttp://www.cndba.cn/dave/article/108020

结果中的最外层的verbosity值是0。相应的取值还有1~5,数字越大,表示日志的详细程度越高,当这个值取到5的时候,mongodb将会输出所有的调试debug日志,这个日志量将会非常大,一般情况下,默认的值是0.

每个子项目里面也有一个verbosity,它代表的是当前的组件的日志等级,它的取值和上面的verbosity取值一样,可以取0,1,2,3,4,5,不同的是,它还可以取值为-1,代表继承父日志级别。

3 日志等级设置


上节我们看到日志有很多的组件,有时为了收集某个组件的详细信息,可以对单个组件的日志级别进行调整。http://www.cndba.cn/dave/article/108020

3.1 方法一:db.setLogLevel()

它的常用方法如下:

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等。

全局设置:

shard1:PRIMARY> db.setLogLevel(1)
{
        "was" : {
                "verbosity" : 0,
                "accessControl" : {
                        "verbosity" : -1
                },
……
shard1:PRIMARY> db.getLogComponents()
{
        "verbosity" : 1,
        "accessControl" : {
                "verbosity" : -1
        },
        "command" : {
                "verbosity" : -1
        },
……

设置某个具体组件:

shard1:PRIMARY> db.setLogLevel(2,"command")
{
        "was" : {
                "verbosity" : 1,
                "accessControl" : {
                        "verbosity" : -1
                },
                "command" : {
                        "verbosity" : -1
                },
                "control" : {
                        "verbosity" : -1
                },
……
shard1:PRIMARY> db.getLogComponents()
{
        "verbosity" : 1,
        "accessControl" : {
                "verbosity" : -1
        },
        "command" : {
                "verbosity" : 2
        },
        "control" : {
                "verbosity" : -1
        },
……

3.2 方法二:执行mongodb命令

setLogLevel命令只能设置单个组件的日志等级,如果想要一次性设置多个组件的日志等级,可以使用下面的方法:

shard1:PRIMARY> db.adminCommand( {
...    setParameter: 1,
...    logComponentVerbosity: {
...       verbosity: 1,
...       query: { verbosity: 2 },
...       storage: {
...          verbosity: 2,
...          journal: {
...             verbosity: 1
...          }
...       }
...    }
... } )

3.3 方法三:写入配置文件

直接在配置文件中写入:

systemlog:
    verbosity: 1
    component:
        query:
            verbosity: 2
        storage:
            verbosity: 2
            journal:
                verbosity: 1

4 日志文件过大的处理方法


有时候,长时间没有清理日志,日志的数据量会变的很大,这个时候我们可以通过两种方法来对日志进行滚动:http://www.cndba.cn/dave/article/108020

4.1 方法一:move

直接关闭mongodb服务,然后把老的日志文件给mv掉,启动mongodb服务,此时会生成一个新的mongodb.log的日志;

这里要注意,如果不停实例,直接在物理层move 掉,那么不会生产新的日志文件。http://www.cndba.cn/dave/article/108020http://www.cndba.cn/dave/article/108020http://www.cndba.cn/dave/article/108020

4.2 方法二:执行logrotate

利用日志轮滚的方法,直接在mongodb的命令行里面输入:

use admin  //切换到admin数据库
db.runCommand({logrotate:1})

可以将该命令放到OS的计划任务里执行。

Log Rotation 的配置参考:

MongoDB 4.4 启用 Log Rotation 功能
https://www.cndba.cn/dave/article/108011

http://www.cndba.cn/dave/article/108020

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2261
    原创
  • 3
    翻译
  • 578
    转载
  • 191
    评论
  • 访问:7965629次
  • 积分:4346
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ