Skip to content

Topic Metrics

Topic Metrics tracks message activity for selected MQTT topics. You can use the Dashboard to monitor a specific topic. Starting from EMQX 6.3, you can also use the REST API to create named metric collections with wildcard topic filters and export their counters to Prometheus.

Topic Metrics Interfaces

EMQX 6.3 provides the following Topic Metrics interfaces:

InterfaceTopic SelectionMetricsUse Case
DashboardOne topic name without + or #Message counters, rates, and per-QoS metricsView and diagnose activity for a specific topic.
REST APIA topic filter that can contain + or #Message and byte countersCreate named collections for programmatic monitoring and Prometheus integration.

Compatibility

The REST API under /api/v5/mqtt/topic_metrics remains available for compatibility but is deprecated starting from EMQX 6.3. EMQX does not migrate monitoring records created through this API to named collections.

View Topic Metrics on Dashboard

In the Dashboard, click Diagnose -> Topic Metrics. Click Add Topic, enter the topic name to monitor, and click Add.

Enter a specific topic name, such as devices/001/status. The Dashboard does not support topic filters that contain + or #. Wildcard topic metric collections created through the REST API are not displayed on the Dashboard.

Topic Metrics page

The Topic Metrics list includes the following fields:

  • Topic: Topic name being monitored.
  • Incoming Messages: Total incoming messages and the incoming message rate.
  • Outgoing Messages: Total outgoing messages and the outgoing message rate.
  • Dropped Messages: Total dropped messages and the dropped message rate.
  • Start At: Time when the monitoring record was created.
  • Actions:
    • View: View metrics by QoS level.
    • Reset: Reset the metrics for the topic.
    • Delete: Delete the monitoring record.

Manage Topic Metric Collections with the REST API

Starting from EMQX 6.3, the REST API supports named topic metric collections. Each collection has an independent name and an MQTT topic filter. Multiple filters can overlap, and one message increments every collection whose filter matches the message topic.

For information about REST API authentication, see REST API.

Collection Limits

Topic metric collections have the following limits:

  • A collection name must contain 1 to 64 letters, digits, underscores (_), or hyphens (-).
  • A topic filter must be a valid MQTT topic filter and can contain + or #.
  • A cluster can contain up to 512 collections.

Create a Collection

Send POST /api/v5/mqtt/topic_metrics2 with a collection name and topic filter. The following request creates a collection that matches temperature messages from every sensor:

bash
curl -u '<API_KEY>:<SECRET_KEY>' \
  -H 'Content-Type: application/json' \
  -X POST 'http://localhost:18083/api/v5/mqtt/topic_metrics2' \
  -d '{
    "name": "sensor-temperatures",
    "topic_filter": "sensors/+/temperature"
  }'

The response contains the collection metadata and counters:

json
{
  "name": "sensor-temperatures",
  "topic_filter": "sensors/+/temperature",
  "namespace": null,
  "create_time": "2026-06-02T12:34:56+00:00",
  "metrics": {
    "messages.in.count": 0,
    "messages.out.count": 0,
    "messages.dropped.count": 0,
    "bytes.in": 0,
    "bytes.out": 0
  }
}

Query and Manage Collections

Use the following endpoints to query and manage collections:

Method and EndpointOperation
GET /api/v5/mqtt/topic_metrics2List the collections visible to the authenticated administrator.
POST /api/v5/mqtt/topic_metrics2Create a collection.
DELETE /api/v5/mqtt/topic_metrics2Delete all collections visible to the authenticated administrator.
GET /api/v5/mqtt/topic_metrics2/:nameGet one collection and its cluster-aggregated counters.
DELETE /api/v5/mqtt/topic_metrics2/:nameDelete one collection.
PUT /api/v5/mqtt/topic_metrics2/:name/resetReset the counters for one collection.

Collection Counters

Each collection contains the following counters:

CounterDescription
messages.in.countNumber of messages published to topics that match the filter.
messages.out.countNumber of matching messages delivered to subscribers.
messages.dropped.countNumber of matching messages dropped by EMQX.
bytes.inCombined size of the topic and payload for matching published messages.
bytes.outCombined size of the topic and payload for matching delivered messages.

The byte counters do not include MQTT properties, user properties, or other protocol overhead. The REST API does not calculate message rates or expose per-QoS counters. To calculate rates, export the counters to Prometheus and use the PromQL rate() function.

Namespace Isolation

Topic metric collections follow the namespace of the administrator who creates them:

  • A namespaced administrator creates collections owned by that namespace. These collections count only messages whose publisher belongs to the same namespace.
  • A namespaced administrator can list, query, reset, and delete only collections in that namespace.
  • A global administrator creates global collections. Global collections count messages from all publishers, regardless of namespace.
  • A global administrator can list collections from all namespaces. Collections with the same name can exist in different namespaces.

For more information about namespaces, see Namespace Overview.

Export Topic Metrics to Prometheus

Starting from EMQX 6.3, Prometheus can scrape collection counters from GET /api/v5/prometheus/topic_metrics. For the metric names, labels, collection modes, and a Prometheus configuration example, see Integrate with Prometheus.