Docs 菜单
Docs 主页
/
MongoDB 数据库工具

mongostat

在此页面上

  • Synopsis
  • 语法
  • 选项
  • 字段
  • 更多信息
  • 了解详情

本文档适用于 mongostat100.10.0 版本。

mongostat 是一个命令行工具,可以让您快速了解当前运行的 mongodmongos 实例的状态。使用 mongostat 有助于识别系统瓶颈。

mongostat 在功能上与 UNIX/Linux 文件系统实用程序 vmstat 类似,但提供了有关 mongodmongos 实例的数据。

从系统命令行运行 mongostat,而非 mongo shell。

mongostat 事务语法:

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

返回有关 mongostat 的选项和使用的信息。

--verbose, -v

增加标准输出或日志文件中返回的内部报告数量。通过包括多个 -v 选项来提高详细程度,(例如 -vvvvv。)

--version

返回 mongostat 版本号。

--config=<filename>

版本 100.3.0 中的新增内容

指定包含以下 mongostat 选项的敏感值的 YAML 配置文件的完整路径:

除通过密码提示来指定密码之外,这是为 mongostat 指定密码的另一推荐方法。

配置文件采用以下形式:

password: <password>
uri: mongodb://mongodb0.example.com:27017
sslPEMKeyPassword: <password>

password: 字段指定密码并在 uri: 字段中提供包含冲突密码的连接字符串将导致错误。

请务必使用相应的文件系统权限保护此文件。

注意

如果使用 --config 来指定配置文件,并使用 --password--uri--sslPEMKeyPassword 选项来 mongostat,那么每个命令行选项均会覆盖其在配置文件中的相应选项。

--uri=<connectionString>

指定 MongoDB 部署的可解析 URI 连接字符串(用引号括起):

--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]"

mongostat100.0 版本开始,也可以将连接字符串作为位置参数提供,而无需使用 --uri 选项:

mongostat mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

作为位置参数,可以在命令行上的任何位置指定连接字符串,前提是它以 mongodb://mongodb+srv:// 开头。例如:

mongostat --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl

只能提供一个连接字符串。无论是使用 --uri 选项还是作为位置参数,尝试纳入多个连接字符串都会导致错误。

有关连接字符串的组件信息,请参阅连接字符串 URI 格式文档。

注意

connection string 中的某些组件也可以使用各自的显式命令行选项来指定,例如 --username--password。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。

注意

如果是在 Ubuntu 18.04 上使用 mongostat,则在使用带 --uri 选项的 SRV 连接字符串(采用 mongodb+srv:// 格式)时,可能会出现“cannot unmarshal DNS”错误消息。如果是这样,请改用以下选项之一:

警告

在某些系统上,使用 --uri 选项在连接字符串中提供的密码,可能会被其他用户调用的系统状态程序(如 ps )探测到。请考虑:

  • 在连接字符串中省略密码,接收交互式密码提示,或者

  • 使用 --config 选项指定包含密码的配置文件。

--host=<hostname><:port>, -h=<hostname><:port>

默认:localhost:27017

指定 MongoDB 部署的可解析主机名。默认情况下,mongostat 尝试连接到在本地主机端口号 27017 上运行的 MongoDB 实例。

要连接到副本集,您可以指定要报告的一个或多个副本集成员,如下所示(另请参阅 --discover 标志):

--host=<hostname1><:port>,<hostname2><:port>,<...>

如果您使用 IPv6 并采用 <address>:<port> 格式,则须将地址与端口的组合部分用方括号括起(即 [<address>])。

或者,您也可直接在 URI connection string 中指定主机名。在提供连接字符串的同时使用 --host 并指定冲突信息将导致错误。

--port=<port>

默认值:27017

指定 MongoDB 实例侦听客户端连接的 TCP 端口。

或者,也可以直接在 URI connection string 中指定端口。在提供连接字符串的同时使用 --port 并指定冲突信息将导致错误。

--ssl

支持链接到启用 TLS/SSL 支持的 mongodmongos

或者,也可以直接在URI connection string 中配置 TLS/SSL 支持。在提供连接字符串的同时使用 --ssl 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--sslCAFile=<filename>

指定包含来自证书颁发机构的根证书链的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

或者,也可以直接在 URI connection string 中指定 .pem 文件。在提供连接字符串的同时使用 --sslCAFile 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--sslPEMKeyFile=<filename>

指定同时包含 TLS/SSL 证书和密钥的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

使用--ssl选项连接到已启用CAFile且未启用allowConnectionsWithoutCertificatesmongodmongos时,需要使用此选项。

或者,也可以直接在 URI connection string 中指定 .pem 文件。在提供连接字符串的同时使用 --sslPEMKeyFile 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--sslPEMKeyPassword=<value>

指定解密证书密钥文件的密码(即 --sslPEMKeyFile)。仅当证书密钥文件已加密时才能使用 --sslPEMKeyPassword 选项。在所有情况下,mongostat 都会对所有日志记录和报告输出中的密码进行脱敏。

如果 PEM 文件中的私钥已加密,并且您未指定 --sslPEMKeyPassword 选项,mongostat 将提示输入密码。请参阅 TLS/SSL 证书密码

或者,您也可以直接在 URI connection string 中指定密码。在提供连接字符串的同时使用 --sslPEMKeyPassword 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

警告

在某些系统上,直接使用 --sslPEMKeyPassword 选项提供的密码,可能会被其他用户调用的系统状态程序(如 ps)探测到。可以考虑使用 --config 选项,指定一个包含密码的配置文件。

--sslCRLFile=<filename>

指定包含证书吊销列表的 .pem 文件。使用相对或绝对路径指定 .pem 文件的文件名。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--sslAllowInvalidCertificates

绕过对服务器证书的验证检查并允许使用无效证书。 使用allowInvalidCertificates设置时,MongoDB 将使用无效证书记录为警告。

警告

尽管可用,但请尽可能避免使用 --sslAllowInvalidCertificates 选项。如果需要使用 --sslAllowInvalidCertificates,请仅在不可能入侵的系统上使用该选项。

在未验证服务器证书的情况下,连接到 mongodmongos 实例存在潜在的安全风险。如果只需禁用 TLS/SSL 证书中的主机名验证,请参阅 --sslAllowInvalidHostnames

或者,也可以直接在 URI connection string 中禁用证书验证。在提供连接字符串的同时使用 --sslAllowInvalidCertificates 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--sslAllowInvalidHostnames

禁用 TLS/SSL 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持 mongostat 连接到 MongoDB 实例。

或者,您也可以直接在 URI connection string 中禁用主机名验证。在提供连接字符串的同时使用 --sslAllowInvalidHostnames 并指定冲突信息将导致错误。

有关 TLS/SSL 和 MongoDB 的更多信息,请参阅为 TLS/SSL 配置 mongod 和 mongos客户端的 TLS/SSL 配置。

--username=<username>, -u=<username>

指定用户名,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --password--authenticationDatabase 选项配合使用。

或者,也可直接在 URI connection string 中指定用户名。在提供连接字符串的同时使用 --username 并指定冲突信息将导致错误。

如果使用 MONGODB-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 访问密钥 ID:

请参阅 使用 AWS IAM 凭证连接到 MongoDB Atlas 集群 ,了解每个凭证的示例。

--password=<password>, -p=<password>

指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与 --username--authenticationDatabase 选项结合使用。

如要提示用户输入密码,可使用不带 --password--username 选项,或指定空字符串作为 --password 值,如 --password=""

或者,您也可以直接在 URI connection string 中指定密码。在提供连接字符串的同时使用 --password 并指定冲突信息将导致错误。

如果使用 MONGODB-AWS authentication mechanism 连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

警告

在某些系统上,直接使用 --password 选项提供的密码,可能会被其他用户调用的系统状态程序(如 ps)探测到。请考虑:

  • 省略 --password 选项,从而接收交互式密码提示,或

  • 使用 --config 选项指定包含密码的配置文件。

--awsSessionToken=<AWS Session Token>

如果使用 MONGODB-AWSauthentication mechanism 连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:

请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。

仅在使用 MONGODB-AWS authentication mechanism 时有效。

--authenticationDatabase=<dbname>

指定已创建指定 --username 的身份验证数据库。请参阅身份验证数据库

对于使用自管理部署的身份验证mongodmongos 实例,--authenticationDatabase 是必需的。

如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或 MONGODB-AWS authentication mechanisms,则须将 --authenticationDatabase 设为 $external

或者,也可以直接在 URI connection string 中指定身份验证数据库。在提供连接字符串的同时使用 --authenticationDatabase 并指定冲突信息将导致错误。

--authenticationMechanism=<name>

默认值:SCRAM-SHA-1

指定 mongostat 实例用来向 mongodmongos 进行身份验证的机制。

在版本 100.1.0 中进行了更改:从版本 100.1.0 开始,mongostat 在连接到 MongoDB Atlas 集群时增加了对 MONGODB-AWS 身份验证机制的支持。

说明

RFC 7677 使用 SHA-256 哈希函数的标准 Salted Challenge Response Authentication Mechanism

需将 featureCompatibilityVersion 设为 4.0

MongoDB TLS/SSL 证书身份验证。
MONGODB-AWS

使用 AWS IAM 凭据进行外部身份验证,用于连接到 MongoDB Atlas 集群。请参阅使用 AWS IAM 凭证连接到 MongoDB Atlas 集群

100.1.0 版本新增

GSSAPI (Kerberos)
使用 Kerberos 的外部身份验证。此机制仅在 MongoDB Enterprise 中可用。
普通版 (LDAP SASL)
使用 LDAP 进行外部身份验证。也可使用 PLAIN 对数据库内用户进行身份验证。PLAIN 以纯文本形式传输密码。此机制仅在 MongoDB Enterprise 中可用。

或者,也可以直接在 URI connection string 中指定身份验证机制。在提供连接字符串的同时使用 --authenticationMechanism 并指定冲突信息将导致错误。

--gssapiServiceName=<string>

使用 GSSAPI/Kerberos 指定服务名称。仅当服务未使用默认名称 mongodb 时才需要。

此选项仅在 MongoDB Enterprise 中可用。

--gssapiHostName=<string>

使用 GSSAPI/Kerberos 指定服务的主机名。当机器的主机名与 DNS 解析的主机名不匹配时才需要。

此选项仅在 MongoDB Enterprise 中可用。

--humanReadable=<boolean>

默认值:true

当为 true 时,mongostat 会格式化日期和数量值以便于读取,如以下示例输出所示:

insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
991 *0 *0 *0 0 2|0 3.4% 4.5% 0 2.90G 297M 0|0 0|0 12.9m 84.2k 2 Oct 6 09:45:37.478
989 *0 *0 *0 0 2|0 3.6% 4.7% 0 2.91G 310M 0|0 0|0 12.9m 84.1k 2 Oct 6 09:45:38.476
988 *0 *0 *0 0 1|0 3.7% 4.8% 0 2.92G 323M 0|0 0|0 12.8m 83.8k 2 Oct 6 09:45:39.481
976 *0 *0 *0 0 2|0 3.9% 5.0% 0 2.94G 335M 0|0 0|0 12.7m 83.7k 2 Oct 6 09:45:40.476

false 时,mongostat 将返回原始数据,如以下示例输出所示:

insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
992 *0 *0 *0 0 2|0 1.3 2.4 0 2941255680 149946368 0|0 0|0 12913607 84271 2 2016-10-06T09:45:25-04:00
989 *0 *0 *0 0 1|0 1.5 2.6 0 2974810112 163577856 0|0 0|0 12873225 84087 2 2016-10-06T09:45:26-04:00
996 *0 *0 *0 0 1|0 1.6 2.8 0 2972712960 177209344 0|0 0|0 12955423 84345 2 2016-10-06T09:45:27-04:00
987 *0 *0 *0 0 1|0 1.8 2.9 0 2989490176 190840832 0|0 0|0 12861852 84008 2 2016-10-06T09:45:28-04:00
-o=<field list>

使用 -o 指定输出字段时,mongostat 输出中仅包含指定的字段。

使用点表示法指定 serverStatus fields,如 metrics.document.inserted 中所示。

自定义字段名可以包含空格。如果包含空格,不要在字段名称前后再添加引号。要为字段指定自定义名称,请使用 <field>=<customName>,如下所示:

mongostat -o='host=H,time=T,version=MongoDB Version'

-o 支持以下方法来修改返回的给定服务器状态字段信息:

.rate()

使用 .rate() 查看 serverStatus 字段从 mongostat 调用更改到调用的每秒速率。

查看字段的更改率 .rate() 演示了如何结合使用 mongostat-o.rate() 方法。

.diff()

使用 .diff() 查看 serverStatus 字段自上次 mongostat 调用以来的变化程度。调用的间隔时间由 <sleeptime> 指定。

使用以下选项查看字段更改 .diff() 演示了如何结合使用 mongostat-o.diff() 方法。

mongostat 支持指定 -o-O:您不能同时包含这两个选项。

请参阅指定 mongostat 输出字段,了解 -o 的示例。

-O=<field list>

指定后,mongostat 将在默认 mongostat 输出后包含指定的 serverStatus 字段。

使用点表示法指定 serverStatus fields,如 metrics.document.inserted 中所示。

自定义字段名可以包含空格。如果包含空格,不要在字段名称前后再添加引号。要为字段指定自定义名称,请使用 <field>=<customName>,如下所示:

mongostat -O=host=H,time=T

mongostat 支持指定 -O-o:您不能同时包含这两个选项。

有关 -O 的示例,请参阅将字段添加到 mongostat 输出。

--noheaders

禁用列名或字段名的输出。

--rowcount=<number>, -n=<number>

控制要输出的行数。与 sleeptime 参数结合使用可控制 mongostat 操作的持续时间。

除非指定 --rowcount,否则 mongostat 将返回无限行数(例如值为 0)。

--discover

发现并报告副本集分片集群所有成员的统计信息。当连接到副本集的任意成员时,--discover 复制集的所有非隐藏成员。当连接到 mongos 时,mongostat 将返回集群中所有分片的数据。如果副本集在分片集群中提供了分片,mongostat 将报告该副本集的非隐藏成员。

mongostat --host 选项并非必需,但在此情况下可能有用。

使用 --discover 运行时,mongostat 遵循 --rowcount

--all

配置 mongostat 以返回所有可选的字段。

--json

JSON 格式返回 mongostat 的输出结果。

--interactive

在交互式非滚动界面显示 mongostat 输出,而不是默认的滚动输出。

--interactive 不能与 --json 选项一起使用。

请参阅在交互式界面中查看统计数据--interactive 的示例)。

<sleeptime>

默认值:1

最后一个 mongostat 参数表示 mongostat 在两次调用之间等待的时长(以秒为单位)。默认情况下,mongostat 每秒返回一次调用。

mongostat 返回反映1秒内操作的值。 如果<sleeptime>的值大于1 , mongostat会对数据求平均值以反映每秒的平均操作数。

mongostat 返回反映1秒内操作的值。 当mongostat <sleeptime>的值大于1时, mongostat会对统计数据求平均值以反映每秒的平均操作数。

mongostat 输出以下字段:

inserts

每秒插入数据库的对象数量。如果后面有星号(例如 *),数据指的是复制操作。

query

每秒查询操作数。

update

每秒更新操作数。

delete

每秒删除操作数。

getmore

get more(即,游标批处理)操作的数量。

command

每秒的命令数。在从节点系统上,mongostat 表示由竖线字符(例如 |)分隔的两个值,其命令形式为 local|replicated

flushes

对于 WiredTiger 存储引擎flushes 是指在每个轮询间隔之间触发的 WiredTiger 检查点的数量。

dirty

仅适用于 WiredTiger 存储引擎。包含脏数据字节的 WiredTiger 缓存的百分比,通过 wiredTiger.cache.tracked dirty bytes in the cache / wiredTiger.cache.maximum bytes configured 计算得出。

used

仅适用于 WiredTiger 存储引擎。使用中的 WiredTiger 缓存百分比,计算公式为 wiredTiger.cache.bytes currently in the cache / wiredTiger.cache.maximum bytes configured

vsize

上次调用 mongostat 时进程所用的虚拟内存大小(以 MB 为单位)。

res

上次调用 mongostat 时进程所用的常驻内存大小(以 MB 为单位)。

locked

处于全局写锁状态的时间百分比。仅当 mongostat 针对 3.0 之前的 MongoDB 实例版本运行时才会出现。

qr

等待从 MongoDB 实例读取数据的客户端队列的长度。

qw

等待从 MongoDB 实例写入数据的客户端队列的长度。

ar

正在执行读取操作的活动客户端数量。

aw

执行写入操作的活动客户端数。

netIn

MongoDB 实例接收的网络流量(以 B 为单位)。

这包括来自 mongostat 本身的流量。

netOut

MongoDB 实例发送的网络流量(以 B 为单位)。

这包括来自 mongostat 本身的流量。

conn

打开的连接总数。

set

副本集的名称(如果适用)。

repl

成员的复制状态。

复制类型
PRI
SEC
REC
恢复
UNK
未知
RTR
mongos 进程(“路由器”)
ARB

有关监控 MongoDB 的更多信息,请参阅 针对 MongoDB 的监控

有关其他 MongoDB 状态输出的更多背景信息,请参阅:

有关提供 MongoDB 指标的其他实用工具,请参阅 mongotop

后退

示例