公告推出 MongoDB 8.0,史上最快的 MongoDB!阅读更多 >>推出 MongoDB 8.0,史上最快的 MongoDB!>>

如何监控 MongoDB

MongoDB 提供了监控命令和工具,以增强数据库性能并检查数据库实例的健康状况。本文档将帮助您了解可以用来监控您的 MongoDB Atlas 集群 的各种指标。本文档还将关注您可以使用的一般 MongoDB 工具来监控您自行管理的 MongoDB 安装。

为什么要监控 MongoDB?

数据库管理以及应用程序容量规划的关键方面是监控 集群 的健康和性能。尽管 MongoDB Atlas(一个数据库即服务跨云平台)处理了绝大多数管理任务并具有内置的容错/扩展能力,但用户了解如何最好地监控其集群,并在危机发生之前调整或扩展所需内容,这一点至关重要。

监控 MongoDB 数据库可以使您

  • 了解数据库的当前容量。
  • 观察资源的使用情况。
  • 观察是否存在异常行为和性能问题。
  • 检测并响应实时问题,以改进您的应用程序堆栈。
  • 符合您的 SLA 以及数据保护/治理要求。

如何监控 MongoDB

在监控 MongoDB 时,我们应该注意以下四个主要领域

  • 实例状态和健康
  • MongoDB 集群的运行和连接指标
  • 实例硬件指标
  • 复制指标

每个领域都可以通过一些实用程序和命令来覆盖

进程状态和健康

MongoDB 服务器进程的状态可以立即表明我们是否需要深入调查其活动或健康状况。如果一个进程无响应或未响应我们的命令,应立即进行调查。

  • 如何使用 MongoDB Atlas 进行监控:通过 集群视图 可以查看集群健康和进程健康。绿色点表示健康状态,而橙色和红色表示进程存在问题。
  • 如何监控自行管理的 MongoDB 实例:例如,rs.status() 用于副本集和 sh.status() 用于分片集群的命令提供了集群的高级状态。使用 MongoDB 内置的 免费监控 功能,可以获取有关操作执行时间、内存使用、CPU 使用和操作计数的详细信息。

MongoDB 集群的运行和连接指标

当我们的应用程序表现不佳或性能低下时,我们需要排除数据库层作为瓶颈。由于应用程序针对数据库进行连接和操作,因此我们应该密切关注它们的行为。

MongoDB 提供了各种指标和机制来识别其连接和操作模式。除了主动和被动监控工具之外,Atlas 还提供完整的警报系统,并支持日志收集。

实例硬件指标

硬件指标非常重要,可以用来确定哪些资源可能是性能问题的根源或需要调整和重新规划容量。

复制指标

复制是MongoDB集群高可用性和持久性的关键方面。需要仔细监控复制的健康和性能,以保持集群的健康状态。

要监控的MongoDB指标

在监控MongoDB指标时,您应注意以下内容。

MongoDB 集群的运行和连接指标

让我们了解操作和连接监控的主要指标。

Opcounters

在所选样本期间每秒执行的操作的平均速率。Opcounters图表/指标显示了实例的操作速度和操作类型的分解。

操作执行次数

这是在所选样本期间执行的平均操作时间(读和写操作)。

查询执行器和查询定位

查询执行器表示在所选样本期间查询和查询计划评估期间扫描的文档的平均每秒速率。查询定位表示扫描的文档数与返回的文档数的比率。高比率可能表明操作次优,需要扫描大量文档以返回较小部分。

连接

这描述了对实例的打开连接数。高数值或尖峰可能表明客户端的连接策略次优或服务器无响应。

队列

队列描述了等待锁定的操作数,无论是读取还是写入。高队列可能表明存在冲突的写入路径或次优的模式设计,这导致对数据库资源的竞争激烈。

扫描和排序

这指的是在所选样本期间每秒查询返回排序结果的平均速率,这些结果无法使用索引执行排序操作。

MongoDB 硬件指标

让我们覆盖硬件监控的主要指标。

标准化系统CPU

这是CPU花费在服务此MongoDB进程的系统调用上的时间百分比,通过除以CPU核心数缩放到0-100%的范围内。它包括由userkerneliowaitsteal等模块使用的CPU。高内核或用户CPU可能表明MongoDB操作(软件)耗尽了CPU,而高iowait最可能是由存储耗尽导致的CPU耗尽的根本原因。

标准化进程CPU

这是CPU花费在服务此MongoDB进程的应用软件(MongoDB代码)上的时间百分比,通过除以CPU核心数缩放到0-100%的范围内。它包括由userkernel等模块使用的CPU。高内核CPU可能表明操作系统操作耗尽了CPU,而高user最可能是由MongoDB操作导致的CPU耗尽的根本原因。

磁盘延迟

磁盘延迟是MongoDB使用的磁盘分区上读取和写入磁盘的延迟(毫秒)。高值(>500ms)表示MongoDB可能会受到存储层的影响。

磁盘IOPS

这是在MongoDB使用的磁盘分区上每秒消耗的平均I/O操作数。

磁盘空间空闲

这是MongoDB使用的磁盘分区上的总空闲磁盘空间字节数。Atlas提供基于此指标的磁盘自动扩展功能。

系统内存

系统内存描述了正在使用的物理内存字节数与未使用的空闲可用空间数之比。可用的指标估计了在不进行交换的情况下可供运行新应用程序的字节数。

交换使用

交换使用图描述了放在交换设备上的内存量。此图中使用的高指标直接表明内存不足以满足当前工作负载。

MongoDB复制指标

让我们覆盖复制监控的主要指标。

复制延迟

复制延迟是次要节点在写操作上落后主节点的近似秒数。高复制延迟将表明一个次要节点在复制方面有困难,可能会影响您的操作延迟,考虑到连接的写/读关注。

复制Oplog窗口

这是主节点复制oplog中可用的近似小时数。如果次要节点的延迟超过此量,它无法赶上,需要进行完全重新同步。

复制余量

复制头室是主节点复制oplog窗口和次要节点复制延迟之间的差异。如果此值降至零,次要节点可以进入RECOVERING状态。

Oplog GB/小时

这指的是每小时主节点生成的oplog平均字节数。oplog的高意外流量可能表明模式设计问题或写入工作负载严重不足。

Opcounters - repl

这指的是在所选样本期间每秒执行的复制操作的平均速率。Opcounters - repl graph/metric显示实例的操作速度和操作类型的分解。

MongoDB性能监控工具

MongoDB在Atlas云管理器Ops Manager中提供内置UI工具,以帮助您监控性能。MongoDB还提供一些独立的工具和命令,用于查看更多基于原始数据的指标。

让我们了解我们拥有的工具。这些是从具有访问权和适当角色(集群监控)的主机上运行的工具,以监控您的环境。

mongostat命令

mongostat用于快速了解MongoDB服务器实例的状态。它最适合监视特定事件的单个实例,因为它提供了实时视图。您可以使用此命令监控基本服务器统计信息,如操作分解、MongoDB内存统计信息、锁定队列和连接/网络。

您可以通过以下语法执行MongoDB命令

mongostat <options> <connection-string> <polling interval in seconds>

请参阅此处的示例输出。

mongotop命令

mongotop跟踪MongoDB实例在每集合上读取和写入数据所花费的时间。

您可以通过以下语法执行MongoDB命令

mongotop <options> <connection-string> <polling interval in seconds>

请参阅此处的示例输出。

rs.status()命令

rs.status()返回副本集状态。这是从运行此方法成员的角度完成的。

请参阅此处的示例输出。

db.serverStatus()命令

当您想要了解数据库的状态概述时,请使用db.serverStatus()命令。它提供了一个表示当前实例指标计数器的文档。定期运行此命令以收集有关实例的统计信息。

请参阅此处的示例输出。

dbStats命令

dbStats命令返回有关存储统计信息,例如总集合数据与存储大小之比、索引数量及其大小以及集合相关统计信息(文档和集合的数量),对于某个数据库。

请参阅此处的示例输出。

collStats命令

collStats命令用于收集类似于dbStats提供的集合级别的统计信息。其输出包括集合中对象的计数、集合的大小、集合使用的磁盘空间量以及有关其索引的信息。

请参阅此处的示例输出。

因此,我们可以通过使用不同的工具(如mongostatmongotopdbStatscollStatsserverStatus命令)来监控MongoDB数据库。这些命令提供实时监控和报告数据库服务器,使我们能够监控错误和数据库性能,并协助做出明智的决策以优化数据库。

总结

MongoDB提供各种指标和工具来监控您的数据库并确保其以最佳性能运行。从UI工具到顾问到原始数据指标,无论您是自行托管数据库还是使用MongoDB Atlas,您都将得到全面的支持。

有关监控MongoDB数据库的更多信息,请参阅以下资源。

参考

MongoDB Atlas监控

MongoDB性能

MongoDB性能最佳实践