Skip to content

Broker 健康指标

本页精选了用于监控 EMQX broker 的最常用 Prometheus 指标。请配合 集成 Prometheus 一起使用,后者介绍了如何暴露和抓取这些指标。

本页将健康指标分为四个领域:

  1. 系统(System):操作系统和 Erlang 虚拟机资源。
  2. Broker:连接与消息流量,以及 broker 状态。
  3. 认证与授权(Authentication and Authorization):连接时的身份校验和每条消息的 ACL 决策。
  4. 数据集成(Data Integration):规则、动作、连接器和桥接。

所有指标都通过 EMQX 的 Prometheus 端点(/api/v5/prometheus/stats/api/v5/prometheus/auth/api/v5/prometheus/data_integration)暴露。端点详情以及 mode 查询参数请参见 集成 Prometheus

关于采集器默认值

emqx_ 前缀的指标始终启用。带 erlang_vm_ 前缀的、更丰富的 Erlang VM 指标来自上游 Prometheus Erlang exporter,在 EMQX 6.0 及更新版本中默认关闭。如需进程数、按分配器拆分的内存或 GC 和调度器统计等指标,可将 prometheus.collectors.vm_system_infovm_memoryvm_statistics 设置为 enabled

系统

最贴近硬件层的信号。broker 出现异常时,这一类指标通常最先发生变化。

CPU

指标说明
emqx_vm_cpu_useCPU 使用率(百分比)。
emqx_vm_cpu_idleCPU 空闲率(百分比)。

内存

指标说明
emqx_vm_total_memory系统总内存(字节)。
emqx_vm_used_memory系统已用内存(字节)。
erlang_vm_memory_processes按分配器拆分的内存:进程(需启用 vm_memory 采集器)。
erlang_vm_memory_atom按分配器拆分的内存:原子。
erlang_vm_memory_binary按分配器拆分的内存:二进制数据。
erlang_vm_memory_ets按分配器拆分的内存:ETS 表。
erlang_vm_memory_code按分配器拆分的内存:已加载代码。
erlang_vm_memory_system按分配器拆分的内存:系统开销。

文件描述符

指标说明
emqx_vm_max_fdsbroker 进程的软 FD 上限(ulimit)。

Erlang 进程与调度器负载

指标说明
emqx_vm_run_queue当前调度器运行队列长度。长期不为零表示 CPU 饱和。
emqx_vm_process_messages_in_queues所有 Erlang 进程邮箱长度之和。数值持续偏大或增长,表明某个进程处理不过来。
erlang_vm_process_count当前 Erlang 进程数(需启用 vm_system_info 采集器)。
erlang_vm_process_limit配置的 Erlang 进程数上限。

内部邮箱看门狗

指标说明
emqx_vm_mnesia_tm_mailbox_sizeMnesia 事务管理器邮箱深度。偏大表示事务竞争。
emqx_vm_broker_pool_max_mailbox_sizebroker 派发进程池中最大的邮箱长度。偏大表示订阅侧出现背压。

运行时长

指标说明
emqx_vm_uptime_msbroker 已运行时间(毫秒)。突然降到很小的值意味着节点重启。

集群复制健康(Mria)

指标说明
emqx_mria_lag每个 replicant 节点的复制延迟。
emqx_mria_replicantsreplicant 节点数量。
emqx_mria_bootstrap_time最近一次引导所用时间。
emqx_mria_message_queue_lenMria 邮箱长度。

过载保护

指标说明
emqx_overload_protection_new_conn因过载而被拒绝的连接数。
emqx_overload_protection_gc过载保护强制触发的 GC 次数。
emqx_overload_protection_hibernation触发的进程休眠次数。
emqx_overload_protection_delay_ok成功施加延迟的次数。
emqx_overload_protection_delay_timeout延迟尝试超时的次数。

Broker

核心运行指标。重点关注消息相关计数器的速率,尤其注意各 dropped 序列。

集群拓扑

指标说明
emqx_cluster_nodes_running集群中正在运行的节点数。
emqx_cluster_nodes_stopped集群中已停止的节点数。大于零时应报警。
emqx_conf_sync_txid最近一次应用的集群配置事务 ID。各节点之间不一致表示同步异常。

License(企业版)

指标说明
emqx_license_expiry_atLicense 过期时间(UNIX epoch 秒)。
emqx_license_issued_atLicense 签发时间。
emqx_license_max_sessionsLicense 允许的最大会话数。
emqx_cert_expiry_at监听器证书过期时间。

连接、会话与 Channel

指标说明
emqx_connections_count当前连接数。
emqx_connections_max启动以来连接数峰值。
emqx_live_connections_count当前已建立(TCP 在线)的客户端数量。
emqx_live_connections_max在线连接峰值。
emqx_sessions_count活跃会话数(包含客户端当前已断开的持久会话)。
emqx_sessions_max会话峰值。
emqx_cluster_sessions_count集群范围内的会话数。
emqx_cluster_sessions_max集群范围内会话峰值。
emqx_channels_countChannel 进程数(每个已连接客户端对应一个)。
emqx_channels_maxChannel 数量峰值。

订阅与主题

指标说明
emqx_subscriptions_count订阅数。
emqx_subscriptions_max订阅数峰值。
emqx_subscriptions_shared_count共享订阅数。
emqx_subscriptions_shared_max共享订阅数峰值。
emqx_subscribers_count订阅者进程数。
emqx_topics_count不同主题数。
emqx_topics_max主题数峰值。
emqx_routes_count路由表大小。
emqx_routes_max路由表大小峰值。
emqx_durable_subscriptions_count持久会话订阅数。
emqx_durable_subscriptions_max持久会话订阅数峰值。

保留、延迟与禁用列表

指标说明
emqx_retained_count保留消息数。
emqx_retained_max保留消息数峰值。
emqx_delayed_count延迟发布队列长度。
emqx_delayed_max延迟队列长度峰值。
emqx_banned_count被禁用的客户端 / 用户名 / IP 条目数。

消息

指标说明
emqx_messages_received从客户端收到的应用层消息数。
emqx_messages_sent发送给客户端的应用层消息数。
emqx_messages_publish已分发的 PUBLISH 报文数。
emqx_messages_delivered投递给订阅者的次数(一条消息可能产生多次投递)。
emqx_messages_acked收到的订阅者确认数。
emqx_messages_forward跨节点转发的消息数。
emqx_messages_retained保留消息事件数。
emqx_messages_delayed延迟发布入队次数。

消息丢弃(最早出现的异常信号)

指标说明
emqx_messages_dropped丢弃消息总数。
emqx_messages_dropped_expired因超过消息过期时间被丢弃。
emqx_messages_dropped_no_subscribers因没有匹配订阅者被丢弃。
emqx_messages_dropped_quota_exceeded因触发每客户端配额被丢弃。
emqx_messages_dropped_receive_maximum因订阅者 MQTT v5 的 receive-maximum 配额被丢弃。

单订阅者投递丢弃

指标说明
emqx_delivery_dropped投递丢弃总数。
emqx_delivery_dropped_expired投递前消息已过期。
emqx_delivery_dropped_no_localMQTT v5 No-Local 规则。
emqx_delivery_dropped_qos不支持的 QoS。
emqx_delivery_dropped_queue_full订阅者的消息队列已满。
emqx_delivery_dropped_too_large超出订阅者允许的最大报文大小。

字节

指标说明
emqx_bytes_received累计接收字节数。
emqx_bytes_sent累计发送字节数。

报文层(适用于协议级排查仪表盘)

指标说明
emqx_packets_received累计收到报文数。
emqx_packets_sent累计发送报文数。
emqx_packets_connect收到的 CONNECT 报文数。
emqx_packets_connack_sent发送的 CONNACK 报文数。
emqx_packets_connack_error带非零 Reason Code 的 CONNACK 数(大多数单客户端 AUTHN 失败会在此体现)。
emqx_packets_disconnect_received收到的 DISCONNECT 报文数。
emqx_packets_disconnect_sent发送的 DISCONNECT 报文数。
emqx_packets_publish_received收到的 PUBLISH 报文数。
emqx_packets_publish_sent发送的 PUBLISH 报文数。
emqx_packets_publish_error未能被接收的 PUBLISH 数。
emqx_packets_publish_auth_error被授权拒绝的 PUBLISH 数。
emqx_packets_puback_received收到的 PUBACK 报文数(QoS 1)。
emqx_packets_puback_sent发送的 PUBACK 报文数(QoS 1)。
emqx_packets_pubrec_received收到的 PUBREC 报文数(QoS 2)。
emqx_packets_pubrec_sent发送的 PUBREC 报文数(QoS 2)。
emqx_packets_pubrel_received收到的 PUBREL 报文数(QoS 2)。
emqx_packets_pubrel_sent发送的 PUBREL 报文数(QoS 2)。
emqx_packets_pubcomp_received收到的 PUBCOMP 报文数(QoS 2)。
emqx_packets_pubcomp_sent发送的 PUBCOMP 报文数(QoS 2)。
emqx_packets_subscribe_received收到的 SUBSCRIBE 报文数。
emqx_packets_suback_sent发送的 SUBACK 报文数。
emqx_packets_subscribe_error处理失败的 SUBSCRIBE 数。
emqx_packets_subscribe_auth_error被 AUTHZ 拒绝的 SUBSCRIBE 数。
emqx_packets_unsubscribe_received收到的 UNSUBSCRIBE 报文数。
emqx_packets_unsuback_sent发送的 UNSUBACK 报文数。
emqx_packets_unsubscribe_error处理失败的 UNSUBSCRIBE 数。
emqx_packets_pingreq_received收到的 PINGREQ 报文数。
emqx_packets_pingresp_sent发送的 PINGRESP 报文数。

客户端生命周期(钩子触发计数)

指标说明
emqx_client_connect收到 CONNECT。
emqx_client_connack已发送 CONNACK。
emqx_client_connected触发了 client.connected 钩子。
emqx_client_disconnected触发了 client.disconnected 钩子。
emqx_client_disconnected_reason按原因聚合的断开次数。
emqx_client_subscribe订阅钩子触发数。
emqx_client_unsubscribe取消订阅钩子触发数。

会话生命周期

指标说明
emqx_session_created创建的会话数。
emqx_session_resumed恢复的持久会话数。
emqx_session_takenover被新客户端接管的会话数。
emqx_session_discarded被丢弃的会话数(Clean Start 覆盖已有会话)。
emqx_session_terminated已终止的会话数。

认证与授权

当 HTTP、LDAP 或数据库后端处于认证链路上时,可通过这些指标判断是 broker 还是后端出现了性能瓶颈或故障。

连接时认证结果

指标说明
emqx_authentication_success认证成功次数(不含匿名通过)。
emqx_authentication_success_anonymous匿名通过次数。
emqx_authentication_failure认证失败次数。

授权决策

指标说明
emqx_authorization_allow决策为 allow 的次数。
emqx_authorization_deny决策为 deny 的次数。
emqx_authorization_nomatch没有匹配规则的次数(退回到 no_match 配置)。
emqx_authorization_matched_allow命中 allow 规则的次数。
emqx_authorization_matched_deny命中 deny 规则的次数。
emqx_authorization_cache_hit缓存命中次数。
emqx_authorization_cache_miss缓存未命中次数。
emqx_authorization_superuser超级用户旁路次数。

认证链状态

指标说明
emqx_authn_total已配置的认证 provider 数量。
emqx_authn_enable每个 provider 的启用标志(0 / 1)。
emqx_authn_status每个 provider 的资源状态。
emqx_authn_users_count每个 provider 的用户记录数(适用于密码、mnesia 或基于数据库的 provider)。

认证 Provider 运行时计数

指标说明
emqx_authn_success每个 provider 命中成功的次数。
emqx_authn_failed每个 provider 失败的次数。
emqx_authn_nomatch每个 provider 选择忽略的次数(链路继续向下匹配)。
emqx_authn_latency每个 provider 的后端延迟。

授权数据源状态

指标说明
emqx_authz_total已配置的授权数据源数量。
emqx_authz_enable每个数据源的启用标志(0 / 1)。
emqx_authz_status每个数据源的资源状态。
emqx_authz_rules_count每个数据源的规则记录数(适用于文件、mnesia 或基于数据库的数据源)。

授权数据源运行时计数

指标说明
emqx_authz_allow每个数据源决策为 allow 的次数。
emqx_authz_deny每个数据源决策为 deny 的次数。
emqx_authz_nomatch每个数据源选择忽略的次数(链路继续向下匹配)。
emqx_authz_latency每个数据源的后端延迟。

内置数据库规模

指标说明
emqx_authn_builtin_record_count内置认证数据库中的用户数。
emqx_authz_builtin_record_count内置授权数据库中的规则数。

数据集成

流量进入规则引擎,扇出到动作和连接器,最终落到外部系统。每一层都暴露各自的计数器,按顺序读取可以定位消息在哪一层流失。

资源清单

指标说明
emqx_rules_count已配置的规则数。
emqx_actions_count已配置的动作数。
emqx_connectors_count已配置的连接器数。
emqx_schema_registrys_countSchema Registry 条目数。

单资源状态

指标说明
emqx_rule_enable规则启用标志(0 / 1)。
emqx_action_enable动作启用标志(0 / 1)。
emqx_action_status动作资源状态。
emqx_connector_enable连接器启用标志(0 / 1)。
emqx_connector_status连接器资源状态。

规则引擎:单规则计数

指标说明
emqx_rule_matched命中规则 WHERE 子句的消息数。
emqx_rule_passed通过规则的消息数。
emqx_rule_failed规则处理失败次数。
emqx_rule_failed_exception规则执行中抛出 Erlang 异常的次数。
emqx_rule_failed_no_resultSQL 没有产生结果的次数。

规则引擎:动作子计数

指标说明
emqx_rule_actions_total规则触发的动作调用总数。
emqx_rule_actions_success动作返回成功的次数。
emqx_rule_actions_failed动作失败次数。
emqx_rule_actions_failed_unknown未知原因失败次数。
emqx_rule_actions_failed_out_of_service下游资源不健康次数。
emqx_rule_actions_discarded动作被丢弃次数(例如被限流)。

动作吞吐

指标说明
emqx_action_matched路由到该动作的消息数。
emqx_action_received进入动作队列的次数。
emqx_action_success动作调用成功次数。
emqx_action_failed动作调用失败次数。
emqx_action_late_reply响应在超时之后才到达的次数。
emqx_action_retried重试次数。
emqx_action_retried_success重试后成功的次数。
emqx_action_retried_failed重试用尽仍失败的次数。

动作队列与在飞请求

指标说明
emqx_action_inflight正在处理的请求数。
emqx_action_queuing队列中(等待派发)的请求数。

动作丢弃

任一序列出现非零速率,说明下游系统不健康或动作配置有误。

指标说明
emqx_action_dropped动作层丢弃总数。
emqx_action_dropped_queue_full触发队列上限。
emqx_action_dropped_resource_stopped目标资源已停止。
emqx_action_dropped_resource_not_found目标资源缺失。
emqx_action_dropped_expired派发前消息已过期。
emqx_action_dropped_other其他原因。

最小化的”Broker 异常“面板

如果 Grafana 仪表盘只能展示少量曲线,优先选择以下这几条。大多数生产问题发生后几秒内,其中至少一条会出现明显波动:

  • rate(emqx_messages_dropped[1m]):不为零说明 broker 在拒绝或丢弃工作。
  • rate(emqx_action_dropped[1m]):数据集成层在丢弃工作。
  • emqx_cluster_nodes_stopped:大于零说明有节点掉线。
  • rate(emqx_overload_protection_new_conn[1m]):broker 正在主动拒绝新连接。
  • rate(emqx_authentication_failure[1m]):速率突增通常意味着后端异常或受到攻击。
  • emqx_vm_run_queue:持续大于零说明 CPU 饱和。
  • emqx_vm_process_messages_in_queues:数值偏大说明进程邮箱出现积压。
  • emqx_mria_lag:持续超过几秒说明复制开始落后。
  • emqx_license_expiry_at - time()(企业版):License 到期倒计时。