# $SYS 系统主题

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

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

$SYS/brokers/emqx@127.0.0.1/version
$SYS/brokers/emqx@127.0.0.1/uptime
1
2

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

broker.sys_interval = 1m
1

提示

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

EMQX 中 $SYS 主题中绝大部分数据都可以通过其他更耦合性更低的方式获取,设备上下线状态可通过 Webhook 获取,节点与集群状态可通过 HTTP API - 统计指标 获取。

# 集群状态信息

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

# 客户端上下线事件

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

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

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

{
    "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
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

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

{
    "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"
}
1
2
3
4
5
6
7
8
9
10
11

# 系统统计 (Statistics)

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

# 客户端统计

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

# 订阅统计

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

# 主题统计

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

# 路由统计

主题 (Topic)说明
routes.count当前 Routes 总数
routes.maxRoutes 数量历史最大值

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

# 收发流量 / 报文 / 消息统计

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

# 收发流量统计

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

# MQTT 报文收发统计

主题 (Topic)说明
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 消息收发统计

主题 (Topic)说明
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 丢弃消息总数

# Alarms - 系统告警

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

主题 (Topic)说明
activate新产生的告警
deactivate被清除的告警

# Sysmon - 系统监控

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

主题 (Topic)说明
long_gcGC 时间过长警告
long_schedule调度时间过长警告
large_heapHeap 内存占用警告
busy_portPort 忙警告
busy_dist_portDist Port 忙警告