本文档适用于 mongostat 的 100.17.0 版本。
Synopsis
mongostat 是一个命令行工具,可快速概览当前正在运行的mongod 或mongos 实例的状态。使用mongostat 帮助识别系统瓶颈。
mongostat 在功能上与 UNIX/Linux 文件系统实用程序 vmstat 类似,但提供了有关 mongod 和 mongos 实例的数据。
从系统命令行运行 mongostat,而非 mongo shell。
语法
mongostat 事务语法:
mongostat <options> <connection-string> <polling interval in seconds>
选项
--config=<filename>100.3.0版本新增。:
指定 YAML 配置文件的完整路径,该文件包含以下
mongostat选项的敏感值:除通过密码提示来指定密码之外,这是为
mongostat指定密码的另一推荐方法。您可以在文件中使用任何参数的组合。配置文件采用以下形式:
password: <password> uri: mongodb://mongodb0.example.com:27017 sslPEMKeyPassword: <password> 如果您指定了
password选项但未指定uri,则可以使用mongostat命令行选项指定连接字符串的其他组件,例如--username和--host。请务必使用相应的文件系统权限保护此文件。
重要
使用
--config选项时,请注意以下限制和行为:如果您提供
password字段,并在uri字段中提供一个与密码冲突的连接字符串,则mongorestore会抛出错误。如果您使用
--config指定配置文件,并使用--password、--uri或--sslPEMKeyPasswordmongostat命令行选项,则命令行选项将覆盖相应的配置文件选项。
--uri=<connectionString>指定 MongoDB 部署的可解析 URI 连接字符串(用引号括起):
--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" 从
mongostat的100.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 上使用
mongostat18.04 ,则在使用带有 选项的cannot unmarshal DNSSRV 连接字符串(采用mongodb+srv://形式)时,您可能会遇到--uri错误消息。如果是这样,请改用以下选项之一:--uri带有非 SRV连接字符串的 选项(采用mongodb://形式)--host选项指定直接连接的主机
--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 支持的
mongod或mongos。或者,也可以直接在
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且未启用allowConnectionsWithoutCertificates的mongod或mongos时,需要使用此选项。或者,也可以直接在
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 将使用无效证书记录为警告。警告
或者,也可以直接在
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-AWSauthentication mechanism连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 访问密钥 ID:这个字段,
AWS_ACCESS_KEY_ID环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
--password=<password>, -p=<password>指定密码,用于对使用身份验证的 MongoDB 数据库进行身份验证。与
--username和--authenticationDatabase选项结合使用。如要提示用户输入密码,可使用不带
--password的--username选项,或指定空字符串作为--password值,如--password=""。或者,也可以直接在
URI connection string中指定密码。在提供连接字符串的同时使用--password并指定冲突信息将导致错误。如果使用
MONGODB-AWSauthentication mechanism连接到 MongoDB Atlas 集群,您可以在以下位置指定您的 AWS 秘密访问密钥:这个字段,
AWS_SECRET_ACCESS_KEY环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
警告
在某些系统上,直接使用
--password选项提供的密码,可能会被其他用户调用的系统状态程序(如ps)探测到。请考虑:省略
--password选项以接收交互式密码提示,或使用
--config选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>如果使用
MONGODB-AWSauthentication mechanism连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,
connection string的AWS_SESSION_TOKENauthMechanismProperties参数,或AWS_SESSION_TOKEN环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
仅在使用
MONGODB-AWSauthentication mechanism时有效。
--authenticationDatabase=<dbname>指定已创建指定
--username的身份验证数据库。请参阅身份验证数据库。对于使用自管理部署的身份验证的
mongod和mongos实例,--authenticationDatabase是必需的。如果您使用 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或
MONGODB-AWSauthentication mechanisms,则必须将--authenticationDatabase设立为$external。或者,也可以直接在
URI connection string中指定身份验证数据库。在提供连接字符串的同时使用--authenticationDatabase并指定冲突信息,将导致错误。
--authenticationMechanism=<name>默认值:SCRAM-SHA-1
指定
mongostat实例用来向mongod或mongos进行身份验证的机制。在版本100.1.0中进行了更改。:
从版本
100.1.0开始,mongostat添加了在连接 MongoDB Atlas 集群时对MONGODB-AWS身份验证机制的支持。值说明RFC 5802 使用 SHA-1 哈希函数的标准 Salted Challenge Response Authentication Mechanism
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调用更改到调用的每秒速率。
.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输出。
--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的示例)。
字段
mongostat 返回反映1秒内操作的值。 当mongostat <sleeptime>的值大于1时, mongostat会对统计数据求平均值以反映每秒的平均操作数。
mongostat 输出以下字段:
inserts每秒插入数据库的对象数量。如果后面有星号(例如
*),数据指的是复制操作。
query每秒查询操作数。
update每秒更新操作数。
delete每秒删除操作数。
getmoreget 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执行写入操作的活动客户端数。
netInMongoDB 实例接收的网络流量(以 B 为单位)。
这包括来自
mongostat本身的流量。
netOutMongoDB 实例发送的网络流量(以 B 为单位)。
这包括来自
mongostat本身的流量。
conn打开的连接总数。
set副本集的名称(如果适用)。
repl成员的复制状态。
更多信息
有关监控 MongoDB 的更多信息,请参阅 针对 MongoDB 的监控。
有关其他 MongoDB 状态输出的更多背景信息,请参阅:
有关提供MongoDB指标的其他实用程序,请参阅 mongotop。