MongoDB监控

在本页面

监控是所有数据库管理的重要组成部分。牢牢掌握 MongoDB 的报告,将使您能够评估数据库的状态并维持部署不会出现危险。此外,MongoDB 的正常运行参数使您能够在问题升级为故障之前进行诊断。

本文档概述了 MongoDB 中可用的监控实用程序和报告统计信息。它还介绍了用于监视副本集和分片群集的诊断策略和建议。

监控策略

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

每种策略都可以帮助回应不同的问题,并且在不同的情况下很有用。这些方法是互补的。

MongoDB 报告工具

本节概述了用MongoDB 分发的报告方法。它还提供了每种方法最适合您解决的各种问题的示例。

免费监控

4.0 版本中的新功能

MongoDB 为单机或副本集提供免费的云监控arrow-up-right

默认情况下,您可以在运行时使用db.enableFreeMonitoring()arrow-up-rightdb.disableFreeMonitoring()arrow-up-right开启/关闭免费监控。

免费监控可提供长达 24 小时的数据。有关更多详细信息,请参见免费监控arrow-up-right

实用工具

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

mongostat

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

使用mongostatarrow-up-right来了解操作类型的分布情况,并通知容量规划。有关详细信息,请参见 mongostat manualarrow-up-right 手册。

mongotop

mongotoparrow-up-right跟踪并报告 MongoDB 实例当前的读写活动,并基于每个集合报告这些统计信息。

使用mongotoparrow-up-right来检查数据库活动和使用是否符合您的期望。有关详细信息,请参见mongotop manualarrow-up-right手册。

HTTP 控制台

在 3.6 版本中做的更改: MongoDB 3.6 删除了 MongoDB 弃用的 HTTP 接口和 REST API。

命令

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

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

serverStatus

使用 serverStatusarrow-up-right 命令,或shell 程序的db.serverStatus()arrow-up-right ,可以返回数据库状态的一般概述,包含磁盘使用,内存使用,连接,日志和索引访问。该命令将快速返回,不会影响 MongoDB 的性能。

serverStatusarrow-up-right 输出一个 MongoDB 实例状态的帐户。此命令很少直接运行。在大多数情况下,聚合后的数据更有意义,就像使用监控工具(包括 MongoDB Cloud Managerarrow-up-rightOps Managerarrow-up-right)所看到的那样。尽管如此,所有管理员都应该熟悉serverStatusarrow-up-right所提供的数据 。

dbStats

使用 dbStatsarrow-up-right 命令,或shell 程序的 db.stats()arrow-up-right ,可以返回一个介绍存储使用和数据量的文档。 dbStatsarrow-up-right 反映存储的使用量,包含在数据库中的数据的数量,对象集合和索引计数器。

使用此数据监视指定数据库的状态和存储容量。此输出还允许您比较数据库之间的使用情况,并确定数据库中文档arrow-up-right的平均大小。

collStats

shell 程序的 collStatsarrow-up-rightdb.collection.stats()arrow-up-right提供类似于 dbStatsarrow-up-right 集合级别的统计信息,包括集合中对象的数量,集合的大小,集合使用的磁盘空间量以及有关其索引的信息。

replSetGetStatus

replSetGetStatusarrow-up-right 命令(来自内核程序的rs.status()arrow-up-right)可以返回副本集状态的概述。 replSetGetStatusarrow-up-right 文档详细介绍了副本集和统计信息及其成员的状态和配置。

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

托管 (SaaS) 监控工具

这些作为托管服务提供的监视工具,通常通过付费订阅提供。

名称

说明

MongoDB Cloud Manager 是基于云的用于管理 MongoDB 部署的服务套件。MongoDB Cloud Manager 提供监控,备份和自动化功能。有关本地解决方案,另请参阅 MongoDB 企业高级版中提供的 Ops Managerarrow-up-right.

VividCortex 提供了能在一秒钟里对 MongoDB 的生产工作负载和查询性能arrow-up-right进行深入观测的能力,跟踪延迟,吞吐量,错误等,以确保您的应用程序在 MongoDB 上具有可伸缩性和出色的性能。

适用于 MongoDB 的仪表盘arrow-up-right,针对 MongoDB 的报警,复制故障转移时间表和 iPhone, iPad 和安卓的移动应用程序。

IBM 有一个提供了一个应用性能管理 SaaS 产品,其中包括用于 MongoDB 以及其他应用程序和中间件的监视器。

New Relic 为应用程序性能管理提供全面支持。另外,New Relic 的插件和深入观察能力使您能够从 New Relic 中的 Cloud Manager 查看监控指标。

基础架构监视arrow-up-right,以可视化 MongoDB 部署的性能。

监视,异常检测和警报arrow-up-right,SPM 监视所有主要的 MongoDB 指标以及基础设施。对于Docker 和其他应用程序指标,例如 Node.js,Java,NGINX,Apache,HAProxy 或 Elasticsearch,SPM 提供指标和日志的关联。

潘多拉 FMS 提供 PandoraFMS-mongodb-monitoringarrow-up-right 插件用来监控 MongoDB。

进程记录

在正常操作期间, mongodarrow-up-rightmongosarrow-up-right 实例报告一个真实账号的所有服务器活动和操作,要么是标准输出,要么输出到日志文件。以下运行时设置控制这些选项。

注意

您可以将这些配置操作指定为 mongodarrow-up-rightmongosarrow-up-right 的命令行参数,例如:

mongodarrow-up-right 实例以 verbosearrow-up-right 模式启动,追加数据到日志文件 /var/log/mongodb/server1.log/

以下数据库命令arrow-up-right也会影响日志记录:

日志编辑

_3.4 版中的新功能:_仅在 MongoDB 企业版中可用

运行有 security.redactClientLogDataarrow-up-rightmongodarrow-up-right 在打印日志之前,编辑与日志事件相关联的信息,只留下的元数据,源文件,或与该事件有关的行号。security.redactClientLogDataarrow-up-right以牺牲详细诊断信息为代价防止潜在的敏感信息进入系统日志。

例如,以下操作会插入一个文档到没有日志编辑的 mongodarrow-up-right 中。mongodarrow-up-right已设置 systemLog.component.command.verbosityarrow-up-right1:

此操作将产生以下日志事件:

运行有 security.redactClientLogDataarrow-up-rightmongodarrow-up-right 执行相同的插入操作生成以下日志事件:

redactClientLogDataarrow-up-right静态加密arrow-up-rightTLS/SSL(传输加密)arrow-up-right结合使用,以符合监管要求。

诊断性能问题

使用 MongoDB 开发和操作应用程序时,您可能需要分析数据库性能作为应用程序的性能。 MongoDB性能arrow-up-right讨论了一些可能影响性能的操作因素。

复制和监控

除了对任何 MongoDB 实例的基本监视要求之外,对于副本集,管理员还必须监视复制滞后。“复制滞后”是指将arrow-up-right磁盘上的写操作复制(即复制)到 辅助arrow-up-right磁盘上所花费的时间。可以接受一些小的延迟时间,但是随着复制滞后的增加,会出现严重的问题,包括:

  • 主数据库上的缓存压力越来越大。

  • 滞后期间发生的操作不会复制到一个或多个次级。如果您使用复制来确保数据的持久性,那么特别长的延迟可能会影响数据集的完整性。

  • 如果复制滞后超过操作日志 (oplogarrow-up-right) 的长度,则 MongoDB 将必须在辅助数据库上执行初始同步,从arrow-up-right数据库复制所有数据并重建所有索引。在通常情况下,这种情况并不常见,但是如果您将 oplog 配置为小于默认值,则可能会出现问题。

注意

oplog 的大小只能在第一次运行时使用 mongodarrow-up-right 命令的--oplogSizearrow-up-right参数进行配置,或者最好是在 MongoDB 配置文件中设置 oplogSizeMBarrow-up-right 。如果您在使用--replSetarrow-up-right选项运行之前未在命令行上指定此选项,则 mongodarrow-up-right将创建一个默认大小的操作日志。

默认情况下,操作日志是 64 位系统上总可用磁盘空间的 5%。有关更改 oplog 大小的更多信息,请参阅“更改 Oplog 的大小”arrow-up-right

流量控制

从 MongoDB 4.2 开始,管理员可以限制主数据库应用其写入的速率,以将多数承诺arrow-up-right的延迟保持在可配置的最大值flowControlTargetLagSecondsarrow-up-right以下。

默认情况下,流量控制是开启的arrow-up-right

注意

为了启用流量控制,副本集/分片集群必须具有: featureCompatibilityVersion (FCV)arrow-up-right 4.2 以及开启大多数读arrow-up-right。也就是说,如果 FCV 不是 4.2 或者禁用了大多数读,则启用的流量控制无效。

另请参阅:检查复制延迟arrow-up-right

副本集状态

复制问题通常是由成员之间的网络连接问题引起的,或者是由于主节点arrow-up-right没有资源来支持应用程序和复制通信而导致的。要检查副本的状态,使用replSetGetStatusarrow-up-right或在shell程序中使用以下帮助程序:

replSetGetStatusarrow-up-right参考提供了此输出的更深入的概述视图。通常监听 optimeDate 的值,并特别注意primaryarrow-up-rightsecondaryarrow-up-right之间的时间差。

从 MongoDB 4.0 开始,操作日志可以超出其配置的大小限制,以避免删除 majority commit pointarrow-up-right

免费监控

注意

从 4.0 版本开始,MongoDB 为独立和副本集提供免费监控arrow-up-right 。有关更多信息,请参见免费监控arrow-up-right

Oplog 条目的慢应用

从版本 4.2 开始(版本 4.0.6 开始可用),副本集的辅助成员现在 记录操作日志条目arrow-up-right所花费的时间比应用慢操作阈值长。这些慢日志消息记录在 REPLarrow-up-right 组件下的诊断日志arrow-up-right中的辅助日志中,使用了格式为 applied op: <oplog entry> took <num>ms的文本文件。这些慢操作日志条目仅取决于慢操作阈值。它们不依赖于日志级别(在系统级别或组件级别),配置级别或运行缓慢的采样率。探查器不会捕获缓慢的操作日志条目。

分片和监控

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

请参阅分片arrow-up-right以获取更多信息的文档。

配置服务器

配置数据库arrow-up-right保留一个地图识别哪些文件是哪个分片。集群在分片之间移动arrow-up-right时会更新此映射 。当无法访问配置服务器时,某些分片操作将变得不可用,例如移动块和启动 mongosarrow-up-right 实例。但是,仍然可以从已运行的 mongosarrow-up-right 实例访问群集 。

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

MongoDB Cloud Managerarrow-up-rightOps Managerarrow-up-right 监视配置服务器,并且在无法访问配置服务器时可以创建通知。有关更多信息,请参阅 MongoDB Cloud Manager 文档arrow-up-right and Ops Manager 文档arrow-up-right

平衡和块分布

最有效的分片群集arrow-up-right部署会均衡分片之间的arrow-up-right。为了实现这一点,MongoDB 具有一个后台平衡器arrow-up-right进程,该进程用于分配数据,以确保始终在各个分片arrow-up-right之间最佳地分配块。

通过 mongoarrow-up-right shell 发出 db.printShardingStatus()arrow-up-rightsh.status()arrow-up-right 命令将返回整个集群的概述,包括数据库名称和块列表。

耗时长的锁

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

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

在 3.4 版本中做了更改_: 从 3.4 版本开始,CSRS 配置服务器的主服务器使用进程 ID 为“ConfigServer” 的进程持有“平衡器”锁。此锁永远不会释放。要确定平衡器是否正在运行,请参阅检查平衡器是否正在运行arrow-up-right

存储节点看门狗程序

注意

存储节点看门狗监视以下 MongoDB 目录以检测文件系统无响应:

默认情况下,存储节点看门狗是禁用的。你可以在启动mongodarrow-up-right时,通过将watchdogPeriodSecondsarrow-up-right参数设置为大于或等于 60 的整数。 但是,一旦启用,您可以暂停存储节点看门狗arrow-up-right程序并在运行时重新启动。有关详细信息,请参见watchdogPeriodSecondsarrow-up-right 参数。

如果包含受监视目录的任何文件系统都没有响应,则存储节点监视程序将终止mongodarrow-up-right并退出,并以状态码 61 退出。 如果是副本集mongodarrow-up-right主节点arrow-up-right,则终止会启动故障转移arrow-up-right,从而允许另一个成员成为主节点。

一旦 mongodarrow-up-right 终止,在同一机器,可能无法干净地重新启动它。

符号链接

如果其任何受监视目录是到其他卷的符号链接,则存储节点监视程序将不监视该符号链接目标。

例如,如果mongodarrow-up-right使用storage.directoryPerDB: truearrow-up-right (或 --directoryperdbarrow-up-right)链接数据库目录到另一个数据卷,则存储节点看门狗程序将不遵循符号链接来监视目标。

存储节点看门狗检测无响应的文件系统并终止的最长时间几乎是watchdogPeriodSecondsarrow-up-right的值的两倍。

原文链接:https://docs.mongodb.com/v4.2/administration/monitoring/arrow-up-right

译者:谢伟成

最后更新于