mongoDB的监控概述

2020-05-22 00:00:00 数据 数据库 操作 监控 实例



对于MongDB的监控,官方建议MongoDB Atlas,或者云数据库服务。这些自动收集信息和显示集群数据的状态和使用情况。

监控是所有数据库管理的关键组成部分。 牢牢掌握MongoDB的报告将使您能够评估数据库的状态并在没有危机的情况下维护部署。


监控策略

MongoDB提供了各种方法来收集有关正在运行的MongoDB实例状态的数据:

  • 从4.0开始,对单独服务器和副本集,MongoDB提供免费云监控
  • MongoDB分发一组实用程序,提供数据库活动的实时报告。
  • MongoDB提供各种数据库命令,以更很的保真度返回有关当前数据库状态的统计信息。
  • MongoDB Atlas是一个云托管的数据库即服务,用于运行,监控和维护MongoDB部署。
  • MongoDB Cloud Manager是一种托管服务,用于监控正在运行的MongoDB部署,以收集数据并根据该数据提供可视化和警报。
  • MongoDB Ops Manager是MongoDB Enterprise Advanced中的一种内部部署解决方案,可监控正在运行的MongoDB部署,以收集数据并根据该数据提供可视化和警报。


mongoDB 报告工具


免费监控

默认情况下,您可以使用db.enableFreeMonitoring()和db.disableFreeMonitoring()在运行时启用/禁用免费监控。


工具


MongoDB发行版包含许多实用程序,可以快速返回有关实例性能和活动的统计信息。 通常,这些对于诊断问题和评估正常操作有用。


mongostat:


mongostat按类型捕获并返回数据库操作的计数(例如,插入,查询,更新,删除等)。 这些计数报告服务器上的负载分布。


mongotop:

mongotop跟踪并报告MongoDB实例的当前读写活动,并基于每个集合报告统计信息。


命令

MongoDB包含许多报告数据库状态的命令。


这些数据可以提供比上面讨论的实用程序更精细的粒度级别。 考虑在脚本和程序中使用它们的输出来开发自定义警报,或者修改应用程序的行为以响应实例的活动。 db.currentOp方法是另一种用于标识数据库实例正在进行的操作的有用工具。


serverStatus:

serverStatus命令或shell中的db.serverStatus()返回数据库状态的一般概述,详细说明磁盘使用情况,内存使用情况,连接,日记和索引访问。 该命令快速返回,不会影响MongoDB性能。

serverStatus输出MongoDB实例状态的帐户。 此命令很少直接运行。 在大多数情况下,数据在聚合时更有意义,比如那些可视化监控工具,包括MongoDB Cloud Manager和Ops Manager。 但是,所有管理员都应该熟悉serverStatus提供的数据。


dbstats:


dbStats命令或shell中的db.stats()返回一个地址存储和数据卷的文档。 dbStats反映了使用的存储量,数据库中包含的数据量以及对象,集合和索引计数器。

使用此数据可以监视特定数据库的状态和存储容量。 此输出还允许您比较数据库之间的使用并确定数据库中的平均文档大小。


collStats:


来自shell的collStats或db.collection.stats(),它提供类似于集合级别的dbStats的统计信息,包括集合中对象的计数,集合的大小,集合使用的磁盘空间量, 和有关其索引的信息。


replSetGetStatus:

replSetGetStatus命令(来自shell的rs.status())返回副本集状态的概述。 replSetGetStatus文档详细说明了副本集的状态和配置以及有关其成员的统计信息。


使用此数据可确保正确配置复制,并检查当前主机与副本集的其他成员之间的连接。


处理日志


在正常操作期间,mongod和mongos实例将所有服务器活动和操作的实时帐户报告给标准输出或日志文件。 以下运行时设置控制这些选项。


  • quiet。 限制写入日志或输出的信息量。
  • verbosity。 增加写入日志或输出的信息量。 您还可以使用shell中的logLevel参数或db.setLogLevel()方法在运行时修改日志记录详细程度。
  • path. 允许记录到文件,而不是标准输出。 调整此设置时,必须指定日志文件的完整路径。
  • logAppend。 将信息添加到日志文件而不是覆盖文件。

注意:

您可以将这些配置操作指定为mongod或mongos的命令行参数


例如:

mongod -v --logpath /var/log/mongodb/server1.log --logappend

以详细模式启动mongod实例,将数据附加到/var/log/mongodb/server1.log/中。


下面数据库命令也影响日志:

  • getLog。 显示来自mongod进程日志的新消息。
  • logrotate的。 仅为mongod进程旋转日志文件。


诊断性能问题


在使用MongoDB开发和运行应用程序时,您可能希望将数据库的性能分析为应用程序。 MongoDB Performance讨论了一些可能影响性能的操作因素。


复制和监控

注意:

从版本4.0.6开始,副本集的辅助成员现在记录要应用长于慢操作阈值的oplog条目。 在REPL组件下的诊断日志中为辅助节点记录这些慢速oplog消息,其中应用了文本op:<oplog entry> take <num> ms。 这些缓慢的oplog条目仅取决于慢速操作阈值。 它们不依赖于日志级别(系统级别或组件级别),分析级别或慢速操作采样率。 探查器不捕获慢速oplog条目。

除了任何MongoDB实例的基本监视要求之外,对于副本集,管理员必须监视复制滞后。 “复制滞后”是指将主要写入操作复制(即复制)到辅助节点所花费的时间量。 一些小的延迟期可能是可以接受的,但随着复制滞后的增加,会出现了两个重大问题:

  • 首先,在滞后期间发生的操作不会复制到一个或多个辅助节点。 如果您使用复制来确保数据持久性,则特别长的延迟可能会影响数据集的完整性。
  • 其次,如果复制延迟超过操作日志(oplog)的长度,那么MongoDB将必须在辅助节点上执行初始同步,从主节点复制所有数据并重建所有索引。 这在正常情况下并不常见,但如果将oplog配置为小于默认值,则可能会出现问题。


注意:

oplog的大小只能在次运行期间使用mongod命令的--oplogSize参数进行配置,或者好是MongoDB配置文件中的oplogSizeMB设置。 如果在使用--replSet选项运行之前未在命令行上指定此项,则mongod将创建默认大小的oplog。默认情况下,oplog是64位系统上总可用磁盘空间的5%。


复制问题通常是成员之间的网络连接问题的结果,或者是没有资源支持应用程序和复制流量的主要结果。 要检查副本的状态,请在shell中使用replSetGetStatus或以下帮助程序:


rs.status()

replSetGetStatus引用提供了此输出的更深入的概述视图。 通常,请注意optimeDate的值,并特别注意主要成员和次要成员之间的时差。


分片和监控

在大多数情况下,分片群集的组件受益于与所有其他MongoDB实例相同的监控和分析。 此外,集群需要进一步监控,以确保数据在节点之间有效分布,并且分片操作正常运行。


配置服务器

配置数据库维护一个映射,标识哪些文档在哪些分片上。 当块在分片之间移动时,群集会更新此映射。 当配置服务器变得不可访问时,某些分片操作变得不可用,例如移动块和启动mongos实例。 但是,群集仍可从已运行的mongos实例访问。


由于无法访问的配置服务器会严重影响分片群集的可用性,因此应监视配置服务器以确保群集保持良好平衡并且mongos实例可以重新启动。


平衡和块分布


有效的分片群集会在分片之间均衡地分布块。 为了实现这一点,MongoDB有一个后台平衡器进程,它分发数据以确保块总是在分片之间进行佳分配。

通过mongo shell向mongos发出db.printShardingStatus()或sh.status()命令。 这将返回整个群集的概述,包括数据库名称和块列表。


陈旧锁


要检查数据库的锁定状态,请使用mongo shell连接到mongos实例。 发出以下命令序列以切换到config数据库并显示分片数据库上所有未完成的锁:

use config

db.locks.find()

平衡过程采用特殊的“平衡器”锁定,可防止其他平衡活动发生。 在config数据库中,使用以下命令查看“平衡器”锁定。

db.locks.find( { _id : "balancer" } )

相关文章