Skip to content

System Topics

Overview

RobustMQ MQTT Broker publishes its own runtime status and statistics via $SYS/ system topics. Clients can subscribe to these topics just like any regular MQTT topic to monitor connections, message throughput, alarm events, and other key metrics in real time — no additional monitoring agent required.

System topics are periodically published by the Broker (refreshed every 60 seconds by default, configurable via mqtt_system_topic.interval_ms). Some topics are published immediately when an event occurs (e.g., client connect/disconnect).

Note: System topics start with $SYS/. By default, non-admin clients cannot subscribe to them. Make sure your ACL configuration allows access.


Topic Format

All system topics are prefixed with $SYS/brokers/${node}/, where ${node} is replaced with the current node's IP address.


Broker Info

Published periodically. Describes the Broker's version, uptime, and other static information.

TopicDescriptionExample Value
$SYS/brokersCluster node list (JSON)[{"node_id":1,...}]
$SYS/brokers/${node}/versionBroker version0.4.0
$SYS/brokers/${node}/uptimeRunning duration0 days, 2 hours, 15 minutes, 30 seconds
$SYS/brokers/${node}/datetimeCurrent system time2026-02-23 10:00:00
$SYS/brokers/${node}/sysdescrOS informationUbuntu 22.04

Statistics (Stats)

Published periodically. Reflects real-time counts of various objects in the system.

Connections

TopicDescription
$SYS/brokers/${node}/stats/connections/countCurrent online connection count
$SYS/brokers/${node}/stats/connections/maxPeak connection count (approximated by session count)

Topics

TopicDescription
$SYS/brokers/${node}/stats/topics/countCurrent topic count
$SYS/brokers/${node}/stats/topics/maxPeak topic count

Routes

TopicDescription
$SYS/brokers/${node}/stats/routes/countCurrent route count (equals total active subscriptions)
$SYS/brokers/${node}/stats/routes/maxPeak route count

Subscriptions

TopicDescription
$SYS/brokers/${node}/stats/subscribers/countCurrent exclusive subscriber count
$SYS/brokers/${node}/stats/subscribers/maxPeak exclusive subscriber count
$SYS/brokers/${node}/stats/subscriptions/countTotal subscriptions (exclusive + shared)
$SYS/brokers/${node}/stats/subscriptions/maxPeak total subscriptions
$SYS/brokers/${node}/stats/subscriptions/shared/countCurrent shared subscription count
$SYS/brokers/${node}/stats/subscriptions/shared/maxPeak shared subscription count
$SYS/brokers/${node}/stats/suboptions/countCurrent subscription options count
$SYS/brokers/${node}/stats/suboptions/maxPeak subscription options count

Metrics

Published periodically. Reflects cumulative byte, message, and packet counts.

Bytes

TopicDescription
$SYS/brokers/${node}/metrics/bytes/receivedTotal bytes received
$SYS/brokers/${node}/metrics/bytes/sentTotal bytes sent

Messages

TopicDescription
$SYS/brokers/${node}/metrics/messages/receivedTotal messages received
$SYS/brokers/${node}/metrics/messages/sentTotal messages sent
$SYS/brokers/${node}/metrics/messages/droppedTotal messages dropped (no subscribers)
$SYS/brokers/${node}/metrics/messages/retainedCurrent retained message count
$SYS/brokers/${node}/metrics/messages/expiredTotal expired messages
$SYS/brokers/${node}/metrics/messages/forwardTotal forwarded messages (cluster nodes)
$SYS/brokers/${node}/metrics/messages/qos0/receivedTotal QoS 0 messages received
$SYS/brokers/${node}/metrics/messages/qos0/sentTotal QoS 0 messages sent
$SYS/brokers/${node}/metrics/messages/qos1/receivedTotal QoS 1 messages received
$SYS/brokers/${node}/metrics/messages/qos1/sentTotal QoS 1 messages sent
$SYS/brokers/${node}/metrics/messages/qos2/receivedTotal QoS 2 messages received
$SYS/brokers/${node}/metrics/messages/qos2/sentTotal QoS 2 messages sent
$SYS/brokers/${node}/metrics/messages/qos2/expiredTotal QoS 2 expired messages
$SYS/brokers/${node}/metrics/messages/qos2/droppedTotal QoS 2 dropped messages

Packets

TopicDescription
$SYS/brokers/${node}/metrics/packets/receivedTotal packets received
$SYS/brokers/${node}/metrics/packets/sentTotal packets sent
$SYS/brokers/${node}/metrics/packets/connectTotal CONNECT packets
$SYS/brokers/${node}/metrics/packets/connackTotal CONNACK packets
$SYS/brokers/${node}/metrics/packets/publish/receivedTotal PUBLISH packets received
$SYS/brokers/${node}/metrics/packets/publish/sentTotal PUBLISH packets sent
$SYS/brokers/${node}/metrics/packets/puback/receivedTotal PUBACK packets received
$SYS/brokers/${node}/metrics/packets/puback/sentTotal PUBACK packets sent
$SYS/brokers/${node}/metrics/packets/puback/missedTotal PUBACK timeout/unacknowledged
$SYS/brokers/${node}/metrics/packets/pubrec/receivedTotal PUBREC packets received
$SYS/brokers/${node}/metrics/packets/pubrec/sentTotal PUBREC packets sent
$SYS/brokers/${node}/metrics/packets/pubrec/missedTotal PUBREC timeout/unacknowledged
$SYS/brokers/${node}/metrics/packets/pubrel/receivedTotal PUBREL packets received
$SYS/brokers/${node}/metrics/packets/pubrel/sentTotal PUBREL packets sent
$SYS/brokers/${node}/metrics/packets/pubrel/missedTotal PUBREL timeout/unacknowledged
$SYS/brokers/${node}/metrics/packets/pubcomp/receivedTotal PUBCOMP packets received
$SYS/brokers/${node}/metrics/packets/pubcomp/sentTotal PUBCOMP packets sent
$SYS/brokers/${node}/metrics/packets/pubcomp/missedTotal PUBCOMP timeout/unacknowledged
$SYS/brokers/${node}/metrics/packets/subscribeTotal SUBSCRIBE packets
$SYS/brokers/${node}/metrics/packets/subackTotal SUBACK packets
$SYS/brokers/${node}/metrics/packets/unsubscribeTotal UNSUBSCRIBE packets
$SYS/brokers/${node}/metrics/packets/unsubackTotal UNSUBACK packets
$SYS/brokers/${node}/metrics/packets/pingreqTotal PINGREQ packets
$SYS/brokers/${node}/metrics/packets/pingrespTotal PINGRESP packets
$SYS/brokers/${node}/metrics/packets/disconnect/receivedTotal DISCONNECT packets received
$SYS/brokers/${node}/metrics/packets/disconnect/sentTotal DISCONNECT packets sent
$SYS/brokers/${node}/metrics/packets/authTotal AUTH packets

Client Events

The following topics are published immediately when the event occurs. ${clientid} is replaced with the actual client ID.

TopicTriggerPayload
$SYS/brokers/${node}/clients/${clientid}/connectedClient connectsJSON
$SYS/brokers/${node}/clients/${clientid}/disconnectedClient disconnectsJSON
$SYS/brokers/${node}/clients/${clientid}/subscribedClient subscribesJSON
$SYS/brokers/${node}/clients/${clientid}/unsubscribedClient unsubscribesJSON

connected Payload Example

json
{
  "username": "user1",
  "ts": 1700000000000,
  "sock_port": 54321,
  "proto_ver": "V4",
  "proto_name": "MQTT",
  "keepalive": 60,
  "ip_address": "192.168.1.100",
  "expiry_interval": 0,
  "connected_at": 1700000000000,
  "connect_ack": 0,
  "client_id": "my-client-001",
  "clean_start": true
}

disconnected Payload Example

json
{
  "username": "user1",
  "ts": 1700000100000,
  "sock_port": 54321,
  "reason": "NormalDisconnection",
  "proto_ver": "V4",
  "proto_name": "MQTT",
  "ip_address": "192.168.1.100",
  "disconnected_at": 1700000100000,
  "client_id": "my-client-001"
}

System Alarms

Published immediately when an alarm event is triggered. See the System Alarm documentation for configuration details.

TopicDescription
$SYS/brokers/${node}/alarms/alertPublished when a new alarm is triggered
$SYS/brokers/${node}/alarms/clearPublished when an alarm is resolved/cleared

Alarm Payload Example

json
{
  "name": "HighCpuUsage",
  "message": "HighCpuUsage is 85%, but config is 70%",
  "create_time": 1700000000
}

Subscription Examples

Subscribe to system topics using MQTTX or any MQTT client:

bash
# Subscribe to all system topics
mqttx sub -t '$SYS/#' -h 127.0.0.1 -p 1883

# Subscribe to all stats for the current node
mqttx sub -t '$SYS/brokers/+/stats/#' -h 127.0.0.1 -p 1883

# Subscribe to all client connection events
mqttx sub -t '$SYS/brokers/+/clients/+/connected' -h 127.0.0.1 -p 1883