Skip to content

系统主题

EMQX 周期性发布自身运行状态、消息统计、客户端上下线事件到以 $SYS/ 开头系统主题。

$SYS 主题路径以 $SYS/brokers/{node}/ 开头。{node} 是指产生该 事件 / 消息 所在的节点名称,例如:

bash
$SYS/brokers/emqx@127.0.0.1/version
$SYS/brokers/emqx@127.0.0.1/uptime

$SYS 系统消息发布周期配置项:

bash
broker.sys_interval = 1m

TIP

EMQX 默认只允许本机的 MQTT 客户端订阅 $SYS 主题,请参照 ACL File 修改发布订阅 ACL 规则。

EMQX 中 $SYS 主题中绝大部分数据都可以通过其他更耦合性更低的方式获取, 设备上下线状态可通过规则引擎获取。

集群状态信息

主题说明
$SYS/brokers集群节点列表
$SYS/brokers/${node}/versionEMQX 版本
$SYS/brokers/${node}/uptimeEMQX 运行时间
$SYS/brokers/${node}/datetimeEMQX 系统时间
$SYS/brokers/${node}/sysdescrEMQX 系统信息

客户端上下线事件

$SYS 主题前缀:$SYS/brokers/${node}/clients/

本事件默认为开启状态,关闭请参照sys_topics.sys_event_messages

主题 (Topic)说明
${clientid}/connected上线事件。当任意客户端上线时,EMQX 就会发布该主题的消息
${clientid}/disconnected下线事件。当任意客户端下线时,EMQX 就会发布该主题的消息

connected 事件消息的 Payload 解析成 JSON 格式如下:

bash
{
    "username": "foo",
    "ts": 1625572213873,
    "sockport": 1883,
    "proto_ver": 4,
    "proto_name": "MQTT",
    "keepalive": 60,
    "ipaddress": "127.0.0.1",
    "expiry_interval": 0,
    "connected_at": 1625572213873,
    "connack": 0,
    "clientid": "emqtt-8348fe27a87976ad4db3",
    "clean_start": true
}

disconnected 事件消息的 Payload 解析成 JSON 格式如下:

bash
{
    "username": "foo",
    "ts": 1625572213873,
    "sockport": 1883,
    "reason": "tcp_closed",
    "proto_ver": 4,
    "proto_name": "MQTT",
    "ipaddress": "127.0.0.1",
    "disconnected_at": 1625572213873,
    "clientid": "emqtt-8348fe27a87976ad4db3"
}

客户端订阅与取消订阅事件

本事件默认为关闭状态,开启请参照sys_topics.sys_event_messages

$SYS 主题前缀:$SYS/brokers/${node}/clients/

主题 (Topic)说明
${clientid}/subscribed订阅事件。当任意客户端订阅主题时,EMQX 就会发布该主题的消息
${clientid}/unsubscribed取消订阅事件。当任意客户端取消订阅主题时,EMQX 就会发布该主题的消息

subscribed 事件消息的 Payload 解析成 JSON 格式如下:

bash
{
    "username":"foo",
    "ts":1625572213878,
    "topic":"/the/best/mqtt/broker/is/emqx",
    "subopts":{
        "sub_props":{},
        "rh":0,
        "rap":0,
        "qos":0,
        "nl":0,
        "is_new":true
    },
    "protocol":"mqtt",
    "clientid":"emqtt-8348fe27a87976ad4db3"
}

unsubscribed 事件消息的 Payload 解析成 JSON 格式如下:

bash
{
    "username":"foo",
    "ts":1625572213899,
    "topic":"/the/best/mqtt/broker/is/emqx",
    "protocol":"mqtt",
    "clientid":"emqtt-8348fe27a87976ad4db3"
}

系统统计

系统主题前缀:$SYS/brokers/${node}/stats/

客户端统计

主题 (Topic)说明
connections/count当前客户端总数
connections/max客户端数量历史最大值

订阅统计

主题说明
suboptions/count当前订阅选项个数
suboptions/max订阅选项总数历史最大值
subscribers/count当前订阅者数量
subscribers/max订阅者总数历史最大值
subscriptions/count当前订阅总数
subscriptions/max订阅数量历史最大值
subscriptions/shared/count当前共享订阅个数
subscriptions/shared/max当前共享订阅总数

主题统计

主题说明
topics/count当前 Topic 总数
topics/maxTopic 数量历史最大值

路由统计

主题说明
routes/count当前 Routes 总数
routes/maxRoutes 数量历史最大值

topics/counttopics/maxroutes/countroutes/max 数值上是相等的。

收发流量、报文、消息统计

系统主题前缀:$SYS/brokers/${node}/metrics/

收发流量统计

主题说明
bytes/received累计接收流量
bytes/sent累计发送流量

MQTT 报文收发统计

主题说明
packets/received累计接收 MQTT 报文
packets/sent累计发送 MQTT 报文
packets/connect累计接收 MQTT CONNECT 报文
packets/connack累计发送 MQTT CONNACK 报文
packets/publish/received累计接收 MQTT PUBLISH 报文
packets/publish/sent累计发送 MQTT PUBLISH 报文
packets/puback/received累计接收 MQTT PUBACK 报文
packets/puback/sent累计发送 MQTT PUBACK 报文
packets/puback/missed累计丢失 MQTT PUBACK 报文
packets/pubrec/received累计接收 MQTT PUBREC 报文
packets/pubrec/sent累计发送 MQTT PUBREC 报文
packets/pubrec/missed累计丢失 MQTT PUBREC 报文
packets/pubrel/received累计接收 MQTT PUBREL 报文
packets/pubrel/sent累计发送 MQTT PUBREL 报文
packets/pubrel/missed累计丢失 MQTT PUBREL 报文
packets/pubcomp/received累计接收 MQTT PUBCOMP 报文
packets/pubcomp/sent累计发送 MQTT PUBCOMP 报文
packets/pubcomp/missed累计丢失 MQTT PUBCOMP 报文
packets/subscribe累计接收 MQTT SUBSCRIBE 报文
packets/suback累计发送 MQTT SUBACK 报文
packets/unsubscribe累计接收 MQTT UNSUBSCRIBE 报文
packets/unsuback累计发送 MQTT UNSUBACK 报文
packets/pingreq累计接收 MQTT PINGREQ 报文
packets/pingresp累计发送 MQTT PINGRESP 报文
packets/disconnect/received累计接收 MQTT DISCONNECT 报文
packets/disconnect/sent累计接收 MQTT DISCONNECT 报文
packets/auth累计接收 MQTT AUTH 报文

MQTT 消息收发统计

主题说明
messages/received累计接收消息
messages/sent累计发送消息
messages/expired累计过期消息
messages/retainedRetained 消息总数
messages/dropped丢弃消息总数
messages/forward节点转发消息总数
messages/qos0/received累计接收 QoS 0 消息
messages/qos0/sent累计发送 QoS 0 消息
messages/qos1/received累计接收 QoS 1 消息
messages/qos1/sent累计发送 QoS 1 消息
messages/qos2/received累计接收 QoS 2 消息
messages/qos2/sent累计发送 QoS 2 消息
messages/qos2/expiredQoS 2 过期消息总数
messages/qos2/droppedQoS 2 丢弃消息总数

系统告警

系统主题前缀:$SYS/brokers/${node}/alarms/

主题说明
alert新产生的告警
clear被清除的告警

系统监控

系统主题前缀:$SYS/brokers/${node}/sysmon/

主题说明
long_gc垃圾回收耗时过长
long_schedule进程调度时间过长,占用调度器过多的时间片
large_heap进程内存占用过高
busy_port进程向某个繁忙的端口发送消息,进程被挂起
busy_dist_port节点间通讯使用的分布式通讯端口繁忙,进程被挂起