文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

详解MongoDB中的日志模块

2024-04-02 19:55

关注

    今天简单研究了一下MongoDB里面的日志模块,写篇文章记录下。

01 MongoDB日志组件种类及日志等级

    每种数据库都有自己的日志模块,MongoDB也不例外,通常情况下,一个数据库的日志中,记录的是数据库的连接信息、存储信息、网络信息、索引信息以及查询信息等。从MongoDB3.0版本开始,MongoDB在日志中引入了日志等级和日志组件的概念,作为DBA来讲,关注的最多的应该是慢查询日志和连接日志。

    在MongoDB中,我们可以通过下面的命令,来获取所有的日志组件种类和对应的日志等级:

db.getLogComponents()


PRIMARY> 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
                }
        },
        "query" : {
                "verbosity" : -1
        },
        "replication" : {
                "verbosity" : -1
        },
        "sharding" : {
                "verbosity" : -1
        },
        "storage" : {
                "verbosity" : -1,
                "journal" : {
                        "verbosity" : -1
                }
        },
        "write" : {
                "verbosity" : -1
        },
        "ftdc" : {
                "verbosity" : -1
        }
}

     这里,我需要对执行的结果做个说明。

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

     你可以留意到,这个执行结果中,包含很多子项目,例如command,control,executer,query,replication,sharding等,这些子项目也叫作日志组件,它代表这种类型的日志,例如sharding代表分片相关的日志。每个子项目里面也有一个verbosity,它代表的是当前的组件的日志等级,它的取值和上面的verbosity取值一样,可以取0,1,2,3,4,5,不同的是,它还可以取值为-1,代表继承父日志级别。

     在上面的例子中:

1、storage就是storage.joural的父级目录。

2、storage.journal的日志等级是-1,代表它继承storage的日志级别,

3、storage的日志级别也是-1,代表它继承全局的日志级别,

4、全局的日志级别是0,这就意味着:storage和storage.journal的日志级别也都是0

02 设置某个日志组件的日志级别

      为了获取更好的可读性,有时候会对单个日志组件的日志级别输出的更清晰一点,这种情况下,可以通过下面的命令来设置某个日志组件的日志等级:

方法一: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等。

方法二:执行MongoDB命令

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


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

上面例子中的方法,

将全局的日志等级设置成1;

将query的日志等级设置成2;

将storage的日志等级设置成2;

将storage.journal的日志等级设置成1;

方法三:写入配置文件

执行这个命令,等同于在配置文件中写入:


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

方法四:启动的时候,设置参数

除此之外,我们也可以在mongod启动的时候,通过命令设置某个日志组件的日志等级,如下:


mongod --setParameter "logComponentVerbosity={command: 3}"

03 日志数据量很大的处理办法

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

方法一:

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

很显然,这个方法不够优雅。

方法二:

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


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

这种方法采用了命令来切换日志文件,不需要关闭mongodb服务,是一个比较推荐的做法。

当然,如果需要人手工的定期执行这个命令,好像也不够优雅,所以可以配合crontab去做这个事情,每天定时执行一次,达到日志文件轮滚的目的。

以上就是详解MongoDB中的日志模块的详细内容,更多关于MongoDB 日志模块的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯