命令行
本节向您介绍 EMQX 支持的各类启动与管理命令,并详细介绍 ctl 管理命令。
启动命令
EMQX 支持一些基本的启动和管理命令,您可以通过
emqx <command>
命令执行。
以下是常用的启动和管理命令:
命令 | 描述 |
---|---|
start | 以守护进程模式启动 EMQX,运行期间不需要交互式 shell。 |
console | 在 Erlang 或 Elixir 交互式 shell 中启动 EMQX。用于在开发环境中调试 EMQX,需要与 EMQX 进行交互。 |
foreground | 在前台模式下启动 EMQX,不使用交互式 shell。用于在开发环境中启动 EMQX,但不需要后台运行。 |
stop | 停止运行中的 EMQX 节点。 |
ctl |
管理和监控 EMQX,执行
emqx ctl help
可以获取更多详细信息。
|
以下是用于开发调试的高级命令,普通用户通常无需关心:
命令 | 描述 |
---|---|
remote_console | 连接到远程 EMQX 节点的交互式 shell。 |
attach | 附加到正在运行的 EMQX 节点上执行交互式操作。 |
ertspath | 获取 EMQX Erlang 库的路径。 |
root_dir | 获取 EMQX 根目录的路径。 |
pid | 获取正在运行的 EMQX 节点的进程 ID。 |
ping | 检查 EMQX 节点是否正在运行。 |
check_config | 验证 EMQX 配置文件是否正确。 |
console_clean | 清空交互式 shell 控制台输出。 |
escript | 在 EMQX 节点上执行 Escript 脚本。 |
ctl 命令介绍
EMQX
ctl
命令提供了多个用于管理和监控 EMQX 的子命令。
ctl
命令需要在 EMQX 服务启动之后才能运行。
EMQX 也提供了
emqx_ctl
命令,它是emqx ctl
的别名。ctl
命令通过启动一个隐藏的 Erlang 节点的方式,远程连接到指定的 EMQX 节点,并执行一个 Erlang 远程调用然后打印返回的结果,因此需要避免大量的使用ctl
命令。
下面列举了所有
ctl
命令的子命令和相应的简介,本文档旨在介绍命令的功能,命令的详细参数介绍可以用
help
指令查看。
status
快速查看当前运行的节点是否运行。
broker
查看当前节点的运行的版本状态以及运行时长。
observer
可以用于查看运行时状态。展示一个类似于 linux 的
top
命令的界面,子命令如下:
命令 | 描述 |
---|---|
observer status | 在当前控制台启动观察器,用于监视和调试 EMQX 节点的状态和活动。 |
observer bin_leak | 强制所有进程执行垃圾回收,并打印释放最大数量二进制数据的前 100 个进程,可能会显示出潜在的内存泄漏问题。 |
observer load Mod | 确保指定的模块在 EMQX 集群中的所有节点上都已加载。当需要确保模块在整个集群中都可用时,可以使用此命令来加载模块。 |
observer status
observer bin_leak
observer load Mod
conf cluster_sync
该命令用于查看、调查甚至修改集群配置修改的同步状态。
TIP
在 5.0.x 版本中,这个命令的名称是
cluster_call
。老的名字在 EMQX 5.1 中继续有效,但是不会显示在帮助信息中。
EMQX 的 HTTP API 可以用于修改很多配置,当一个 API 被调用,例如通过 Dashboard 界面的操作来修改配置时,在收到这个请求的节点会先将修改的内容在本地写入
data/configs/cluster.hocon
,然后同样的操作会被记录在数据库中,并异步地转发到集群中的其他节点。
当由于某种原因,无法在另一个节点成功执行同样的修改,那么这个命令就可以很方便地查看这个异步复制的状态,甚至可以强制跳过一个失败的复制。
EMQX 会为每个集群范围的配置修改生成一个 ID(tnxid),这个 ID 会在集群范围内严格递增,每个修改,例如从 Dashboard 修改一个配置之后,都会记录在数据库中。下面这个例子,展示的是查看第二(tnxid=2)个修改的内容(这是一个启用 TLS 监听器的操作)。
TIP
skip
指令和
fast_forward
指令会迫使本地节点跳过一些(失败)的操作,这可能会导致集群内节点之间的配置不一致。
admins
用于创建、修改、删除管理员账户,子命令如下:
命令 | 描述 |
---|---|
admins add <Username> <Password> <Description> | 添加 Dashboard 用户 |
admins passwd <Username> <Password> | 重置 Dashboard 指定用户的密码 |
admins del <Username> | 删除指定 Dashboard 用户 |
admins add <Username> <Password> <Description>
admins passwd <Username> <Password>
admins del <Username>
retainer
用于查看和管理 retain 的消息。也可以用于为 retain 表创建索引。
命令 | 描述 |
---|---|
retainer info | 显示保留消息的数量。 |
retainer topics | 显示所有保留消息的主题。 |
retainer clean | 清除所有保留消息。 |
retainer clean <Topic> | 按指定主题过滤器清除保留消息。 |
retainer reindex status | 显示重新索引状态。 |
retainer reindex start [force] | 根据配置设置生成新的保留消息主题索引。将 true 作为 <Force> 参数传递以忽略先前启动的重新索引过程。 |
retainer info
retainer topics
retainer clean
retainer clean <Topic>
retainer reindex status
retainer reindex start [force]
cluster
查看和管理节点的集群状态。需要注意的是,EMQX 加入集群的指令
join
是向参数中指定的节点发送一个"请求",而不是"邀请"。
换句话说,
emqx ctl cluster join <OneOfTheClusteredNodes>
命令用于向
OneOfTheClusteredNodes
所在的集群发送请求以加入,而不是让这个节点加入自身所在的集群。
命令 | 描述 | 使用场景和注意事项 |
---|---|---|
emqx ctl cluster | 控制 EMQX 集群的命令。 | |
cluster join <Node> | 加入集群。 |
- 使用该命令将节点加入到指定节点所在的 EMQX 集群。
- 注意确保指定的节点是活动且可访问的。 |
cluster leave | 离开集群。 | - 使用该命令将节点从当前 EMQX 集群中移除 |
cluster force-leave <Node> | 强制节点离开集群。 |
- 使用该命令强制指定节点离开 EMQX 集群。
- 注意该操作可能导致集群状态不一致,谨慎使用。 |
cluster status [--json] | 查看集群状态。 |
- 使用该命令查看 EMQX 集群的状态信息。
- 可选参数
--json
以 JSON 格式显示集群状态。
- 用于监视和调试集群的健康状况。 |
cluster join <Node>
cluster leave
cluster force-leave <Node>
cluster status [--json]
clients
查看和管理客户端。
命令 | 描述 |
---|---|
clients list | 查看当前连接到 EMQX 的所有客户端,该命令可用于监视活动客户端和连接数量。 |
clients show <ClientId> | 查看特定客户端的详细连接信息。 |
clients kick <ClientId> | 强制断开指定客户端的连接。 |
emqx ctl clients list
emqx ctl clients show <ClientId>
emqx ctl clients kick <ClientId>
TIP
如果系统中连接了大量的客户端
list
指令可能会比较耗时且耗资源。
topics
查看当前系统中所有订阅的主题。
命令 | 描述 |
---|---|
topics list | 列出所有主题,该命令可用于监视主题的数量和分布。 |
topics show <Topic> | 显示特定主题的详细信息。 |
topics list
topics show <Topic>
TIP
如果集群中有大量的主题订阅,
list
指令可能会比较耗时且耗资源。
exclusive
此命令用于查看当前系统中所有排它订阅的主题或删除一个排它订阅主题。
Command | Description |
---|---|
exclusive list | 列出所有排它订阅的主题。 |
exclusive delete <Topic> | 删除排它订阅主题。 |
exclusive list
exclusive delete <Topic>
subscriptions
查看、增加或者删除某个客户端的订阅。
命令 | 描述 |
---|---|
subscriptions list | 列出所有订阅。 |
subscriptions show <ClientId> | 显示特定客户端的订阅。 |
subscriptions add <ClientId> <Topic> <QoS> | 手动添加订阅。 |
subscriptions del <ClientId> <Topic> | 手动删除订阅。 |
subscriptions list
subscriptions show <ClientId>
subscriptions add <ClientId> <Topic> <QoS>
subscriptions del <ClientId> <Topic>
TIP
当系统中有大量的订阅客户端时,
list
指令可能比较耗时且耗资源。
plugins
查看和管理插件。
命令 | 描述 |
---|---|
plugins list | 列出所有已安装的插件。 |
plugins describe <Name-Vsn> | 描述已安装插件的详细信息。 |
plugins allow <Name-Vsn> | 授予通过 Dashboard 安装指定插件的权限。 |
plugins install <Name-Vsn> | 安装一个已放置在插件安装目录下的插件包。 |
plugins uninstall <Name-Vsn> | 卸载指定插件。 |
plugins start <Name-Vsn> | 启动指定插件。 |
plugins stop <Name-Vsn> | 停止指定插件。 |
plugins restart <Name-Vsn> | 重启指定插件。 |
plugins disable <Name-Vsn> | 禁用自动启动插件。 |
plugins enable <Name-Vsn> [Position] | 启用插件的自动启动,并指定启动位置。 |
plugins list
plugins describe <Name-Vsn>
plugins allow <Name-Vsn>
plugins install <Name-Vsn>
plugins uninstall <Name-Vsn>
plugins start <Name-Vsn>
plugins stop <Name-Vsn>
plugins restart <Name-Vsn>
plugins disable <Name-Vsn>
plugins enable <Name-Vsn> [Position]
可以使用
front
,
rear
, 或
before Other-Vsn
来指定一个相对位置用来调整启动顺序。 如果没有给出 Position,已配置好的插件将停留在原来的位置,新的插件会被附加到最后面的位置上。
vm
用于查看 Erlang 虚拟机的运行时状态和指标。
mnesia
用于查看内置数据库(Mnesia)的运行状态和指标。
log
用于管理日志参数,例如日志级别等。
命令 | 描述 |
---|---|
log set-level <Level> | 设置整体日志级别。 |
log primary-level |
显示当前主要日志级别。
primary-level
代表 EMQX 的主要日志级别,用于指定整个系统的默认日志级别。设置
primary-level
会影响所有的日志输出,除非特定的日志处理程序有自己独立的日志级别。
|
log primary-level <Level> | 设置主要日志级别。 |
log handlers list |
显示日志处理 handlers。
handlers
是指定用于处理日志的日志处理程序的集合。每个日志处理程序可以独立设置自己的日志级别,并定义如何处理和存储日志消息。
|
log handlers start <HandlerId> | 启动某个 handler。 |
log handlers stop <HandlerId> | 停止某个 handler。 |
log handlers set-level <HandlerId> <Level> | 设置某个 handler 日志级别。 |
log set-level <Level>
log primary-level
log primary-level <Level>
log handlers list
log handlers start <HandlerId>
log handlers stop <HandlerId>
log handlers set-level <HandlerId> <Level>
trace
用于对一个给定的客户端或主题进行日志追踪。
命令 | 描述 |
---|---|
trace list | 列出本地节点上启动的所有跟踪。 |
trace start client <ClientId> <File> [<Level>] | 为客户端启动跟踪。 |
trace stop client <ClientId> | 停止对客户端的跟踪。 |
trace start topic <Topic> <File> [<Level>] | 为主题启动跟踪。 |
trace stop topic <Topic> | 停止对主题的跟踪。 |
trace start ip_address <IP> <File> [<Level>] | 为客户端 IP 地址启动跟踪。 |
trace stop ip_address <IP> | 停止对客户端 IP 地址的跟踪。 |
trace list
trace start client <ClientId> <File> [<Level>]
trace stop client <ClientId>
trace start topic <Topic> <File> [<Level>]
trace stop topic <Topic>
trace start ip_address <IP> <File> [<Level>]
trace stop ip_address <IP>
TIP
建议在命令行中使用绝对路径指定追踪日志的文件。例如:
emqx ctl trace start client foobar /abs/path/to/trace.log debug
TIP
也可以在控制台界面中管理追踪日志。参考 tracer 文档 。
traces
这个命令跟
trace
命令一样,但是会在整个集群所有节点中都开始或停止一个 tracer,参照上文的 trace 命令即可。
命令 | 描述 |
---|---|
traces list | 列出所有已启动的集群跟踪 |
traces start <Name> client <ClientId> [<Duration>] | 对集群中的一个客户端进行跟踪 |
traces start <Name> topic <Topic> [<Duration>] | 对集群中的一个主题进行跟踪 |
traces start <Name> ip_address <IPAddr> [<Duration>] | 对集群中一个客户端IP进行跟踪 |
traces stop <Name> | 停止集群中的跟踪 |
traces delete <Name> | 删除集群中的跟踪 |
traces list
traces start <Name> client <ClientId> [<Duration>]
traces start <Name> topic <Topic> [<Duration>]
traces start <Name> ip_address <IPAddr> [<Duration>]
traces stop <Name>
traces delete <Name>
listeners
管理监听器。
命令 | 描述 |
---|---|
listeners | 列出所有监听器的信息。 |
listeners stop <Identifier> |
停止一个监听器,Identifier 为
{type}:{name}
格式,如
tcp:default
。(临时生效,当 EMQX 重启后将恢复原先状态。)
|
listeners start <Identifier> | 启动一个监听器。(临时生效,当 EMQX 重启后将恢复原先状态。) |
listeners restart <Identifier> | 重启一个监听器。 |
listeners enable <Identifier> <true/false> | 启用或禁用一个监听器。(持久化到配置,永久生效) |
listeners
listeners stop <Identifier>
TIP
停止监听器会导致所有通过该监听器接入的客户端都断开连接。
listeners start <Identifier>
listeners restart <Identifier>
TIP
重启监听器会导致所有通过该监听器接入的客户端都断开连接。
listeners enable <Identifier> <true/false>
authz cache-clean
emqx ctl authz cache-clean
这个命令用于强制所有客户端的授权(ACL)缓存立刻失效。
pem_cache
emqx ctl pem_cache
这个命令可以用于清除 x509 pem 证书的缓存。
olp
emqx ctl olp
OLP 是 “overload protection” 的缩写。
olp
命令可以用于检查系统过载的状态,也可以用于关闭或开启系统过载保护。
您可以在
overload_protection
的配置文档中查看更多信息。
TIP
olp
是默认开启的,如果从命令行改变这个状态,这个改变只能持续到系统重启。重启之后会回到配置文件中的状态。
gateway-registry
emqx ctl gateway-registry
查看当前系统中支持的网关。
当前默认支持的网关有如下 5 种:
- coap
- exproto
- lwm2m
- mqttsn
- stomp
EMQX 的网关设计成可插拔。所以网关应用可以在启动/运行时注册到 EMQX 系统中。 一旦注册之后,就可以用 HTTP API 或者命令行来对网关进行管理了。
gateway
查看和管理网关的启停状态。
命令 | 描述 |
---|---|
gateway list | 列出所有网关的信息。 |
gateway lookup <Name> | 查找特定网关的详细信息。 |
gateway load <Name> <JsonConf> | 加载一个网关并配置参数。 |
gateway unload <Name> | 卸载一个网关。 |
gateway stop <Name> | 停止一个网关。 |
gateway start <Name> | 启动一个网关。 |
gateway list
gateway lookup <Name>
gateway load <Name> <JsonConf>
gateway unload <Name>
gateway stop <Name>
gateway start <Name>
gateway-metrics
emqx ctl gateway-metrics
查看网关的指标。
rules
查看系统中创建的所有的规则。
命令 | 描述 |
---|---|
rules list | 列出所有规则,包括规则的 ID、名称等信息。 |
rules show <RuleID> | 显示特定规则的详细信息。 |
请注意,下面是每个命令的执行示例:
rules list
rules show <RuleID>
注意,命令行仅仅用于查看,规则的创建和更新等管理操作必需要在控制台的界面中操作。
license
TIP
本节内容仅适用于 EMQX 企业版。
命令 | 描述 |
---|---|
license info | 显示 License 信息。 |
license update License | 更新 License 信息。 |