12-Mongodb日志

日志

一、日志分类

  • MongoDB中主要有四种日志。分别是系统日志、Journal日志、oplog主从日志、慢查询日志等。这些日志记录着Mongodb数据库不同方便的踪迹。
日志类别作用配置方式默认
系统日志记录Mongodb启动和停止等操作-logpath配置指定
Journal日志通过预写入的redo日志为mongodb增加了额外的可靠性保障-journal 开启64位的机器上,2.0以上版本默认是开启
oplog主从日志主从同步-oplogSize=1024 单位是M副本集和集群模式才有
慢查询日志记录慢查询–profile=1 --slowms=5默认关闭

二、系统日志

2.1 作用

  • 通常用于查询mongodb本身的状态,比如启动过程,启动失败定位日志等。

2.2 配置

  • mongod -logpath=’/data/db/log/mongodb.log’ -logappend ,也可以参考最后给出的配置文件的配置方式
 --logpath arg    log file to send write to instead of stdout - has to be a file, not directory

2.3 示例

  • 下面简单的日志展示了启动时的配置信息和mongodb版本,环境等。
2019-07-17T14:59:07.406+0800 I CONTROL  [main] ***** SERVER RESTARTED *****
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] MongoDB starting : pid=17472 port=27017 dbpath=/home/intellif/mongodbdata/data 64-bit host=segment2
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] db version v3.6.10-rc0
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] git version: 0a076417d1d7fba3632b73349a1fd29a83e68816
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] modules: none
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] build environment:
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten]     distmod: ubuntu1604
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten]     distarch: x86_64
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2019-07-17T14:59:07.418+0800 I CONTROL  [initandlisten] options: { config: "./mongodb.conf", net: { bindIp: "192.168.13.53", port: 27017 }, operationProfiling: { mode: "slowOp", slowOpSampleRate: 0.5, slowOpThresholdMs: 10 }, processManagement: { fork: true }, storage: { dbPath: "/home/intellif/mongodbdata/data", directoryPerDB: true, journal: { enabled: true }, wiredTiger: { collectionConfig: { blockCompressor: "zlib" }, engineConfig: { cacheSizeGB: 10.0, directoryForIndexes: true }, indexConfig: { prefixCompression: true } } }, systemLog: { destination: "file", logAppend: true, path: "/home/intellif/mongodbdata/log/mongoSys.log" } }

三、Journal日志

3.1 作用

  • 故障恢复。 Journal日志通过预写入的redo日志为mongodb增加了额外的可靠性保障,写入Journal日志后定期提交(默认100ms)操作真实的数据。
  • 提高写入的性能。

3.2 配置

  • 启用:–journal
  • 关闭:–nojournal
  • 配置文件启用:storage.journal.enabled= true
  • storage.journal.commitIntervalMs,mongodb刷新到journal文件间隔
  • 如果有Journal日志日志,默认保存在数据路径下面的journal文件夹
--journal                             enable journaling
--nojournal                           disable journaling (journaling is on by  default for 64 bit)

storage.journal.enabled
Type: boolean
Default: true on 64-bit systems, false on 32-bit systems


storage.journal.commitIntervalMs
Type: number
Default: 100 or 30
New in version 3.2.
The maximum amount of time in milliseconds that the mongod process allows between journal operations. Values can range from 1 to 500 milliseconds. Lower values increase the durability of the journal, at the expense of disk performance. The default journal commit interval is 100 milliseconds.
On MMAPv1, if the journal is on a different block device (e.g. physical volume, RAID device, or LVM volume) than the data files, the default journal commit interval is 30 milliseconds. Additionally, on MMAPv1, when a write operation with j:true is pending, mongod will reduce commitIntervalMs to a third of the set value.
On WiredTiger, the default journal commit interval is 100 milliseconds. Additionally, a write with j:true will cause an immediate sync of the journal.
The storage.journal.commitIntervalMs setting is available only for mongod.
Not available for mongod instances that use the in-memory storage engine.

--smallfiles                          use a smaller default file size//减小journal文件大小

3.3 小结

  • Mongodb首次启动前需要创建journal文件,可能需要耗费一点时间,
  • 如果数据文件和journal文件在同一磁盘卷,那么Mongodb默认每100ms向journal文件flush一次数据,如果不在,这个默认值是30ms。不过该值可以修改,越低则刷新频率越高,磁盘开销越大。
  • 更多关于journal日志原理可以参考[3]和[4]

四、Oplog主从日志

4.1 作用

  • Oplog是local库下的一个固定集合,Secondary就是通过查看Primary的oplog集合来进行数据复制同步的。每个节点都有oplog记录从主节点复制过来的信息,这样每个成员都可以作为同步源给其他节点。Oplog 可以说是Mongodb Replication的纽带了。因此该配置只在
    副本集模式或分配模式有,单点模式没有。

4.2 配置

  • 官方建议该配置为磁盘的5%,配置形式:mongod -oplogSize=1024 (MB)
Replication options:
  --oplogSize arg size to use (in MB) for replication op  log. default is 5% of disk space (i.e. large is good)

4.3 原理

  • 关于Oplog,参考文章[8]有详细介绍,非常好且全面,建议阅读。

五、慢查询日志

5.1 作用

  • 开启慢查询,便于分析慢查询语句。在开启了慢查询之后,数据库下会多一个名为system.profile的集合,

5.2 配置

  • mongod --slows 2000 --profile=1,
--slowms arg (=100)                   value of slow for profile and console log
--slowOpSampleRate arg (=1)           fraction of slow ops to include in the profile and console log
--profile arg                         0=off 1=slow, 2=all
  • slowms参数指定慢查询阈值,默认100ms
  • profile参数指定是否开启慢查询,0表示关闭,1表示开启且使用slowms指定的阈值记录慢查询,2表示收集全部数据
  • slowOpSampleRate参数表示在loglevel为0时(默认是0),以指定频率将慢速操作记录到诊断日志中,值是0-1.0,默认1.0。但是该配置堆Secondary成员无效,Secondary会记录全部超过阈值的oplog条目
  • 也可以参考后面的配置文件的形式,配置后,在mongodb中可以查询配置:
db.getProfilingStatus()
{ "was" : 1, "slowms" : 10, "sampleRate" : 0.5 }
db.getProfilingLevel() //查看级别
db.setProfilingLevel(2) //设置级别
db.setProfilingLevel(1,200) //设置级别和阈值

5.3 使用

  • 返回最近的10条记录:db.system.profile.find().limit(10).sort({ ts : -1 }).pretty()
  • #返回特定集合:db.system.profile.find( { ns : ‘mzp.info’ } ).pretty()
  • #返回大于5毫秒慢的操作:db.system.profile.find({ millis : { $gt : 5 } } ).pretty()
  • 慢查询日志的记录集合是system.profile,这是一个capped类型的集合,读写效率更高,有一些特有的特点,可以使用db.system.profile.stats()查看集合状态。请阅读参考文章:[7]。我自己也测试过,当system.profile集合大小满了之后,再次有慢查询记录进来,会按照FIFO的方式,保存后面进来的慢查询记录,默认好像是1MB的大小。

在这里插入图片描述

六、简单配置示例

systemLog:
  destination: file
  path: /home/intellif/mongodbdata/log/mongoSys.log
  logAppend: true
storage:
  journal:
    enabled: true
  dbPath: /home/intellif/mongodbdata/data
  directoryPerDB: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 10.0
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: zlib
    indexConfig:
      prefixCompression: true
net:
  bindIp: 192.168.13.53
  port: 27017
processManagement:
  fork: true
operationProfiling:
   mode: slowOp
   slowOpThresholdMs: 10
   slowOpSampleRate: 0.5

七、参考

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值