mongotop
本文档适用于 mongotop
的 100.10.0
版本。
Synopsis
mongotop
是一个命令行工具,提供了一种跟踪 MongoDB 实例mongod
读取和写入数据所花费时间的方法。mongotop
提供每个集合级别的统计信息。默认情况下,mongotop
每秒返回一次值。
语法
mongotop
事务语法:
mongotop <options> <connection-string> <polling interval in seconds>
在没有任何命令行选项的情况下运行 mongotop
,通过端口 mongod
连接到在本地主机上运行的 27017
实例,并且默认情况下每秒返回一次值。
mongotop
为使 mongotop
每 30 秒报告一次,请指定轮询间隔:
mongotop 30
当连接到 mongod
实例时,程序首先报告连接情况,然后按照配置的频率报告统计数据。
2019-04-29T15:35:27.785-0400 connected to: 127.0.0.1 ns total read write <timestamp> <db.collection> 81802ms 0ms 81802ms ...
命令行选项
mongotop [options] [frequency]
您可以使用多种命令行选项来运行 mongotop
。
例如,要将 mongotop
连接到在远程主机 mongodb0.example.com
上运行的 mongod
实例并每 30 秒报告一次:
您可以包含所需的报告频率(在本例中为 30 秒)和
--uri
选项,以指定主机和端口:mongotop 30 --uri='mongodb://mongodb0.example.com:27017' [additional options] 如果
mongod
实例需要身份验证,可以指定用户、密码和身份验证数据库作为 URI 连接字符串的一部分:mongotop 30 --uri='mongodb://user:password@mongodb0.example.com:27017/?authSource=admin' [additional options] 运行
mongotop
的用户必须拥有serverStatus
和top
权限。有关 URI 连接字符串的更多信息,请参阅
--uri
。或者,也可使用
--host
和--port
选项来指定主机和端口:mongotop 30 --host=mongodb0.example.com --port=27017 [additional options] 如果
mongod
实例需要身份验证,则您可以指定用户-u
和身份验证数据库--authenticationDatabase
。省略--password
选项,让mongoexport
提示输入密码。mongotop 30 --host=mongodb0.example.com --port=27017 -u=user --authenticationDatabase=admin [additional options] 运行
mongotop
的用户必须拥有serverStatus
和top
权限。
有关可用选项的更多信息,请参阅选项。
当连接到 mongod
实例时,程序首先报告连接情况,然后按照配置的频率报告统计数据。
2019-04-29T15:35:27.785-0400 connected to: 127.0.0.1 ns total read write <timestamp> <db.collection> 81802ms 0ms 81802ms ...
选项
--quiet
在尝试限制输出量的安静模式下运行
mongotop
。该选项会抑制:
数据库命令输出
复制活动
连接接受事件
连接关闭事件
--config=<filename>
版本 100.3.0 中的新增内容。
指定包含以下
mongotop
选项的敏感值的 YAML 配置文件的完整路径:除通过密码提示来指定密码之外,这是为
mongotop
指定密码的另一推荐方法。配置文件采用以下形式:
password: <password> uri: mongodb://mongodb0.example.com:27017 sslPEMKeyPassword: <password> 向
password:
字段指定密码并在uri:
字段中提供包含冲突密码的连接字符串将导致错误。请务必使用相应的文件系统权限保护此文件。
注意
如果使用
--config
来指定配置文件,并使用--password
、--uri
或--sslPEMKeyPassword
选项来mongotop
,那么每个命令行选项均会覆盖其在配置文件中的相应选项。
--uri=<connectionString>
指定 MongoDB 部署的可解析 URI 连接字符串(用引号括起):
--uri="mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]" 从
mongotop
的100.0
版本开始,也可以将连接字符串作为位置参数提供,而无需使用--uri
选项:mongotop mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] 作为位置参数,可以在命令行上的任何位置指定连接字符串,前提是它以
mongodb://
或mongodb+srv://
开头。例如:mongotop --username joe --password secret1 mongodb://mongodb0.example.com:27017 --ssl 只能提供一个连接字符串。无论是使用
--uri
选项还是作为位置参数,尝试纳入多个连接字符串都会导致错误。有关连接字符串的组件信息,请参阅连接字符串 URI 格式文档。
注意
connection string
中的某些组件也可以使用各自的显式命令行选项来指定,例如--username
和--password
。在提供连接字符串的同时,使用显式选项并指定冲突信息会导致错误。注意
如果是在 Ubuntu 18.04 上使用
mongotop
,则在使用带--uri
选项的 SRV 连接字符串(采用mongodb+srv://
格式)时,可能会出现“cannot unmarshal DNS
”错误消息。如果是这样,请改用以下选项之一:带有 非 SRV 连接字符串(格式为
mongodb://
)的--uri
选项--host
选项指定直接连接的主机
--host=<hostname><:port>, -h=<hostname><:port>
默认:localhost:27017
指定 MongoDB 部署的可解析主机名。默认情况下,
mongotop
尝试连接到在本地主机端口号27017
上运行的 MongoDB 实例。要连接到副本集,请指定
replSetName
和副本集成员的种子列表,如下所示:--host=<replSetName>/<hostname1><:port>,<hostname2><:port>,<...> 指定副本集列表格式时,
mongotop
始终连接到主节点。还可以通过仅指定该成员的主机和端口来连接至副本集的任何单个成员:
--host=<hostname1><:port> 如果您使用 IPv6 并采用
<address>:<port>
格式,则须将地址与端口的组合部分用方括号括起(即[<address>]
)。或者,您也可直接在
URI connection string
中指定主机名。在提供连接字符串的同时使用--host
并指定冲突信息将导致错误。如果连接到主节点无法连接的副本集,
mongotop
将返回错误信息。
--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
选项。在所有情况下,mongotop
都会对所有日志记录和报告输出中的密码进行脱敏。如果 PEM 文件中的私钥已加密,并且您未指定
--sslPEMKeyPassword
选项,mongotop
将提示输入密码。请参阅 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 证书中的主机名验证。即使证书中的主机名与指定的主机名不匹配,也支持
mongotop
连接到 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_ACCESS_KEY_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_SECRET_ACCESS_KEY
环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
警告
在某些系统上,直接使用
--password
选项提供的密码,可能会被其他用户调用的系统状态程序(如ps
)探测到。请考虑:省略
--password
选项,从而接收交互式密码提示,或使用
--config
选项指定包含密码的配置文件。
--awsSessionToken=<AWS Session Token>
如果使用
MONGODB-AWS
authentication mechanism
连接到 MongoDB Atlas 集群,并且除了 AWS 访问密钥 ID 和私密访问密钥之外还使用会话令牌,则可以在以下情况中指定 AWS 会话令牌:这个字段,
connection string
的AWS_SESSION_TOKEN
authMechanismProperties
参数,或AWS_SESSION_TOKEN
环境变量。
请参阅使用 AWS IAM 凭据连接到 MongoDB Atlas 集群,了解每个凭据的示例。
仅在使用
MONGODB-AWS
authentication mechanism
时有效。
--authenticationDatabase=<dbname>
指定已在其中创建指定的
--username
的身份验证数据库。在自管理部署上使用身份验证的mongod
和mongos
实例需要使用--authenticationDatabase
。请参阅身份验证数据库。如果使用的是 GSSAPI (Kerberos)、PLAIN (LDAP SASL) 或
MONGODB-AWS
authentication mechanisms
,则须将--authenticationDatabase
设为$external
。或者,也可以直接在
URI connection string
中指定身份验证数据库。在提供连接字符串的同时使用--authenticationDatabase
并指定冲突信息将导致错误。
--authenticationMechanism=<name>
默认值:SCRAM-SHA-1
指定
mongotop
实例用来向mongod
或mongos
进行身份验证的机制。在版本 100.1.0 中进行了更改:从版本
100.1.0
开始,mongotop
在连接到 MongoDB Atlas 集群时增加了对MONGODB-AWS
身份验证机制的支持。值说明使用 SHA-1 哈希函数的 RFC 5802 标准 Salted 质询响应身份验证机制。
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=<serviceName>
使用 GSSAPI/Kerberos 指定服务名称。仅当服务未使用默认名称
mongodb
时才需要。此选项仅在 MongoDB Enterprise 中可用。
--gssapiHostName=<hostname>
使用 GSSAPI/Kerberos 指定服务的主机名。仅当机器的主机名与 DNS 解析的主机名不匹配时才需要。
此选项仅在 MongoDB Enterprise 中可用。
--locks
切换
mongotop
的模式以报告每个数据库的锁使用情况。此数据仅在连接 MongoDB 2.6 或更早版本的实例时可用。
--json
以 JSON 格式返回
mongotop
的输出结果。除定时数据外,--json
选项还返回轮询间隔期间发生的操作次数。
字段
当连接到 mongod
实例时,程序首先会报告连接情况,然后按照配置的频率报告统计信息。mongotop
会返回以毫秒 (ms) 为单位的时间值。
2019-04-29T15:35:27.785-0400 connected to: 127.0.0.1 ns total read write <timestamp> <db.collection> 81802ms 0ms 81802ms ... ns total read write <timestamp> <db.collection> 0ms 0ms 0ms ...
mongotop
仅报告活跃命名空间或数据库,具体取决于 --locks
选项。如果没有看到数据库或集合,则表明它最近没有收到任何活动。您可以在 mongo
Shell 中发出一个简单操作来生成影响 mongotop
输出的活动。
mongotop.ns
包含数据库命名空间,它将数据库名称和集合组合在一起。
如果使用
mongotop --locks
,ns
字段将不会出现在mongotop
输出中。
mongotop.db
包含数据库名称。名为
.
的数据库引用的是全局锁,而不是某个特定的数据库。除非您使用
--locks
选项调用了mongotop
,否则此字段不会出现。
mongotop.total
提供此
mongod
在此命名空间上运行时花费的总时间。
mongotop.read
提供此
mongod
在此命名空间上执行读取操作时花费的时间。
mongotop.write
提供此
mongod
在该命名空间上执行写操作所花费的时间。
更多信息
有关监控 MongoDB 的更多信息,请参阅 针对 MongoDB 的监控。
有关各种其他 MongoDB 状态输出的更多背景信息,请参阅:
有关提供 MongoDB 指标的其他实用工具,请参阅 mongostat
。