# 指标监控

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

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

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

提示

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

# Metrics & Stats

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

从 v4.1.0 版本开始,EMQ X 增加了针对指定主题的 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.delayedIntegerEMQ X 存储的延迟发布的消息数量
messages.deliveredIntegerEMQ X 内部转发到订阅进程的消息数量
messages.droppedIntegerEMQ X 内部转发到订阅进程前丢弃的消息总数
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.retainedIntegerEMQ X 存储的保留消息数量
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.failureInteger客户端认证失败次数,至少启用一个认证插件后可用
client.auth.ignoreInteger认证忽略次数,至少启用一个认证插件后可用,同时启用多个认证插件时,一次登录事件可能触发多次 ignore 计数,所有认证插件都 ignore 后,客户端可能以匿名方式成功登录
client.acl.allowInteger客户端 ACL 校验通过次数,至少启用一个 ACL 插件后可用
client.acl.denyInteger客户端 ACL 校验失败次数,至少启用一个 ACL 插件后可用
client.acl.ignoreIntegerACL 校验忽略次数,至少启用一个 ACL 插件后可用,同时启用多个 ACL 插件时,一次发布/订阅事件可能触发多次 ignore 计数,所有 ACL插件都 ignore 后,发布/订阅操作可能因 acl_nomatch = true 成功
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保留消息的历史最大值