数据库管理以及应用程序容量规划的关键方面是监控 集群 的健康和性能。尽管 MongoDB Atlas(一个数据库即服务跨云平台)处理了绝大多数管理任务并具有内置的容错/扩展能力,但用户了解如何最好地监控其集群,并在危机发生之前调整或扩展所需内容,这一点至关重要。
监控 MongoDB 数据库可以使您
在监控 MongoDB 时,我们应该注意以下四个主要领域
每个领域都可以通过一些实用程序和命令来覆盖
MongoDB 服务器进程的状态可以立即表明我们是否需要深入调查其活动或健康状况。如果一个进程无响应或未响应我们的命令,应立即进行调查。
rs.status()
用于副本集和 sh.status()
用于分片集群的命令提供了集群的高级状态。使用 MongoDB 内置的 免费监控 功能,可以获取有关操作执行时间、内存使用、CPU 使用和操作计数的详细信息。当我们的应用程序表现不佳或性能低下时,我们需要排除数据库层作为瓶颈。由于应用程序针对数据库进行连接和操作,因此我们应该密切关注它们的行为。
MongoDB 提供了各种指标和机制来识别其连接和操作模式。除了主动和被动监控工具之外,Atlas 还提供完整的警报系统,并支持日志收集。
复制是MongoDB集群高可用性和持久性的关键方面。需要仔细监控复制的健康和性能,以保持集群的健康状态。
如何使用MongoDB Atlas进行监控:集群内的Atlas指标标签提供了复制指标的图表。复制指标允许您将它们与其他数据库指标相关联。本文将重点介绍并详细阐述这些重要内容。
如何使用通用MongoDB实例进行监控:使用以下MongoDB命令的使用情况
在监控MongoDB指标时,您应注意以下内容。
让我们了解操作和连接监控的主要指标。
在所选样本期间每秒执行的操作的平均速率。Opcounters图表/指标显示了实例的操作速度和操作类型的分解。
这是在所选样本期间执行的平均操作时间(读和写操作)。
查询执行器表示在所选样本期间查询和查询计划评估期间扫描的文档的平均每秒速率。查询定位表示扫描的文档数与返回的文档数的比率。高比率可能表明操作次优,需要扫描大量文档以返回较小部分。
这描述了对实例的打开连接数。高数值或尖峰可能表明客户端的连接策略次优或服务器无响应。
队列描述了等待锁定的操作数,无论是读取还是写入。高队列可能表明存在冲突的写入路径或次优的模式设计,这导致对数据库资源的竞争激烈。
这指的是在所选样本期间每秒查询返回排序结果的平均速率,这些结果无法使用索引执行排序操作。
让我们覆盖硬件监控的主要指标。
这是CPU花费在服务此MongoDB进程的系统调用上的时间百分比,通过除以CPU核心数缩放到0-100%的范围内。它包括由user
、kernel
、iowait
、steal
等模块使用的CPU。高内核或用户CPU可能表明MongoDB操作(软件)耗尽了CPU,而高iowait最可能是由存储耗尽导致的CPU耗尽的根本原因。
这是CPU花费在服务此MongoDB进程的应用软件(MongoDB代码)上的时间百分比,通过除以CPU核心数缩放到0-100%的范围内。它包括由user
、kernel
等模块使用的CPU。高内核CPU可能表明操作系统操作耗尽了CPU,而高user
最可能是由MongoDB操作导致的CPU耗尽的根本原因。
磁盘延迟是MongoDB使用的磁盘分区上读取和写入磁盘的延迟(毫秒)。高值(>500ms)表示MongoDB可能会受到存储层的影响。
这是在MongoDB使用的磁盘分区上每秒消耗的平均I/O操作数。
这是MongoDB使用的磁盘分区上的总空闲磁盘空间字节数。Atlas提供基于此指标的磁盘自动扩展功能。
系统内存描述了正在使用的物理内存字节数与未使用的空闲可用空间数之比。可用的指标估计了在不进行交换的情况下可供运行新应用程序的字节数。
交换使用图描述了放在交换设备上的内存量。此图中使用的高指标直接表明内存不足以满足当前工作负载。
让我们覆盖复制监控的主要指标。
复制延迟是次要节点在写操作上落后主节点的近似秒数。高复制延迟将表明一个次要节点在复制方面有困难,可能会影响您的操作延迟,考虑到连接的写/读关注。
这是主节点复制oplog中可用的近似小时数。如果次要节点的延迟超过此量,它无法赶上,需要进行完全重新同步。
复制头室是主节点复制oplog窗口和次要节点复制延迟之间的差异。如果此值降至零,次要节点可以进入RECOVERING状态。
这指的是每小时主节点生成的oplog平均字节数。oplog的高意外流量可能表明模式设计问题或写入工作负载严重不足。
这指的是在所选样本期间每秒执行的复制操作的平均速率。Opcounters - repl graph/metric显示实例的操作速度和操作类型的分解。
MongoDB在Atlas、云管理器和Ops Manager中提供内置UI工具,以帮助您监控性能。MongoDB还提供一些独立的工具和命令,用于查看更多基于原始数据的指标。
让我们了解我们拥有的工具。这些是从具有访问权和适当角色(集群监控)的主机上运行的工具,以监控您的环境。
mongostat
用于快速了解MongoDB服务器实例的状态。它最适合监视特定事件的单个实例,因为它提供了实时视图。您可以使用此命令监控基本服务器统计信息,如操作分解、MongoDB内存统计信息、锁定队列和连接/网络。
您可以通过以下语法执行MongoDB命令
mongostat <options> <connection-string> <polling interval in seconds>
请参阅此处的示例输出。
mongotop跟踪MongoDB实例在每集合上读取和写入数据所花费的时间。
您可以通过以下语法执行MongoDB命令
mongotop <options> <connection-string> <polling interval in seconds>
请参阅此处的示例输出。
rs.status()返回副本集状态。这是从运行此方法成员的角度完成的。
请参阅此处的示例输出。
当您想要了解数据库的状态概述时,请使用db.serverStatus()
命令。它提供了一个表示当前实例指标计数器的文档。定期运行此命令以收集有关实例的统计信息。
请参阅此处的示例输出。
dbStats命令返回有关存储统计信息,例如总集合数据与存储大小之比、索引数量及其大小以及集合相关统计信息(文档和集合的数量),对于某个数据库。
请参阅此处的示例输出。
collStats命令用于收集类似于dbStats提供的集合级别的统计信息。其输出包括集合中对象的计数、集合的大小、集合使用的磁盘空间量以及有关其索引的信息。
请参阅此处的示例输出。
因此,我们可以通过使用不同的工具(如mongostat
、mongotop
、dbStats
、collStats
和serverStatus
命令)来监控MongoDB数据库。这些命令提供实时监控和报告数据库服务器,使我们能够监控错误和数据库性能,并协助做出明智的决策以优化数据库。
MongoDB提供各种指标和工具来监控您的数据库并确保其以最佳性能运行。从UI工具到顾问到原始数据指标,无论您是自行托管数据库还是使用MongoDB Atlas,您都将得到全面的支持。
有关监控MongoDB数据库的更多信息,请参阅以下资源。
参考