mongostat
本文档适用于mongostat
的版本100.10.0
。
概述
mongostat
是一个命令行工具,可快速概述当前运行中的mongod
或 mongos
实例的状态。使用 mongostat
帮助识别系统瓶颈。
mongostat
在功能上类似于 UNIX/Linux 文件系统工具 vmstat
,但提供了关于 mongod
和 mongos
实例的数据。
在系统命令行中运行 mongostat
,而不是 mongo
脚本。
语法
mongostat
语法
mongostat <options> <connection-string> <polling interval in seconds>
选项
--config=<filename>
新增于100.3.0.
版本
--sslPEMKeyPassword
这是指定
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]]" 从
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 格式 文档。
注意
连接字符串中的一些组件可以使用它们自己的明确命令行选项来指定,例如
--username
和--password
。在提供连接字符串的同时使用明确选项并指定冲突信息将会导致错误。注意
如果在 Ubuntu 18.04 上使用
mongostat
,当使用带--uri
选项的 SRV 连接字符串(形式为mongodb+srv://
)时,可能会遇到cannot unmarshal DNS
错误信息。如果是这样,请改用以下选项之一使用
--uri
选项并指定一个 非 SRV 连接字符串(形式为mongodb://
)使用
--host
选项来指定要直接连接到的主机
--host=<hostname><:port>, -h=<hostname><:port>
默认值: localhost:27017
指定 MongoDB 部署的解析主机名。默认情况下,
mongostat
尝试连接到运行在本地主机上的 MongoDB 实例,端口为27017
。要连接到副本集,您可以指定要报告的集合成员或成员,如下所示(另请参阅
--discover
标志)--host=<hostname1><:port>,<hostname2><:port>,<...> 如果您使用 IPv6 并使用
<address>:<port>
格式,必须将地址和端口号组合的部分放在括号内(例如,[<address>]
)。或者,您还可以在
URI 连接字符串
中直接指定主机名。在提供连接字符串的同时使用--host
并指定冲突信息将导致错误。
--port=<port>
默认值: 27017
指定 MongoDB 实例监听客户端连接的 TCP 端口。
或者,您还可以在
URI 连接字符串
中直接指定端口。在提供连接字符串的同时使用--port
并指定冲突信息将导致错误。
--ssl
启用连接到已启用 TLS/SSL 支持的
mongod
或mongos
。或者,您也可以直接在
URI 连接字符串
中配置 TLS/SSL 支持。在同时使用--ssl
并指定冲突信息的情况下,将会出现错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--sslCAFile=<filename>
指定包含证书颁发机构根证书链的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。或者,您也可以直接在
URI 连接字符串
中指定.pem
文件。在同时使用--sslCAFile
并指定冲突信息的情况下,将会出现错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--sslPEMKeyFile=<filename>
指定包含 TLS/SSL 证书和私钥的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。当使用
--ssl
选项连接到具有mongod
或mongos
并启用CAFile
且未启用allowConnectionsWithoutCertificates
.或者,您也可以直接在
URI 连接字符串
中指定.pem
文件。在同时使用--sslPEMKeyFile
并指定冲突信息时,将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--sslPEMKeyPassword=<value>
指定用于解密证书密钥文件(即
--sslPEMKeyFile
)的密码。只有在证书密钥文件被加密时,才使用--sslPEMKeyPassword
选项。在任何情况下,mongostat
都将从所有日志和报告输出中删除密码。如果 PEM 文件中的私钥被加密,并且您没有指定
--sslPEMKeyPassword
选项,则mongostat
将提示输入密钥短语。请参阅 TLS/SSL 证书密钥短语。或者,您也可以直接在
URI 连接字符串
中指定密码。在同时使用--sslPEMKeyPassword
并指定冲突信息时,将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
警告
在某些系统上,使用
--sslPEMKeyPassword
选项直接提供的密码可能会被系统状态程序(如ps
)看到,这些程序可能由其他用户调用。请考虑使用--config
选项指定包含密码的配置文件。
--sslCRLFile=<filename>
指定包含证书吊销列表的
.pem
文件。使用相对路径或绝对路径指定.pem
文件的文件名。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--sslAllowInvalidCertificates
跳过对服务器证书的验证检查,允许使用无效证书。当使用
allowInvalidCertificates
设置时,MongoDB 会记录使用无效证书的警告。警告
或者,您还可以直接在
URI 连接字符串
中禁用证书验证。同时提供连接字符串并使用--sslAllowInvalidCertificates
并指定冲突信息将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--sslAllowInvalidHostnames
禁用TLS/SSL证书中主机名的验证。允许
mongostat
连接到MongoDB实例,即使它们的证书中的主机名与指定的主机名不匹配。或者,您也可以直接在
URI连接字符串
中禁用主机名验证。在同时使用--uri
、--sslAllowInvalidHostnames
并指定冲突信息时将导致错误。有关 TLS/SSL 和 MongoDB 的更多信息,请参阅 配置 mongod 和 mongos 的 TLS/SSL 和 客户端的 TLS/SSL 配置。
--username=<username>, -u=<username>
指定用于验证连接到使用身份验证的MongoDB数据库的用户名。与
--password
和--authenticationDatabase
选项一起使用。或者,您也可以直接在
URI连接字符串
中指定用户名。在同时使用--uri
、--username
并指定冲突信息时将导致错误。如果使用
MONGODB-AWS
身份验证机制连接到MongoDB Atlas集群,您可以在以下字段中指定您的AWS访问密钥ID:此字段
的
连接字符串
,或AWS_ACCESS_KEY_ID
环境变量。
--password=<password>, -p=<password>
指定一个密码,用于认证到使用认证的MongoDB数据库。与
--username
和--authenticationDatabase
选项一起使用。要提示用户输入密码,请使用不带
--password
的--username
选项,或将--password
的值指定为空字符串,如--password=""
。或者,您也可以直接在
URI连接字符串
中指定密码。提供连接字符串的同时使用--password
并指定冲突的信息将导致错误。如果使用
MONGODB-AWS
认证机制连接到MongoDB Atlas集群,您可以在此字段
的
连接字符串
,或AWS_SECRET_ACCESS_KEY
环境变量中指定您的AWS密钥访问密钥。
有关每个示例,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
警告
在某些系统中,使用
--password
选项直接提供的密码可能会被系统状态程序(如ps
)看到,这些程序可能由其他用户调用。请考虑省略
--password
选项,以接收交互式密码提示,或者使用
--config
选项来指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用 MongoDB Atlas 集群并使用
MONGODB-AWS
认证机制
,并且除了您的 AWS 访问密钥 ID 和秘密访问密钥外还使用会话密钥,您可以在此字段
AWS_SESSION_TOKEN
authMechanismProperties
参数中指定您的 AWS 会话密钥到连接字符串
,或者环境变量
AWS_SESSION_TOKEN
。
有关每个示例,请参阅使用AWS IAM凭据连接到MongoDB Atlas集群。
仅在使用
MONGODB-AWS
认证机制
时有效。
--authenticationDatabase=<dbname>
指定已创建指定
--username
的认证数据库。见 认证数据库。--authenticationDatabase
对于使用mongod
和mongos
实例的 自管理部署认证。如果使用郭萨皮(GSSAPI)(Kerberos)、明文(PLAIN)(LDAP SASL)或
MONGODB-AWS
认证机制,您必须将--authenticationDatabase
设置为$external
。或者,您还可以直接在
URI连接字符串
中指定认证数据库。当同时使用--authenticationDatabase
并指定冲突信息时,将会产生错误。
--authenticationMechanism=<name>
默认值:SCRAM-SHA-1
指定
mongostat
实例用于认证mongod
或mongos
的认证机制。更改于100.1.0: 从版本
100.1.0
开始,mongostat
在连接到MongoDB Atlas集群时,增加了对MONGODB-AWS
认证机制的支持。值描述RFC 5802 标准的基于SHA-1散列函数的盐值挑战响应认证机制。RFC 7677 标准的基于SHA-256散列函数的盐值挑战响应认证机制。
需要将featureCompatibilityVersion设置为
4.0
。MongoDB TLS/SSL证书认证。MONGODB-AWS
使用AWS IAM凭证进行外部认证,用于连接到MongoDB Atlas集群。请参阅使用AWS IAM凭证连接MongoDB Atlas集群。
新增于100.1.0.
GSSAPI (Kerberos)使用Kerberos进行外部认证。此机制仅在MongoDB Enterprise.中可用。PLAIN (LDAP SASL)或者,您也可以直接在
URI连接字符串
中指定认证机制。在同时使用--authenticationMechanism
并指定冲突信息时,将会导致错误。
--gssapiServiceName=<string>
使用GSSAPI/Kerberos指定服务名称。只有在服务不使用默认名称
mongodb
时才需要。此选项仅在MongoDB企业版中可用。
--gssapiHostName=<string>
使用GSSAPI/Kerberos指定服务的主机名。只有在机器的主机名与DNS解析的主机名不匹配时才需要。
此选项仅在MongoDB企业版中可用。
--humanReadable=<布尔值>
默认值: 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=<字段列表>
当使用
-o
指定输出字段时,只有指定的字段将包含在mongostat
输出中。使用点符号指定
serverStatus 字段
,例如metrics.document.inserted
。自定义字段名可以包含空格。如果您包含空格,不要在字段名周围放置额外的引号。要指定字段的自定义名称,请使用
<字段>=<自定义名称>
,例如mongostat -o='host=H,time=T,version=MongoDB Version' -o
支持以下方法修改给定 serverStatus 字段返回的信息.rate()
使用
.rate()
来查看从一次mongostat
调用到下一次调用的服务器状态字段变化率。使用
.rate()
查看字段变化率.rate()
展示了如何使用mongostat
与-o
和.rate()
方法。
.diff()
使用
.diff()
来查看自上次mongostat
调用以来服务器状态字段的变化量。调用间隔由<sleeptime>
指定。使用
.diff()
查看字段变化.diff()
展示了如何使用mongostat
与-o
和.diff()
方法。
mongostat
支持指定 任选其一-o
或-O
:不能同时包含这两个选项。请参阅指定
mongostat
输出字段,以了解-o
的示例。
-O=<field list>
当指定时,
mongostat
在默认mongostat
输出之后包含指定的serverStatus
字段。使用点符号指定
serverStatus 字段
,例如metrics.document.inserted
。自定义字段名可以包含空格。如果您包含空格,不要在字段名周围放置额外的引号。要指定字段的自定义名称,请使用
<字段>=<自定义名称>
,例如mongostat -O=host=H,time=T mongostat
支持指定 任选其一-O
或-o
:您不能同时包含这两个选项。请参阅向
mongostat
输出添加字段,以了解-O
的示例。
--rowcount=<number>, -n=<number>
控制输出的行数。与
sleeptime
参数一起使用来控制mongostat
操作的持续时间。如果没有指定
--rowcount
,则mongostat
将返回无限多的行(例如,值为0
)。
--discover
发现并报告副本集或分片集群的所有成员的统计信息。当连接到副本集的任何成员时,
--discover
将报告副本集中所有非隐藏成员。当连接到mongos
时,mongostat
将返回集群中所有分片的数据。如果副本集在分片集群中提供了一个分片,则mongostat
将报告该副本集的非隐藏成员。在这种情况下,
mongostat --host
选项不是必需的,但可能很有用。在运行
--discover
时,mongostat
将遵守--rowcount
。
--all
配置
mongostat
以返回所有可选的 字段。
--interactive
在交互式非滚动界面中显示
mongostat
的输出,而不是默认的滚动输出。--interactive
选项与--json
选项不可用。参见:在交互式界面中查看统计数据查看示例,了解
--interactive
的用法。
字段
mongostat
返回反映1秒内操作的值。当<sleeptime>
的值大于1时,mongostat
将统计数据平均以反映每秒的平均操作。
mongostat
输出以下字段
插入
每秒插入到数据库中的对象数量。如果后面跟有星号(例如,
*
),则数据表示复制操作。
查询
每秒的查询操作数量。
更新
每秒的更新操作数量。
删除
每秒的删除操作数量。
获取更多
每秒的获取更多(即游标批量)操作数量。
命令
每秒命令数量。在辅助系统上,
mongostat
以竖线字符(例如|
)分隔的形式呈现两个值,形式为local|replicated
命令。
刷新
对于WiredTiger 存储引擎,
刷新
指的是在每个轮询间隔之间触发的 WiredTiger 检查点的数量。
脏
仅适用于WiredTiger 存储引擎。WiredTiger 缓存中脏字节的百分比,通过
wiredTiger.cache.tracked dirty bytes in the cache
/wiredTiger.cache.maximum bytes configured
计算。
使用中
仅适用于WiredTiger 存储引擎。WiredTiger 缓存中使用中的百分比,通过
wiredTiger.cache.bytes currently in the cache
/wiredTiger.cache.maximum bytes configured
计算。
虚拟大小
在最后一次
mongostat
调用时的进程使用的虚拟内存量(以兆字节为单位)。
常驻内存
在最后一次
mongostat
调用时的进程使用的常驻内存量(以兆字节为单位)。
锁定
全局写锁的百分比时间。仅在针对 MongoDB 实例的
mongostat
运行在 3.0 版本之前的版本时出现。
qr
等待从 MongoDB 实例读取数据的客户端队列长度。
qw
等待向 MongoDB 实例写入数据的客户端队列长度。
ar
执行读取操作的活跃客户端数量。
aw
执行写入操作的活跃客户端数量。
netIn
MongoDB 实例接收到的网络流量量(以字节为单位)。
这包括来自
mongostat
自身的流量。
netOut
MongoDB 实例发送的网络流量量(以字节为单位)。
这包括来自
mongostat
自身的流量。
conn
打开连接的总数。
集
如果适用,则为副本集的名称。
复制
成员的复制状态。
附加信息
有关监视MongoDB的更多信息,请参阅监视MongoDB。
有关其他MongoDB状态输出的更多信息,请参阅
有关提供MongoDB度量值的附加实用工具,请参阅mongotop
。