文章目录
- 日志
- 一、日志分类
- 二、系统日志
- 2.1 作用
- 2.2 配置
- 2.3 示例
- 三、Journal日志
- 3.1 作用
- 3.2 配置
- 3.3 小结
- 四、Oplog主从日志
- 4.1 作用
- 4.2 配置
- 4.3 原理
- 五、慢查询日志
- 5.1 作用
- 5.2 配置
- 5.3 使用
- 六、简单配置示例
- 七、参考
日志
一、日志分类
- 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
七、参考
- [1] MongoDB的日志系统
- [2] Configuration File Options
- [3] mongodb中journal工作原理
- [4] Mongodb持久化–journal探究(一)
- [5] Mongodb持久化–journal探究(二)
- [6] mongodb Profiling 通过慢查询日志分析查询慢的原因 相应优化
- [7] MongoDB—Profile修改大小
- [8] MongoDB oplog详解