指标
EMQX 为用户提供了丰富的指标来帮助用户与运维人员了解当前服务状态,监测和排除系统的性能问题。
您可通过 EMQX Dashboard 或 HTTP API 和系统主题来获取 EMQX 指标信息。
用户可以在 EMQX Dashboard 的 仪表盘 -> 指标 页面看到这些数据。

如果不方便访问 Dashboard,你还可以通过 HTTP API 和系统主题消息来获取这些数据,参见 HTTP API 与 $SYS 系统主题。
与监控系统集成
EMQX 指标支持与 Prometheus 集成。使用第三方监控系统对 EMQX 进行监控有如下好处:
- 可以将 EMQX 的监控数据与其他系统的监控数据进行整合,形成一个完整的监控系统,如监控服务器主机的相关信息;
- 可以使用更加丰富的监控图表,更直观地展示监控数据,如使用 Grafana 的仪表盘;
- 可以使用更加丰富的告警方式,更及时地发现问题,如使用 Prometheus 的 Alertmanager。
指标对照手册
EMQX 将指标分为了 Metrics 与 Statistics 两种。
- Metrics 的类型是 counter,通常指那些只会单调递增的整数数据,例如发送字节数量、发送报文数量。EMQX 目前提供的 Metrics 覆盖了字节、报文、消息和事件四个维度。
- Statistics 的类型是 gauge,通常指那些成对出现的整数数据,包括当前值和历史最大值,例如当前订阅数量和订阅历史最大数量。
Metrics
字节 (Bytes)
| Metrics | 描述 |
|---|---|
| bytes.received | 已接收字节数 |
| bytes.sent | 已发送字节数 |
报文 (Packets)
| Metrics | 描述 |
|---|---|
| packets.received | 接收的报文数量 |
| packets.sent | 发送的报文数量 |
| packets.connect.received | 接收的 CONNECT 报文数量 |
| packets.connack.auth_error | 发送的原因码为 0x86 和 0x87 的 CONNACK 报文数量 |
| packets.connack.error | 发送的原因码不为 0x00 的 CONNACK 报文数量,此指标的值大于等于 packets.connack.auth_error 的值 |
| packets.connack.sent | 发送的 CONNACK 报文数量 |
| packets.publish.received | 接收的 PUBLISH 报文数量 |
| packets.publish.sent | 发送的 PUBLISH 报文数量 |
| packets.publish.inuse | 接收的报文标识符已被占用的 PUBLISH 报文数量 |
| packets.publish.auth_error | 接收的未通过 ACL 检查的 PUBLISH 报文数量 |
| packets.publish.error | 接收的无法被发布的 PUBLISH 报文数量 |
| packets.puback.received | 接收的 PUBACK 报文数量 |
| packets.puback.sent | 发送的 PUBACK 报文数量 |
| packets.puback.inuse | 接收的报文标识符已被占用的 PUBACK 报文数量 |
| packets.puback.missed | 接收的未知报文标识符 PUBACK 报文数量 |
| packets.pubrec.received | 接收的 PUBREC 报文数量 |
| packets.pubrec.sent | 发送的 PUBREC 报文数量 |
| packets.pubrec.inuse | 接收的报文标识符已被占用的 PUBREC 报文数量 |
| packets.pubrec.missed | 接收的未知报文标识符 PUBREC 报文数量 |
| packets.pubrel.received | 接收的 PUBREL 报文数量 |
| packets.pubrel.sent | 发送的 PUBREL 报文数量 |
| packets.pubrel.missed | 接收的未知报文标识符 PUBREL 报文数量 |
| packets.pubcomp.received | 接收的 PUBCOMP 报文数量 |
| packets.pubcomp.sent | 发送的 PUBCOMP 报文数量 |
| packets.pubcomp.inuse | 接收的报文标识符已被占用的 PUBCOMP 报文数量 |
| packets.pubcomp.missed | 发送的 PUBCOMP 报文数量 |
| packets.subscribe.received | 接收的 SUBSCRIBE 报文数量 |
| packets.subscribe.error | 接收的订阅失败的 SUBSCRIBE 报文数量 |
| packets.subscribe.auth_error | 接收的未通过 ACL 检查的 SUBACK 报文数量 |
| packets.suback.sent | 发送的 SUBACK 报文数量 |
| packets.unsubscribe.received | 接收的 UNSUBSCRIBE 报文数量 |
| packets.unsubscribe.error | 接收的取消订阅失败的 UNSUBSCRIBE 报文数量 |
| packets.unsuback.sent | 发送的 UNSUBACK 报文数量 |
| packets.pingreq.received | 接收的 PINGREQ 报文数量 |
| packets.pingresp.sent | 发送的 PUBRESP 报文数量 |
| packets.disconnect.received | 接收的 DISCONNECT 报文数量 |
| packets.disconnect.sent | 发送的 DISCONNECT 报文数量 |
| packets.auth.received | 接收的 AUTH 报文数量 |
| packets.auth.sent | 发送的 AUTH 报文数量 |
消息 (PUBLISH 报文)
| Metrics | 描述 |
|---|---|
| messages.delayed | EMQX 存储的延迟发布的消息数量 |
| messages.delivered | EMQX 内部转发到订阅进程的消息数量 |
| messages.dropped | EMQX 内部转发到订阅进程前丢弃的消息总数 |
| messages.dropped.no_subscribers | 由于没有订阅者而被丢弃的消息数量 |
| messages.dropped.await_pubrel_timeout | 由于等待 PUBREL 报文超时而被丢弃的消息数量 |
| messages.dropped.quota_exceeded | 由于超出配额(通常是连接数)而被丢弃的消息数量 |
| messages.dropped.receive_maximum | 由于达到最大接收限制而被丢弃的消息数量 |
| messages.forward | 向其他节点转发的消息数量 |
| messages.publish | 除系统消息外发布的消息数量 |
| messages.qos0.received | 接收来自客户端的 QoS 0 消息数量 |
| messages.qos1.received | 接收来自客户端的 QoS 1 消息数量 |
| messages.qos2.received | 接收来自客户端的 QoS 2 消息数量 |
| messages.qos0.sent | 发送给客户端的 QoS 0 消息数量 |
| messages.qos1.sent | 发送给客户端的 QoS 1 消息数量 |
| messages.qos2.sent | 发送给客户端的 QoS 2 消息数量 |
| messages.received | 接收来自客户端的消息数量,等于 messages.qos0.received,messages.qos1.received 与 messages.qos2.received 之和 |
| messages.sent | 发送给客户端的消息数量,等于 messages.qos0.sent,messages.qos1.sent 与 messages.qos2.sent 之和 |
| messages.acked | 已经应答的消息数量 |
事件
| Metrics | 描述 |
|---|---|
| client.connack | 客户端收到连接确认(CONNACK)消息的次数 |
| client.connect | 客户端发起连接请求的次数,包括成功和失败的连接请求 |
| client.connected | 客户端已成功连接的次数 |
| client.disconnected | 客户端断开连接的次数,包括主动断开和非正常断开 |
| client.subscribe | 客户端成功订阅主题的次数 |
| client.unsubscribe | 客户端成功取消订阅主题的次数 |
会话
| Metrics | 描述 |
|---|---|
| session.created | 已创建的会话数量 |
| session.discarded | 已被丢弃的会话数量 |
| session.resumed | 已被恢复的会话数量 |
| session.takenover | 已被接收的会话数量 |
| session.terminated | 已被终止的会话数量 |
认证和授权
| Metrics | 描述 |
|---|---|
| authorization.allow | 授权总的通过次数(包括命中缓存,和规则未匹配时默认通过的) |
| authorization.deny | 总的拒绝授权次数(包括命中缓存,和规则未匹配时默认通过的) |
| authorization.matched.allow | 由于匹配已有规则而授权通过的次数 |
| authorization.matched.deny | 由于匹配已有规则而拒绝授权的次数 |
| authorization.nomatch | 授权未匹配任何规则的次数 |
| authorization.cache_hit | 授权命中缓存的次数 |
| authorization.superuser | 被授权为超级用户的客户端数量 |
| client.authenticate | 触发认证次数 |
| client.authorize | 触发授权检查次数 |
| client.auth.anonymous | 匿名登录的客户端数量 |
消息分发
| Metrics | 描述 |
|---|---|
| delivery.dropped.too_large | 发送时由于长度超过限制而被丢弃的消息数量 |
| delivery.dropped.queue_full | 发送时由于消息队列满而被丢弃的 QoS 不为 0 的消息数量 |
| delivery.dropped.qos0_msg | 发送时由于消息队列满而被丢弃的 QoS 为 0 的消息数量 |
| delivery.dropped.expired | 发送时由于消息过期而被丢弃的消息数量 |
| delivery.dropped.no_local | 发送时由于 No Local 订阅选项而被丢弃的消息数量 |
| delivery.dropped | 发送时丢弃的消息总数 |
Statistics
| Statistics | Description |
|---|---|
| connections.count | 当前连接数量 |
| connections.max | 连接数量的历史最大值 |
| live_connections.count | 当前活跃连接数量 |
| live_connections.max | 活跃连接历史最大值 |
| channels.count | 即 sessions.count |
| channels.max | 即 session.max |
| sessions.count | 当前会话数量 |
| sessions.max | 会话数量的历史最大值 |
| topics.count | 当前主题数量 |
| topics.max | 主题数量的历史最大值 |
| suboptions.count | 即 subscriptions.count |
| suboptions.max | 即 subscriptions.max |
| subscribers.count | 当前订阅者数量 |
| subscribers.max | 订阅者数量的历史最大值 |
| subscriptions.count | 当前订阅数量,包含共享订阅 |
| subscriptions.max | 订阅数量的历史最大值 |
| subscriptions.shared.count | 当前共享订阅数量 |
| subscriptions.shared.max | 共享订阅数量的历史最大值 |
| retained.count | 当前保留消息数量 |
| retained.max | 保留消息的历史最大值 |
| delayed.count | 当前延迟发布消息数量 |
| delayed.max | 延迟发布消息数量的历史最大值 |