Skip to content

统计与指标

EMQX 提供了指标监控功能,运维人员可以基于这些指标监控当前服务状态,并排查可能出现的系统故障。

EMQX 将监控状态分为统计(Statistics) 和 **指标(Metrics)**两类。

  • 统计为整型 Gauge,用于返回请求指标时刻的单一数值。
  • 指标为整型 Counter,用于统计简单的递增或递减数值,例如已发送或接收的字节数、消息数等。

EMQX 为用户提供了多种方式来查看统计信息和指标数据。最直接的方式是通过 EMQX Dashboard 查看。当不方便访问 Dashboard 时,也可以通过 REST API 和系统主题获取相关数据。此外,你还可以将监控功能集成到自有监控系统中,详情参见集成 Prometheus

在 Dashboard 上查看统计

在 EMQX Dashboard 中,点击左侧导航栏的 监控 -> 集群概览。点击节点标签页。点击节点名称,即可在右侧查看该节点的统计信息详情。

node-statistics-ee

统计包含两类数值:当前值和历史最大值。例如:当前订阅数以及历史最大订阅数。

以下为 EMQX 提供的统计列表:

统计说明
connections.count当前连接数
connections.max历史最大连接数
live_connections.count当前在线连接数
live_connections.max历史最大在线连接数
channels.count等同于 sessions.count
channels.max等同于 sessions.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历史最大延迟消息数量

在 Dashboard 上查看指标

在 EMQX Dashboard 中,点击左侧导航栏的监控 -> 集群概览。点击指标标签页,即可查看集群或指定节点的运行时指标。

EMQX 的指标以计数器(Counter)的形式实现,用于记录自节点启动以来某一类事件发生的累计次数。这些指标有助于运维人员观察系统行为、评估负载模式,并排查问题。

Dashboard 中的指标按以下类别进行分组:

  • 连接与会话指标:客户端连接、会话及访问控制相关事件
  • 规则和动作(Sink)指标:数据集成中的规则匹配与动作执行情况
  • 消息指标:字节、报文、消息及投递统计

连接与会话指标

该部分展示集群或节点级别的事件类指标,包括客户端连接、会话以及访问控制相关指标。

dashboard-event-metrics-ee

连接

指标说明
client.connack客户端收到的连接确认(CONNACK)报文数量
client.connect客户端发起的连接请求数量,包括成功和失败的连接请求
client.connected成功建立的客户端连接数量
client.disconnected客户端断开连接的数量,包括主动断开和异常断开
client.subscribe成功的订阅次数
client.unsubscribe成功的取消订阅次数

会话

指标说明
session.created已创建的会话数量
session.discarded被丢弃的会话数量
session.resumed被恢复的会话数量
session.takenover被接管的会话数量
session.terminated被终止的会话数量

认证与权限

访问控制指标用于反映客户端的认证与授权行为,包括规则匹配情况以及缓存使用情况。

指标说明
authorization.allow客户端授权通过的总次数,包括缓存命中和规则匹配通过的授权请求
authorization.deny客户端授权失败的总次数,包括缓存命中和规则未匹配的授权请求
authorization.matched.allow根据授权规则允许的授权请求数量
authorization.matched.deny根据授权规则拒绝的授权请求数量
authorization.nomatch未匹配到任何授权规则的授权请求数量
authorization.cache_hit从缓存中获取授权结果(允许或拒绝)的次数
authorization.superuser被授权为超级用户的客户端数量
client.auth.anonymous以匿名方式登录的客户端数量
client.authenticate触发认证操作的次数
client.authorize触发授权操作的次数

规则与动作(Sink)

该部分提供与数据集成相关的指标,用于帮助了解规则被匹配的次数以及动作(Sink)被执行的情况。

这些指标可用于评估规则的有效性、监控下游数据流,以及分析整体数据集成的使用情况。

dashboard-integration-metrics

规则

指标说明
rules.matched当消息或事件经过规则引擎时,规则被成功匹配的次数

动作(Sink)

指标说明
actions.executed由于规则匹配而触发并执行的动作(Sink)次数

消息传输指标

指标页面向下滚动,可以查看消息传输相关的指标,包括字节、报文、消息以及投递统计。

dashboard-messaging-metrics-ee

消息收发(字节)

指标说明
bytes.received接收到的字节数
bytes.sent已发送的字节数

报文

指标说明
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_errorACL 校验失败的 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_errorACL 校验失败的 SUBACK 报文数量
packets.suback.sent发送的 SUBACK 报文数量
packets.unsubscribe.received接收到的 UNSUBSCRIBE 报文数量
packets.unsubscribe.error取消订阅失败的 UNSUBSCRIBE 报文数量
packets.unsuback.sent发送的 UNSUBACK 报文数量
packets.pingreq.received接收到的 PINGREQ 报文数量
packets.pingresp.sent发送的 PINGRESP 报文数量
packets.disconnect.received接收到的 DISCONNECT 报文数量
packets.disconnect.sent发送的 DISCONNECT 报文数量
packets.auth.received接收到的 AUTH 报文数量
packets.auth.sent发送的 AUTH 报文数量

消息数量

指标说明
messages.acked已确认的消息数量
messages.delayedEMQX 存储的延迟发布消息数量
messages.deliveredEMQX 内部转发至订阅处理流程的消息数量
messages.dropped在转发至订阅流程前被 EMQX 丢弃的消息总数
messages.dropped.no_subscribers因无订阅者而被丢弃的消息数量
messages.dropped.await_pubrel_timeout因等待 PUBREL 超时而被丢弃的消息数量
messages.dropped.quota_exceeded因超出配额(通常是连接数限制)而被丢弃的消息数量
messages.dropped.receive_maximum因达到 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.receivedmessages.qos1.receivedmessages.qos2.received 之和
messages.sent发送给客户端的消息总数,等于 messages.qos0.sentmessages.qos1.sentmessages.qos2.sent 之和

消息分发

指标说明
delivery.dropped投递过程中被丢弃的消息总数
delivery.dropped.expired因消息过期而在投递过程中被丢弃的消息数量
delivery.dropped.no_localNo Local 订阅选项而被丢弃的消息数量
delivery.dropped.qos0_msg因消息队列已满而被丢弃的 QoS 0 消息数量
delivery.dropped.queue_full因消息队列已满而被丢弃的非 QoS 0 消息数量
delivery.dropped.too_large因消息长度超出限制而被丢弃的消息数量

通过 REST API 获取监控状态

你也可以通过 API 获取统计和指标。在 API 页面左侧导航栏中点击 Metrics,即可执行对应的 API 请求。关于如何使用 EMQX API,请参见 REST API

metrics-api-doc

通过系统主题获取监控状态

EMQX 会通过系统主题周期性地发布运行状态、消息统计以及客户端上下线事件。客户端可以通过在主题名前加上 $SYS/ 前缀来订阅系统主题。

有关不同类型系统主题的详细说明,请参见系统主题

您可以在 Dashboard 中配置系统主题相关设置。点击左侧导航栏的管理 -> MQTT 设置,选择系统主题标签页。

system-topic-setting
  • 消息发布周期:设置 $SYS 系统主题消息的发布周期。
  • 心跳周期:设置系统心跳消息的发送周期。
  • 客户端已连接提醒:默认启用,启用后会发布客户端成功建立连接的事件消息。
  • 客户端断开连接提醒:默认启用,启用后会发布客户端断开连接的事件消息。
  • 客户端订阅提醒:默认关闭,启用后会发布客户端订阅主题的事件消息。
  • 客户端取消订阅提醒:默认关闭,启用后会发布客户端取消订阅主题的事件消息。