# 指标监控

EMQX 为用户提供了指标监控功能,允许用户以及运维人员根据这些指标来了解当前服务状态。指标监控功能强制启用,但此功能拥有很高的性能,用户不必担心影响高吞吐场景下的系统性能。

EMQX 为用户提供了多种查看指标与状态的手段。最直接的,用户可以在 EMQX Dashboard 的 Overview 页面看到这些数据。

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

提示

EMQX 提供 emqx_statsd (opens new window) 插件,用于将系统的监控数据输出到第三方的监控系统中,使用示例参考 Prometheus 监控告警

# Metrics & Stats

EMQX 将指标分为了 Metrics 与 Stats 两种。Metrics 通常指那些只会单调递增的数据,例如发送字节数量、发送报文数量。EMQX 目前提供的 Metrics 覆盖了字节、报文、消息和事件四个维度。Stats 则通常指那些成对出现的数据,包括当前值和历史最大值,例如当前订阅数量和订阅历史最大数量。

从 v4.1.0 版本开始,EMQX 增加了针对指定主题的 Metrics 统计,包括消息收发数量和收发速率。我们提供了新建主题统计、取消主题统计和返回指定主题统计信息的 HTTP API,参见 HTTP API,你也可以直接在 Dashboard -> Analysis -> Topic Metrics 页面进行相关操作。

# Metrics

# 字节

NameData TypeDescription
bytes.receivedInteger接收字节数量
bytes.sentInteger发送字节数量

# 报文

NameData 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 报文)

NameData 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.expiredInteger接收时由于消息过期而被丢弃的消息数量
messages.dropped.no_subscribersInteger由于没有订阅者而被丢弃的消息数量
messages.forwardInteger向其他节点转发的消息数量
messages.publishInteger除系统消息外发布的消息数量
messages.qos0.receivedInteger接收来自客户端的 QoS 0 消息数量
messages.qos2.receivedInteger接收来自客户端的 QoS 1 消息数量
messages.qos1.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.retainedIntegerEMQX 存储的保留消息数量
messages.ackedInteger已经应答的消息数量

# 事件

NameData TypeDescription
client.auth.anonymousInteger客户端最终匿名形式登录的次数
client.connectIntegerclient.connect 钩子触发次数
client.authenticateIntegerclient.authenticate 钩子触发次数
client.connackIntegerclient.connack 钩子触发次数
client.connectedIntegerclient.connected 钩子触发次数
client.disconnectedIntegerclient.disconnected 钩子触发次数
client.check_aclIntegerclient.check_acl 钩子触发次数
client.subscribeIntegerclient.subscribe 钩子触发次数
client.unsubscribeIntegerclient.unsubscribe 钩子触发次数
client.auth.successInteger客户端认证成功次数
client.auth.success.anonymousInteger匿名认证成功次数
client.auth.failureInteger客户端认证失败次数
client.acl.allowInteger客户端 ACL 校验通过次数
client.acl.denyInteger客户端 ACL 校验失败次数
client.acl.cache_hitIntegerACL 校验缓存命中次数
session.createdIntegersession.created 钩子触发次数
session.discardedIntegersession.discarded 钩子触发次数
session.resumedIntegersession.resumed 钩子触发次数
session.takeoveredIntegersession.takeovered 钩子触发次数
session.terminatedIntegersession.terminated 钩子触发次数

# Stats

NameData TypeDescription
connections.countInteger当前连接数量
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共享订阅数量的历史最大值
routes.countInteger当前路由数量
routes.maxInteger路由数量的历史最大值
retained.countInteger当前保留消息数量
retained.maxInteger保留消息的历史最大值