# 指标

EMQX 为用户提供了丰富的指标来帮助用户与因为人员了解当前服务状态,监测和排除系统的性能问题。

您可通过 EMQX Dashboard 或 HTTP API 和系统主题来获取 EMQX 指标信息。

用户可以在 EMQX Dashboard 的 仪表盘 -> 指标 页面看到这些数据。

Metrics in Dashboard

如果不方便访问 Dashboard,你还可以通过 HTTP API 和系统主题消息来获取这些数据,参见 HTTP API$SYS 系统主题

# 与监控系统集成

EMQX 指标支持与 Prometheus 以及 StatsD 集成。使用第三方监控系统对 EMQX 进行监控有如下好处:

  • 可以将 EMQX 的监控数据与其他系统的监控数据进行整合,形成一个完整的监控系统,如监控服务器主机的相关信息;
  • 可以使用更加丰富的监控图表,更直观地展示监控数据,如使用 Grafana 的仪表盘;
  • 可以使用更加丰富的告警方式,更及时地发现问题,如使用 Prometheus 的 Alertmanager。

# 指标对照手册

EMQX 将指标分为了 Metrics 与 Stats 两种。

  • Metrics 通常指那些只会单调递增的数据,例如发送字节数量、发送报文数量。EMQX 目前提供的 Metrics 覆盖了字节、报文、消息和事件四个维度。

  • Stats 则通常指那些成对出现的数据,包括当前值和历史最大值,例如当前订阅数量和订阅历史最大数量。

# Metrics

# 字节 (Bytes)

KeyData TypeDescription
bytes.receivedInteger已接收字节数
bytes.sentInteger已发送字节数

# 报文 (Packets)

KeyData TypeDescription
packets.receivedInteger接收的报文数量
packets.sentInteger发送的报文数量
packets.connect.receivedInteger接收的 CONNECT 报文数量
packets.connack.auth_errorInteger发送的原因码为 0x86 和 0x87 的 CONNACK 报文数量
packets.connack.errorInteger发送的原因码不为 0x00 的 CONNACK 报文数量,此指标的值大于等于 packets.connack.auth_error 的值
packets.connack.sentInteger发送的 CONNACK 报文数量
packets.publish.receivedInteger接收的 PUBLISH 报文数量
packets.publish.sentInteger发送的 PUBLISH 报文数量
packets.publish.inuseInteger接收的报文标识符已被占用的 PUBLISH 报文数量
packets.publish.auth_errorInteger接收的未通过 ACL 检查的 PUBLISH 报文数量
packets.publish.errorInteger接收的无法被发布的 PUBLISH 报文数量
packets.publish.droppedInteger超出接收限制而被丢弃的 PUBLISH 报文数量
packets.puback.receivedInteger接收的 PUBACK 报文数量
packets.puback.sentInteger发送的 PUBACK 报文数量
packets.puback.inuseInteger接收的报文标识符已被占用的 PUBACK 报文数量
packets.puback.missedInteger接收的未知报文标识符 PUBACK 报文数量
packets.pubrec.receivedInteger接收的 PUBREC 报文数量
packets.pubrec.sentInteger发送的 PUBREC 报文数量
packets.pubrec.inuseInteger接收的报文标识符已被占用的 PUBREC 报文数量
packets.pubrec.missedInteger接收的未知报文标识符 PUBREC 报文数量
packets.pubrel.receivedInteger接收的 PUBREL 报文数量
packets.pubrel.sentInteger发送的 PUBREL 报文数量
packets.pubrel.missedInteger接收的未知报文标识符 PUBREL 报文数量
packets.pubcomp.receivedInteger接收的 PUBCOMP 报文数量
packets.pubcomp.sentInteger发送的 PUBCOMP 报文数量
packets.pubcomp.inuseInteger接收的报文标识符已被占用的 PUBCOMP 报文数量
packets.pubcomp.missedInteger发送的 PUBCOMP 报文数量
packets.subscribe.receivedInteger接收的 SUBSCRIBE 报文数量
packets.subscribe.errorInteger接收的订阅失败的 SUBSCRIBE 报文数量
packets.subscribe.auth_errorInteger接收的未通过 ACL 检查的 SUBACK 报文数量
packets.suback.sentInteger发送的 SUBACK 报文数量
packets.unsubscribe.receivedInteger接收的 UNSUBSCRIBE 报文数量
packets.unsubscribe.errorInteger接收的取消订阅失败的 UNSUBSCRIBE 报文数量
packets.unsuback.sentInteger发送的 UNSUBACK 报文数量
packets.pingreq.receivedInteger接收的 PINGREQ 报文数量
packets.pingresp.sentInteger发送的 PUBRESP 报文数量
packets.disconnect.receivedInteger接收的 DISCONNECT 报文数量
packets.disconnect.sentInteger发送的 DISCONNECT 报文数量
packets.auth.receivedInteger接收的 AUTH 报文数量
packets.auth.sentInteger发送的 AUTH 报文数量

# 消息 (PUBLISH 报文)

KeyData TypeDescription
delivery.dropped.too_largeInteger发送时由于长度超过限制而被丢弃的消息数量
delivery.dropped.queue_fullInteger发送时由于消息队列满而被丢弃的 QoS 不为 0 的消息数量
delivery.dropped.qos0_msgInteger发送时由于消息队列满而被丢弃的 QoS 为 0 的消息数量
delivery.dropped.expiredInteger发送时由于消息过期而被丢弃的消息数量
delivery.dropped.no_localInteger发送时由于 No Local 订阅选项而被丢弃的消息数量
delivery.droppedInteger发送时丢弃的消息总数
messages.delayedIntegerEMQX 存储的延迟发布的消息数量
messages.deliveredIntegerEMQX 内部转发到订阅进程的消息数量
messages.droppedIntegerEMQX 内部转发到订阅进程前丢弃的消息总数
messages.dropped.no_subscribersInteger由于没有订阅者而被丢弃的消息数量
messages.dropped.await_pubrel_timeoutInteger由于等待 PUBREL 报文超时
messages.forwardInteger向其他节点转发的消息数量
messages.publishInteger除系统消息外发布的消息数量
messages.qos0.receivedInteger接收来自客户端的 QoS 0 消息数量
messages.qos1.receivedInteger接收来自客户端的 QoS 1 消息数量
messages.qos2.receivedInteger接收来自客户端的 QoS 2 消息数量
messages.qos0.sentInteger发送给客户端的 QoS 0 消息数量
messages.qos1.sentInteger发送给客户端的 QoS 1 消息数量
messages.qos2.sentInteger发送给客户端的 QoS 2 消息数量
messages.receivedInteger接收来自客户端的消息数量,等于 messages.qos0.receivedmessages.qos1.receivedmessages.qos2.received 之和
messages.sentInteger发送给客户端的消息数量,等于 messages.qos0.sentmessages.qos1.sentmessages.qos2.sent 之和
messages.ackedInteger已经应答的消息数量

# 事件

KeyData TypeDescription
client.connectIntegerclient.connect 钩子触发次数
client.authenticateIntegerclient.authenticate 钩子触发次数
client.connackIntegerclient.connack 钩子触发次数
client.connectedIntegerclient.connected 钩子触发次数
client.disconnectedIntegerclient.disconnected 钩子触发次数
client.authorizeIntegerclient.authorize 钩子触发次数
client.subscribeIntegerclient.subscribe 钩子触发次数
client.unsubscribeIntegerclient.unsubscribe 钩子触发次数
session.createdIntegersession.created 钩子触发次数
session.discardedIntegersession.discarded 钩子触发次数
session.resumedIntegersession.resumed 钩子触发次数
session.takenoverIntegersession.takenover 钩子触发次数
session.terminatedIntegersession.terminated 钩子触发次数

# 认证和授权

KeyData TypeDescription
authorization.allowInteger授权总的通过次数(包括命中缓存,和规则未匹配时默认通过的)
authorization.denyInteger总的拒绝授权次数(包括命中缓存,和规则未匹配时默认通过的)
authorization.matched.allowInteger由于匹配已有规则而授权通过的次数
authorization.matched.denyInteger由于匹配已有规则而拒绝授权的次数
authorization.nomatchInteger授权未匹配任何规则的次数
authorization.cache_hitInteger授权命中缓存的次数

# Stats

KeyData TypeDescription
connections.countInteger当前连接数量
connections.maxInteger连接数量的历史最大值
live_connections.countInteger当前活跃连接数量
live_connections.maxInteger活跃连接历史最大值
channels.countIntegersessions.count
channels.maxIntegersession.max
sessions.countInteger当前会话数量
sessions.maxInteger会话数量的历史最大值
topics.countInteger当前主题数量
topics.maxInteger主题数量的历史最大值
suboptions.countIntegersubscriptions.count
suboptions.maxIntegersubscriptions.max
subscribers.countInteger当前订阅者数量
subscribers.maxInteger订阅者数量的历史最大值
subscriptions.countInteger当前订阅数量,包含共享订阅
subscriptions.maxInteger订阅数量的历史最大值
subscriptions.shared.countInteger当前共享订阅数量
subscriptions.shared.maxInteger共享订阅数量的历史最大值
retained.countInteger当前保留消息数量
retained.maxInteger保留消息的历史最大值
delayed.countInteger当前延迟发布消息数量
delayed.maxInteger延迟发布下行哦的历史最大值