跳转至

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")

5分钟,开启你的跨云监控之旅 (`⌄´ )


常见问题