MongoDB
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。
Cloud Insight 监控 MongoDB 操作情况,可视化 MongoDB 性能状况。
性能指标
Cloud Insight 采集 MongoDB 以下性能指标:
指标 | 单位 | 具体含义 |
---|---|---|
mongodb.asserts.msgps | assertions/second | 每秒钟提出的消息断言(message assertions)数量 |
mongodb.asserts.regularps | assertions/second | 每秒钟提出的常规断言(regular assertions)数量 |
mongodb.asserts.rolloversps | assertions/second | 计数器 roll over 的次数/秒,计数器每 2^30 个断言(assertions)就会清零 |
mongodb.asserts.userps | assertions/second | 每秒钟提出的用户断言(user assertions)数量 |
mongodb.asserts.warningps | assertions/second | 每秒钟提出的警告(warnings)数量 |
mongodb.backgroundflushing.average_ms | milliseconds | 每次 flush 到磁盘的平均时间 |
mongodb.backgroundflushing.flushesps | flushes/second | 数据库将所有写入 flush 到磁盘的次数 |
mongodb.backgroundflushing.last_ms | milliseconds | 最后一次 flush 操作完成所花费的时间 |
mongodb.backgroundflushing.total_ms | milliseconds | 'mongod'进程将数据写入磁盘(i.e. flushing)的总时间 |
mongodb.connections.available | connections | 数据库可以提供的未使用的可用传入连接数(incoming connections) |
mongodb.connections.current | connections | 从客户端到数据库服务器的连接数 |
mongodb.cursors.timedout | cursors | 自服务器进程启动以来超时的 cursors 总数 |
mongodb.cursors.totalopen | cursors | MongoDB 为客户端维护的 cursors 数量 |
mongodb.dur.commits | transactions | 在上一个日志组(journal group)提交间隔期间写入日志的事务(transactions)数 |
mongodb.dur.commitsinwritelock | commits | 保持写入锁时发生的提交数量 |
mongodb.dur.compression | fractions | 写入日志(journal)的数据的压缩比(compression ratio) |
mongodb.dur.earlycommits | commits | MongoDB 在计划日记组(scheduled journal group)提交间隔之前请求提交的次数 |
mongodb.dur.journaledmb | mebibytes | 在最后一次日记组提交时间间隔(journal group commit interval)中写入的数据量 |
mongodb.dur.timems.commits | milliseconds | 提交所花费的时间 |
mongodb.dur.timems.commitsinwritelock | milliseconds | 写锁时发生的提交所花费的时间 |
mongodb.dur.timems.dt | milliseconds | MongoDB 收集 dur.timeMS 数据花费的时间 |
mongodb.dur.timems.preplogbuffer | milliseconds | 准备写入日志所花费的时间 |
mongodb.dur.timems.remapprivateview | milliseconds | 重映射 copy-on-write 内存映射视图(mapped views)所花费的时间 |
mongodb.dur.timems.writetodatafiles | milliseconds | 在日志记录(journaling)后写入数据文件所花费的时间 |
mongodb.dur.timems.writetojournal | milliseconds | 写入日志的时间 |
mongodb.dur.writetodatafilesmb | mebibytes | 在上一个日志组提交间隔(journal group commit interval)期间从日志写入数据文件的数据量 |
mongodb.extra_info.page_faultsps | faults/second | 每秒钟需要磁盘操作的页(page)故障数 |
mongodb.globallock.activeclients.readers | connections | 执行读取操作的活动客户端连接的计数 |
mongodb.globallock.activeclients.total | connections | 连接到数据库的活动客户端的总数 |
mongodb.globallock.activeclients.writers | connections | 执行写入操作的活动客户端连接的计数 |
mongodb.globallock.currentqueue.readers | operations | 当前在队列中等待读锁(read lock)的操作数 |
mongodb.globallock.currentqueue.total | operations | 队列中等待锁的操作总数 |
mongodb.globallock.currentqueue.writers | operations | 当前在队列中等待写锁的操作数 |
mongodb.globallock.locktime | milliseconds | 全局锁(globalLock)从数据库最近一次启动到现在保持的时长 |
mongodb.globallock.ratio | fractions | 全局锁(globalLock)保持的时间占比 |
mongodb.globallock.totaltime | microseconds | 全局锁(globalLock)从数据库上次启动并被其创建以来到现在保持的时长 |
mongodb.indexcounters.accessesps | events/second | 操作(operations)每秒访问索引的次数 |
mongodb.indexcounters.hitsps | hits/second | 每秒钟某个索引被访问并且 mongodb 能够从内存中返回其索引值的次数 |
mongodb.indexcounters.missesps | misses/second | 每秒钟操作尝试访问不在内存中的索引的次数 |
mongodb.indexcounters.missratio | fractions | 索引命中与未命中的比率 |
mongodb.indexcounters.resetsps | events/second | 每秒重置索引计数器的次数 |
mongodb.locks.collection.acquirecount.exclusiveps | locks/second | 在 Exclusive (X) 模式下获取集合锁类型(collection lock type)的次数 |
mongodb.locks.collection.acquirecount.intent_exclusiveps | locks/second | 在 Intent Exclusive (IX) 模式下获取集合锁类型(collection lock type)的次数 |
mongodb.locks.collection.acquirecount.intent_sharedps | locks/second | 在 Intent Shared (IS) 模式下获取集合锁类型(collection lock type)的次数 |
mongodb.locks.collection.acquirecount.sharedps | locks/second | 在 Shared (S) 模式下获取集合锁类型(collection lock type)的次数 |
mongodb.locks.collection.acquirewaitcount.exclusiveps | waits/second | 在 Exclusive(X)模式中,因为锁保持在冲突模式而使获取集合锁类型(collection lock type)需要等待的次数 |
mongodb.locks.collection.acquirewaitcount.sharedps | waits/second | 在 Shared (S) 模式中,因为锁保持在冲突模式而使获取集合锁类型(collection lock type)需要等待的次数 |
mongodb.locks.collection.timeacquiringmicros.exclusiveps | fractions | 在 Exclusive (X) 模式下等待集合锁类型(collection lock type)采集的时间 |
mongodb.locks.collection.timeacquiringmicros.sharedps | fractions | 在 Shared (S) 模式下等待集合锁类型(collection lock type)采集的时间 |
mongodb.locks.database.acquirecount.exclusiveps | locks/second | 在 Exclusive (X) 模式下获取数据库锁类型(database lock type)的次数 |
mongodb.locks.database.acquirecount.intent_exclusiveps | locks/second | 在 Intent Exclusive (IX) 模式下获取数据库锁类型(database lock type)的次数 |
mongodb.locks.database.acquirecount.intent_sharedps | locks/second | 在 Intent Shared (IS) 模式下获取数据库锁类型(database lock type)的次数 |
mongodb.locks.database.acquirecount.sharedps | locks/second | 在 Shared (S) 模式下获取数据库锁类型(database lock type)的次数 |
mongodb.locks.database.acquirewaitcount.exclusiveps | waits/second | 在 Exclusive(X)模式中,因为锁保持在冲突模式而使获取数据库锁类型(database lock type)需要等待的次数 |
mongodb.locks.database.acquirewaitcount.intent_exclusiveps | waits/second | 在 Intent Exclusive (IX) 模式中,因为锁保持在冲突模式而使获取数据库锁类型(database lock type)需要等待的次数 |
mongodb.locks.database.acquirewaitcount.intent_sharedps | waits/second | 在 Intent Shared (IS) 模式中,因为锁保持在冲突模式而使获取数据库锁类型(database lock type)需要等待的次数 |
mongodb.locks.database.acquirewaitcount.sharedps | waits/second | 在 Shared (S) 模式中,因为锁保持在冲突模式而使获取数据库锁类型(database lock type)需要等待的次数 |
mongodb.locks.database.timeacquiringmicros.exclusiveps | fractions | 在 Exclusive (X) 模式下等待数据库锁类型(database lock type)采集的时间 |
mongodb.locks.database.timeacquiringmicros.intent_exclusiveps | fractions | 在 Intent Exclusive (IX) 模式下等待数据库锁类型(database lock type)采集的时间 |
mongodb.locks.database.timeacquiringmicros.intent_sharedps | fractions | 在 Intent Shared (IS) 模式下等待数据库锁类型(database lock type)采集的时间 |
mongodb.locks.database.timeacquiringmicros.sharedps | fractions | 在 Shared (S) 模式下等待数据库锁类型(database lock type)采集的时间 |
mongodb.locks.global.acquirecount.exclusiveps | locks/second | 在 Exclusive (X) 模式下获取全局锁类型(global lock type)的次数 |
mongodb.locks.global.acquirecount.intent_exclusiveps | locks/second | 在 Intent Exclusive (IX) 模式下获取全局锁类型(global lock type)的次数 |
mongodb.locks.global.acquirecount.intent_sharedps | locks/second | 在 Intent Shared (IS) 模式下获取全局锁类型(global lock type)的次数 |
mongodb.locks.global.acquirecount.sharedps | locks/second | 在 Shared (S) 模式下获取全局锁类型(global lock type)的次数 |
mongodb.locks.global.acquirewaitcount.exclusiveps | waits/second | 在 Exclusive(X)模式中,因为锁保持在冲突模式而使获取全局锁类型(global lock type)需要等待的次数 |
mongodb.locks.global.acquirewaitcount.intent_exclusiveps | waits/second | 在 Intent Exclusive (IX) 模式中,因为锁保持在冲突模式而使获取全局锁类型(global lock type)需要等待的次数 |
mongodb.locks.global.acquirewaitcount.intent_sharedps | waits/second | 在 Intent Shared (IS) 模式中,因为锁保持在冲突模式而使获取全局锁类型(global lock type)需要等待的次数 |
mongodb.locks.global.acquirewaitcount.sharedps | waits/second | 在 Shared (S) 模式中,因为锁保持在冲突模式而使获取全局锁类型(global lock type)需要等待的次数 |
mongodb.locks.global.timeacquiringmicros.exclusiveps | fractions | 在 Exclusive (X) 模式下等待全局锁类型(global lock type)采集的时间 |
mongodb.locks.global.timeacquiringmicros.intent_exclusiveps | fractions | 在 Intent Exclusive (IX) 模式下等待全局锁类型(global lock type)采集的时间 |
mongodb.locks.global.timeacquiringmicros.intent_sharedps | fractions | 在 Intent Shared (IS) 模式下等待全局锁类型(global lock type)采集的时间 |
mongodb.locks.global.timeacquiringmicros.sharedps | fractions | 在 Shared (S) 模式下等待全局锁类型(global lock type)采集的时间 |
mongodb.locks.metadata.acquirecount.exclusiveps | locks/second | 在 Exclusive (X) 模式下获取元数据锁类型(metadata lock type)的次数 |
mongodb.locks.metadata.acquirecount.sharedps | locks/second | 在 Shared (S) 模式下获取元数据锁类型(metadata lock type)的次数 |
mongodb.locks.mmapv1journal.acquirecount.intent_exclusiveps | locks/second | 在 Intent Exclusive (IX) 模式下获取 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)的次数 |
mongodb.locks.mmapv1journal.acquirecount.intent_sharedps | locks/second | 在 Intent Shared (IS) 模式下获取 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)的次数 |
mongodb.locks.mmapv1journal.acquirewaitcount.intent_exclusiveps | waits/second | 在 Intent Exclusive (IX) 模式中,因为锁保持在冲突模式而使获取 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)需要等待的次数 |
mongodb.locks.mmapv1journal.acquirewaitcount.intent_sharedps | waits/second | 在 Intent Shared (IS) 模式中,因为锁保持在冲突模式而使获取 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)需要等待的次数 |
mongodb.locks.mmapv1journal.timeacquiringmicros.intent_exclusiveps | fractions | 在 Intent Exclusive (IX) 模式下等待 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)采集的时间 |
mongodb.locks.mmapv1journal.timeacquiringmicros.intent_sharedps | fractions | 在 Intent Shared (IS) 模式下等待 MMAPv1 存储引擎锁类型(MMAPv1 storage engine lock type)采集的时间 |
mongodb.locks.oplog.acquirecount.intent_exclusiveps | locks/second | 在 Intent Exclusive (IX) 模式下获取 oplog 锁类型(oplog lock type)的次数 |
mongodb.locks.oplog.acquirecount.sharedps | locks/second | 在 Shared (S) 模式下获取 oplog 锁类型(oplog lock type)的次数 |
mongodb.locks.oplog.acquirewaitcount.intent_exclusiveps | waits/second | 在 Intent Exclusive (IX) 模式中,因为锁保持在冲突模式而使获取 oplog 锁类型(oplog lock type)需要等待的次数 |
mongodb.locks.oplog.acquirewaitcount.sharedps | waits/second | 在 Shared (S) 模式中,因为锁保持在冲突模式而使获取 oplog 锁类型(oplog lock type)需要等待的次数 |
mongodb.locks.oplog.timeacquiringmicros.intent_exclusiveps | fractions | 在 Intent Exclusive (IX) 模式下等待 oplog 锁类型(oplog lock type)采集的时间 |
mongodb.locks.oplog.timeacquiringmicros.sharedps | fractions | Shared (S) 模式下等待 oplog 锁类型(oplog lock type)采集的时间 |
mongodb.mem.mapped | mebibytes | 数据库映射的内存总数 |
mongodb.mem.mappedwithjournal | mebibytes | 映射内存量,包括用于日志记录的内存 |
mongodb.mem.resident | mebibytes | 数据库进程在使用的内存总数 |
mongodb.mem.virtual | mebibytes | 数据库进程使用的虚拟内存总数 |
mongodb.metrics.cursor.open.notimeout | cursors | 为防止在一段时间不活动后超时而设置选项 "DBQuery.Option.no Timeout" 的打开游标(open cursors)数 |
mongodb.metrics.cursor.open.pinned | cursors | "pinned" 的打开游标(open cursors)数 |
mongodb.metrics.cursor.open.total | cursors | MongoDB 为客户端维护的游标数 |
mongodb.metrics.cursor.timedoutps | cursors/second | 每秒钟内的超时游标数 |
mongodb.metrics.document.deletedps | documents/second | 文档删除数/秒 |
mongodb.metrics.document.insertedps | documents/second | 文档增加数/秒 |
mongodb.metrics.document.returnedps | documents/second | 文档被请求返回数/秒 |
mongodb.metrics.document.updatedps | documents/second | 文档更新数/秒 |
mongodb.metrics.getlasterror.wtime.numps | operations/second | 需要等待一个或多个从库获悉这个写操作的 getLastError 操作的次数/秒 |
mongodb.metrics.getlasterror.wtime.totalmillisps | fractions | 执行需要等待一个或多个从库获悉这个写操作的 getLastError 操作的时间/秒 |
mongodb.metrics.getlasterror.wtimeoutsps | events/second | 由于 getLastError 超过超时阈值导致写相关的操作超时的次数/秒 |
mongodb.metrics.operation.fastmodps | operations/second | 不导致文档增加或者需要更新索引的更新操作的次数/秒 |
mongodb.metrics.operation.idhackps | queries/second | 包含 _id 字段的请求次数/秒 |
mongodb.metrics.operation.scanandorderps | queries/second | 返回不能用索引排序的有序数字的请求次数/秒 |
mongodb.metrics.queryexecutor.scannedps | operations/second | 在请求和请求的评估过程中被扫描的索引个数/秒 |
mongodb.metrics.record.movesps | operations/second | 文档在磁盘上移动的次数/秒 |
mongodb.metrics.repl.apply.batches.numps | operations/second | 对所有数据库执行的批处理的个数/秒 |
mongodb.metrics.repl.apply.batches.totalmillisps | fractions | 执行来自 oplog 的操作的时间/秒 |
mongodb.metrics.repl.apply.opsps | operations/second | 执行的 oplog 操作的个数/秒 |
mongodb.metrics.repl.buffer.count | operations | oplog 缓存中的操作数 |
mongodb.metrics.repl.buffer.maxsizebytes | bytes | 缓存的最大值,单位 byte |
mongodb.metrics.repl.buffer.sizebytes | bytes | oplog 缓存的当前大小,单位b yte |
mongodb.metrics.repl.network.bytesps | bytes/second | 从"从服务器同步源"读取的数据总量/秒,单位 byte |
mongodb.metrics.repl.network.getmores.numps | operations/second | getmore 操作的个数/秒 |
mongodb.metrics.repl.network.getmores.totalmillisps | fractions | 从 getmore 操作收集数据时间/秒 |
mongodb.metrics.repl.network.opsps | operations/second | 从"从服务器"读取的操作的个数/秒 |
mongodb.metrics.repl.network.readerscreatedps | processes/second | oplog 查询进程创建的个数/秒 |
mongodb.metrics.ttl.deleteddocumentsps | documents/second | 从有 ttl 索引的 collections 中删除文档的次数数/秒 |
mongodb.metrics.ttl.passesps | operations/second | 后台进程从有 ttl 索引的 collections 中删除文档的次数/秒 |
mongodb.opcounters.commandps | commands/second | 传给数据库的命令的总数/秒 |
mongodb.opcounters.deleteps | operations/second | 删除操作的次数/秒 |
mongodb.opcounters.getmoreps | operations/second | getmore 操作的次数/秒 |
mongodb.opcounters.insertps | operations/second | 插入操作的次数/秒 |
mongodb.opcounters.queryps | queries/second | 查询操作的次数/秒 |
mongodb.opcounters.updateps | operations/second | 更新操作的次数/秒 |
mongodb.opcountersrepl.commandps | commands/second | 每秒向数据库发出的 replicated 命令的总数 |
mongodb.opcountersrepl.deleteps | operations/second | 每秒的 replicated 删除操作数 |
mongodb.opcountersrepl.getmoreps | operations/second | 每秒的 replicated getmore 操作数 |
mongodb.opcountersrepl.insertps | operations/second | 每秒的 replicated 插入操作数 |
mongodb.opcountersrepl.queryps | queries/second | 每秒的 replicated 查询总数 |
mongodb.opcountersrepl.updateps | operations/second | 每秒的 replicated 更新操作数 |
mongodb.oplog.logsizemb | mebibytes | oplog 总大小 |
mongodb.oplog.timediff | seconds | oplog window:oplog 中的第一个和最后一个操作之间的差异 |
mongodb.oplog.usedsizemb | mebibytes | oplog 使用空间总量 |
mongodb.replset.health | 副本集(replica set)的成员健康值:conveys if the member is up (i.e. 1) or down (i.e. 0) | |
mongodb.replset.replicationlag | seconds | 主服务器上的向辅助服务器副本的写操作延迟 |
mongodb.stats.datasize | bytes | 库中的数据量,包括 the padding factor |
mongodb.stats.indexes | indices | 库中总索引数 |
mongodb.stats.indexsize | bytes | 库中所有创建的索引总数 |
mongodb.stats.objects | objects | 库中所有的文档数 |
mongodb.stats.storagesize | bytes | 分配给库中的 collections 的存储空间 |
mongodb.uptime | seconds | mongodb 进程启动时长 |
mongodb.wiredtiger.cache.bytes_currently_in_cache | bytes | 当前在缓存中的数据大小 |
mongodb.wiredtiger.cache.failed_eviction_of_pages_exceeding_the_in_memory_maximumps | pages/second | 每秒钟超过内存中最大值的被逐出失败的页数 |
mongodb.wiredtiger.cache.in_memory_page_splits | splits | 内存中 splits 的页数 |
mongodb.wiredtiger.cache.maximum_bytes_configured | bytes | 最大缓存空间 |
mongodb.wiredtiger.cache.maximum_page_size_at_eviction | bytes | 逐出页的最大 size |
mongodb.wiredtiger.cache.modified_pages_evicted | pages | 从缓存中逐出的已被修改的页数 |
mongodb.wiredtiger.cache.pages_currently_held_in_cache | pages | 缓存中当前保存的页数 |
mongodb.wiredtiger.cache.pages_evicted_by_application_threadsps | pages/second | 每秒钟被应用程序线程逐出的页数 |
mongodb.wiredtiger.cache.pages_evicted_exceeding_the_in_memory_maximumps | pages/second | 每秒种,由于超过缓存空间上限而被逐出的页数 |
mongodb.wiredtiger.cache.tracked_dirty_bytes_in_cache | bytes | 缓存中脏数据(dirty data)的大小 |
mongodb.wiredtiger.cache.unmodified_pages_evicted | pages | 从缓存中逐出的未修改的页数 |
mongodb.wiredtiger.concurrenttransactions.read.available | tickets | 剩余可用的 read tickets(concurrent transactions)数 |
mongodb.wiredtiger.concurrenttransactions.read.out | tickets | 已使用的 read tickets(concurrent transactions)数 |
mongodb.wiredtiger.concurrenttransactions.read.totaltickets | tickets | 可用的 read tickets(concurrent transactions)总数 |
mongodb.wiredtiger.concurrenttransactions.write.available | tickets | 剩余可用的 write tickets(concurrent transactions)数 |
mongodb.wiredtiger.concurrenttransactions.write.out | tickets | 已使用的 write tickets(concurrent transactions)数 |
mongodb.wiredtiger.concurrenttransactions.write.totaltickets | tickets | 可用的 write tickets(concurrent transactions)总数 |
配置 MongoDB 监控
创建 Cloud Insight 访问权限
注:只有在 MongoDB 开启了权限认证时,才需要为 Cloud Insight 配置授权。未开启,请跳过此步骤。
为 Cloud Insight 创建只读权限的 Admin 用户。Cloud Insight 需要 admin 权限才能完整采集 MongoDB 性能数据。
在 Mongo Shell 中执行以下指令。
use admin
db.auth("admin", "admin-password")
db.addUser("cloudinsight", "YourPassword", true)
如果您使用的是 2.6 和以上版本的 MongoDB,那请执行以下指令,来创建只读 Admin 权限。
use admin
db.auth("admin", "admin-password")
db.createUser({"user":"cloudinsight", "pwd": "YourPassword", "roles" : [ 'read', 'clusterMonitor']})
您可以通过以下指令,查看用户是否创建成功,权限是否正确。
python -c 'from pymongo import Connection; print Connection().admin.authenticate("cloudinsight", "YourPassword")' | \
grep True && \
echo -e "\033[0;32mcloudinsight user - OK\033[0m" || \
echo -e "\033[0;31mcloudinsight user - Missing\033[0m"
更多 MongoDB 用户的创建管理,请访问 MongoDB 官方文档。
编辑配置文件
编辑配置文件 conf.d/mongo.yaml,使 Cloud Insight Agent 可以与 MongoDB 通信。
init_config:
instances:
- server: mongodb://cloudinsight:YourPassword@localhost:27016
tags:
- tag_key1:tag_value1
- tag_key2:tag_value2
- server: mongodb://cloudinsight:YourPassword@localhost:27017
tags:
- tag_key1:tag_value1
- tag_key2:tag_value2
重启 Agent
重启 Cloud Insight Agent,使配置生效。
您也可以通过查看 Agent Info 信息,来验证配置是否成功。当出现以下信息,则代表安装成功。
Checks
======
[...]
mongo
-----
- instance #0 [OK]
- Collected 8 metrics & 0 events
有关 Agent Info 信息的查看,请访问帮助中心,查看 Cloud Insight Agent 常用操作。
默认标签
Cloud Insight 采集 MongoDB 以下默认主机标签:
标签种类 | 标签含义 |
---|---|
server | 数据库实例地址(例如 "mongodb://localhost:27017") |
replset_state | 集群节点(primary 或 secondary) |
db | 数据库(例如 "admin") |
collection | 集合(例如 "system.roles") |
cluster | 集群数据库(例如 "db:local") |
常见问题
- 若要在同一个服务器上监控多个相同的平台服务,参考如何监控多个平台服务。
- 有任何关于产品的使用疑惑,参考常见问题。