MongoDB监控
在本页面
监控是所有数据库管理的重要组成部分。牢牢掌握 MongoDB 的报告,将使您能够评估数据库的状态并维持部署不会出现危险。此外,MongoDB 的正常运行参数使您能够在问题升级为故障之前进行诊断。
本文档概述了 MongoDB 中可用的监控实用程序和报告统计信息。它还介绍了用于监视副本集和分片群集的诊断策略和建议。
MongoDB 提供了各种方法来收集正在运行的 MongoDB 实例的状态数据:
- MongoDB 分发了一组实用程序,这些实用程序提供了数据库活动的实时报告。
每种策略都可以帮助回应不同的问题,并且在不同的情况下很有用。这些方法是互补的。
本节概述了用MongoDB 分发的报告方法。它还提供了每种方法最适合您解决的各种问题的示例。
4.0 版本中的新功能
MongoDB 发行版包含许多实用程序,可快速返回有关实例性能和活动的统计信息。通常,这些对于诊断问题和评估正常操作最有用。
在 3.6 版本中做的更改: MongoDB 3.6 删除了 MongoDB 弃用的 HTTP 接口和 REST API。
MongoDB 包含许多报告数据库状态的命令。
这些数据可以提供比上面讨论的实用程序更好的粒度级别。您可以考虑在脚本和程序中使用它们的输出来开发自定义警报,或根据实例的活动来修改应用程序的行为。
db.currentOp
方法是用于识别数据库实例正在进行操作的另一有用工具。使用
serverStatus
命令,或shell 程序的db.serverStatus()
,可以返回数据库状态的一般概述,包含磁盘使用,内存使用,连接,日志和索引访问。该命令将快速返回,不会影响 MongoDB 的性能。
serverStatus
输出一个 MongoDB 实例状态的帐户。此命令很少直接运行。在大多数情况下,聚合后的数据更有意义,就像使用监控工具(包括 MongoDB Cloud Manager 和 Ops Manager)所看到的那样。尽管如此,所有管理员都应该熟悉serverStatus
所提供的数据 。使用
dbStats
命令,或shell 程序的 db.stats()
,可以返回一个介绍存储使用和数据量的文档。 dbStats
反映存储的使用量,包含在数据库中的数据的数量,对象集合和索引计数器。shell 程序的
collStats
或 db.collection.stats()
提供类似于 dbStats
集合级别的统计信息,包括集合中对象的数量,集合的大小,集合使用的磁盘空间量以及有关其索引的信息。使用此数据可确保正确配置了复制,并检查了当前主机与副本集的其他成员之间的连接。
这些作为托管服务提供的监视工具,通常通过付费订阅提供。
名称 | 说明 |
MongoDB Cloud Manager 是基于云的用于管理 MongoDB 部署的服务套件。MongoDB Cloud Manager 提供监控 ,备份和自动化功能。有关本地解决方案,另请参阅 MongoDB 企业高级版中提供的 Ops Manager. | |
IBM 有一个提供了一个应用性能管理 SaaS 产品,其中包括用于 MongoDB 以及其他应用程序和中间件的监视器。 | |
New Relic 为应用程序性能管理提供全面支持。另外,New Relic 的插件和深入观察能力使您能够从 New Relic 中的 Cloud Manager 查看监控指标。 | |
监视,异常检测和警报,SPM 监视所有主要的 MongoDB 指标以及基础设施。对于Docker 和其他应用程序指标,例如 Node.js,Java,NGINX,Apache,HAProxy 或 Elasticsearch,SPM 提供指标和日志的关联。 | |
注意
mongod -v --logpath /var/log/mongodb/server1.log --logappend
_3.4 版中的新功能:_仅在 MongoDB 企业版中可用
运行有
security.redactClientLogData
的 mongod
在打印日志之前,编辑与日志事件相关联的信息,只留下的元数据,源文件,或与该事件有关的行号。security.redactClientLogData
以牺牲详细诊断信息为代价防止潜在的敏感信息进入系统日志。db.clients.insertOne( { "name" : "Joe", "PII" : "Sensitive Information" } )
此操作将产生以下日志事件:
2017-06-09T13:35:23.446-04:00 I COMMAND [conn1] command internal.clients
appName: "MongoDB Shell"
command: insert {
insert: "clients",
documents: [ {
_id: ObjectId('593adc5b99001b7d119d0c97'),
name: "Joe",
PII: " Sensitive Information"
} ],
ordered: true
}
...
2017-06-09T13:45:18.599-04:00 I COMMAND [conn1] command internal.clients
appName: "MongoDB Shell"
command: insert {
insert: "###", documents: [ {
_id: "###", name: "###", PII: "###"
} ],
ordered: "###"
}
注意
oplog 的大小只能在第一次运行时使用
mongod
命令的--oplogSize
参数进行配置,或者最好是在 MongoDB 配置文件中设置 oplogSizeMB
。如果您在使用--replSet
选项运行之前未在命令行上指定此选项,则 mongod
将创建一个默认大小的操作日志。注意
为了启用流量控制,副本集/分片集群必须具有: featureCompatibilityVersion (FCV) 4.2 以及
开启大多数读
。也就是说,如果 FCV 不是 4.2
或者禁用了大多数读,则启用的流量控制无效。rs.status()
注意
由于无法访问的配置服务器会严重影响分片群集的可用性,因此您应该监视配置服务器,以确保群集保持良好的平衡并且 mongos 实例可以重新启动。
MongoDB Cloud Manager 和 Ops Manager 监视配置服务器,并且在无法访问配置服务器时可以创建通知。有关更多信息,请参阅 MongoDB Cloud Manager 文档 and Ops Manager 文档。
use config
db.locks.find()
平衡过程采用特殊的“平衡器”锁,以防止发生其他平衡活动。在
config
数据库中,使用以下命令查看“balancer”锁:db.locks.find( { _id : "balancer" } )
在 3.4 版本中做了更改_: 从 3.4 版本开始,CSRS 配置服务器的主服务器使用进程 ID 为“ConfigServer” 的进程持有“平衡器”锁。此锁永远不会释放。要确定平衡器是否正在运行,请参阅检查平衡器是否正在运行。
注意
- 在早期版本(3.2.16 +,3.4.7 +,3.6.0 +,4.0.0 +)中,存储节点看门狗仅在 MongoDB企业版中可用。
存储节点看门狗监视以下 MongoDB 目录以检测文件系统无响应:
默认情况下,存储节点看门狗是禁用的。你可以在启动
mongod
时,通过将watchdogPeriodSeconds
参数设置为大于或等于 60 的整数。 但是,一旦启用,您可以暂停存储节点看门狗程序并在运行时重新启动。有关详细信息,请参见watchdogPeriodSeconds
参数。符号链接如果其任何受监视目录是到其他卷的符号链接,则存储节点监视程序将不监视该符号链接目标。例如,如果mongod
使用storage.directoryPerDB: true
(或--directoryperdb
)链接数据库目录到另一个数据卷,则存储节点看门狗程序将不遵循符号链接来监视目标。
译者:谢伟成
最近更新 1yr ago