• 售前

  • 售后

热门帖子
入门百科

详解MongoDB中的日志模块

[复制链接]
六翼天使494 显示全部楼层 发表于 2021-8-14 14:48:43 |阅读模式 打印 上一主题 下一主题
目次


  • 01 MongoDB日志组件种类及日志品级
  • 02 设置某个日志组件的日志级别

    • 方法一:db.setLogLevel()
    • 方法二:实行MongoDB下令
    • 方法三:写入设置文件
    • 方法四:启动的时候,设置参数

  • 03 日志数据量很大的处置处罚办法
    本日简朴研究了一下MongoDB内里的日志模块,写篇文章记录下。

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

    每种数据库都有自己的日志模块,MongoDB也不例外,通常环境下,一个数据库的日志中,记录的是数据库的连接信息、存储信息、网络信息、索引信息以及查询信息等。从MongoDB3.0版本开始,MongoDB在日志中引入了日志品级和日志组件的概念,作为DBA来讲,关注的最多的应该是慢查询日志和连接日志。
    在MongoDB中,我们可以通过下面的下令,来获取全部的日志组件种类和对应的日志品级:
db.getLogComponents()
  1. PRIMARY> db.getLogComponents()
  2. {
  3.         "verbosity" : 0,
  4.         "accessControl" : {
  5.                 "verbosity" : -1
  6.         },
  7.         "command" : {
  8.                 "verbosity" : -1
  9.         },
  10.         "control" : {
  11.                 "verbosity" : -1
  12.         },
  13.         "executor" : {
  14.                 "verbosity" : -1
  15.         },
  16.         "geo" : {
  17.                 "verbosity" : -1
  18.         },
  19.         "index" : {
  20.                 "verbosity" : -1
  21.         },
  22.         "network" : {
  23.                 "verbosity" : -1,
  24.                 "asio" : {
  25.                         "verbosity" : -1
  26.                 },
  27.                 "bridge" : {
  28.                         "verbosity" : -1
  29.                 }
  30.         },
  31.         "query" : {
  32.                 "verbosity" : -1
  33.         },
  34.         "replication" : {
  35.                 "verbosity" : -1
  36.         },
  37.         "sharding" : {
  38.                 "verbosity" : -1
  39.         },
  40.         "storage" : {
  41.                 "verbosity" : -1,
  42.                 "journal" : {
  43.                         "verbosity" : -1
  44.                 }
  45.         },
  46.         "write" : {
  47.                 "verbosity" : -1
  48.         },
  49.         "ftdc" : {
  50.                 "verbosity" : -1
  51.         }
  52. }
复制代码
    这里,我需要对实行的结果做个阐明。
     首先来看返回结果中的总的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下令

这个下令只能设置单个组件的日志品级,假如想要一次性设置多个组件的日志品级,可以使用下面的方法:
  1. db.adminCommand( {
  2.    setParameter: 1,
  3.    logComponentVerbosity: {
  4.       verbosity: 1,
  5.       query: { verbosity: 2 },
  6.       storage: {
  7.          verbosity: 2,
  8.          journal: {
  9.             verbosity: 1
  10.          }
  11.       }
  12.    }
  13. } )
复制代码
上面例子中的方法,
将全局的日志品级设置成1;
将query的日志品级设置成2;
将storage的日志品级设置成2;
将storage.journal的日志品级设置成1;

方法三:写入设置文件

实行这个下令,等同于在设置文件中写入:
  1. systemLog:
  2.     verbosity: 1
  3.     component:
  4.         query:
  5.             verbosity: 2
  6.         storage:
  7.             verbosity: 2
  8.             journal:
  9.                 verbosity: 1
复制代码
方法四:启动的时候,设置参数

除此之外,我们也可以在mongod启动的时候,通过下令设置某个日志组件的日志品级,如下:
  1. mongod --setParameter "logComponentVerbosity={command: 3}"
复制代码
03 日志数据量很大的处置处罚办法

    偶尔候,长时间没有整理日志,日志的数据量会变的很大,这个时候我们可以通过两种方法来对日志举行滚动:
方法一:
直接关闭MongoDB服务,然后把老的日志文件给mv掉,启动MongoDB服务,此时会生成一个新的mongodb.log的日志;
很显然,这个方法不敷优雅。
方法二:
利用日志轮滚的方法,直接在MongoDB的下令行内里输入:
  1. use admin  //切换到admin数据库
  2. db.runCommand({logRotate:1})
复制代码
这种方法采用了下令来切换日志文件,不需要关闭mongodb服务,是一个比力推荐的做法。
固然,假如需要人手工的定期实行这个下令,好像也不敷优雅,所以可以共同crontab去做这个事情,每天定时实行一次,达到日志文件轮滚的目标。
以上就是详解MongoDB中的日志模块的详细内容,更多关于MongoDB 日志模块的资料请关注草根技能分享其它相干文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作