
Prometheus 监控 EMQX 全栈实战从 MQTT 消息吞吐到集群状态的物联网可观测性EMQX 是物联网消息平台的核心引擎承载着海量 MQTT 消息的发布与订阅。一旦它的消息流入速率骤降、客户端连接数异常波动、集群节点脑裂、规则引擎处理延迟或系统资源耗尽整个 IoT 业务就会陷入瘫痪。EMQX 从 4.0 版本开始原生内置 Prometheus 指标端点只需简单配置即可暴露 Broker 运行状态、客户端、会话、主题、消息流入流出、规则引擎等全方位指标。本文将带你从启用插件、配置抓取到解读核心指标、构建 Grafana 大屏与告警落地为 EMQX 构建坚不可摧的物联网消息可观测防线。1. 为什么选择 EMQX 原生 Prometheus 插件零额外组件EMQX 内部集成emqx_prometheus插件直接暴露/metrics端点。指标丰富涵盖客户端连接、消息吞吐、会话、订阅、主题、规则引擎、集群状态、系统资源等。高性能内部基于 Erlang 统计对 Broker 性能影响微乎其微。灵活配置可指定监听端口、路径支持 Pushgateway 模式仅当需要推时。2. 启用 EMQX Prometheus 端点2.1 启用插件在 EMQX Dashboard 中默认端口 18083左侧菜单插件中找到emqx_prometheus点击启用。或通过 CLIemqx_ctl plugins load emqx_prometheus默认插件会监听在18083端口的管理 API 下路径为/api/v4/emqx_prometheusEMQX 4.x或/api/v5/prometheusEMQX 5.x也可以配置独立的端口。2.2 配置独立 Prometheus 端口推荐编辑etc/plugins/emqx_prometheus.confprometheus.listener 0.0.0.0:18085 prometheus.path /metrics重启插件emqx_ctl plugins reload emqx_prometheus验证端点curlhttp://localhost:18085/metrics你将看到以emqx_开头的指标如emqx_client_connected、emqx_messages_received_total等。2.3 安全与网络生产环境中Prometheus 端口应仅对内网可访问使用防火墙或安全组限制。若启用 EMQX 认证/metrics端点默认无需认证建议通过反向代理添加 Basic Auth。3. 配置 Prometheus 抓取scrape_configs:-job_name:emqxscrape_interval:30smetrics_path:/metricsstatic_configs:-targets:-emqx-node1:18085-emqx-node2:18085-emqx-node3:18085labels:cluster:iot-prodcomponent:emqx如果 EMQX 集群有多个节点每个节点独立暴露指标分别抓取。4. 核心监控指标与 PromQL4.1 客户端与会话指标含义emqx_client_connected当前连接的客户端总数emqx_client_disconnected_total累计断开次数emqx_client_auth_total认证尝试总数按result成功/失败emqx_session_created_total会话创建总数emqx_session_destroyed_total会话销毁总数PromQL 示例当前在线设备数emqx_client_connected认证失败速率rate(emqx_client_auth_total{resultfailure}[5m])断连风暴rate(emqx_client_disconnected_total[5m])4.2 消息吞吐指标含义emqx_messages_received_total接收的 MQTT 消息总数emqx_messages_sent_total发送的消息总数emqx_messages_dropped_total丢弃的消息总数因队列满、权限等emqx_messages_qos_total按 QoS 分级的消息计数emqx_bytes_received_total/emqx_bytes_sent_total接收/发送字节总数PromQL 示例消息流入速率 (msg/s)rate(emqx_messages_received_total[1m])消息丢弃速率rate(emqx_messages_dropped_total[5m])大于 0 需告警平均消息大小rate(emqx_bytes_received_total[5m]) / rate(emqx_messages_received_total[5m])4.3 规则引擎与数据桥接指标含义emqx_rule_engine_execution_total规则执行次数emqx_rule_engine_execution_duration_seconds(Histogram)规则执行耗时emqx_bridge_dropped_total桥接如 Kafka, DB丢弃的消息数emqx_bridge_success_total/emqx_bridge_failed_total桥接成功/失败计数PromQL 示例规则执行失败率rate(emqx_rule_engine_execution_total{statusfailure}[5m]) / rate(emqx_rule_engine_execution_total[5m])桥接失败速率rate(emqx_bridge_failed_total[5m]) 04.4 集群与分布指标含义emqx_cluster_nodes_running运行中的节点数emqx_cluster_nodes_stopped已停止的节点数emqx_ekka_mnesia_activeMnesia 数据库活跃状态PromQL 示例集群节点不足emqx_cluster_nodes_running 3假设3节点Mnesia 异常emqx_ekka_mnesia_active ! 14.5 系统资源Erlang VM指标含义erlang_vm_memory_processes_used_bytesErlang 进程内存使用erlang_vm_memory_atom_used_bytesAtom 表使用量erlang_vm_memory_system_bytes系统内存总量erlang_vm_io_input_bytes_total/erlang_vm_io_output_bytes_totalVM IO 字节数PromQL 示例Erlang 内存使用率erlang_vm_memory_processes_used_bytes / erlang_vm_memory_system_bytes * 100Atom 表接近满erlang_vm_memory_atom_used_bytes erlang_vm_memory_atom_limit_bytes * 0.85. Grafana 仪表盘推荐EMQX Metrics DashboardDashboard ID13587社区精品展示客户端、消息、规则引擎、集群、系统资源等全方位视图。EMQX EnterpriseID14646若使用企业版有更丰富桥接指标。自定义 IoT 大屏可添加设备连接数趋势、消息吞吐总量、规则引擎成功率等面板。导入后选择数据源用变量instance或cluster区分不同 EMQX 集群。6. 告警规则实战groups:-name:emqx_alertsrules:-alert:EMQXNodeDownexpr:up{jobemqx} 0for:1mlabels:severity:criticalannotations:summary:EMQX 节点 {{ $labels.instance }} 不可达-alert:EMQXClientDisconnectStormexpr:rate(emqx_client_disconnected_total[5m])100for:5mlabels:severity:criticalannotations:summary:EMQX 客户端断连速率 100/s可能存在风暴-alert:EMQXAuthFailureHighexpr:rate(emqx_client_auth_total{resultfailure}[5m])10for:5mlabels:severity:warningannotations:summary:EMQX 认证失败速率 10/s检查凭证-alert:EMQXMessageDroppedexpr:rate(emqx_messages_dropped_total[5m])0labels:severity:criticalannotations:summary:EMQX 出现消息丢弃检查队列和桥接-alert:EMQXBridgeFailureexpr:rate(emqx_bridge_failed_total[5m])0labels:severity:criticalannotations:summary:EMQX 数据桥接失败消息可能无法到达后端-alert:EMQXClusterUnstableexpr:emqx_cluster_nodes_running 3for:2mlabels:severity:criticalannotations:summary:EMQX 集群节点数低于预期可能脑裂-alert:EMQXAtomTableHighexpr:erlang_vm_memory_atom_used_bytes / erlang_vm_memory_atom_limit_bytes0.8for:10mlabels:severity:warningannotations:summary:Erlang Atom 表使用率超过 80%可能接近崩溃可根据实际设备量和消息速率调整阈值。7. 进阶多集群、安全与性能调优7.1 多集群监控多个 EMQX 集群如不同的 IoT 项目分别暴露指标Prometheus 使用cluster标签区分。Grafana 仪表盘通过变量切换集群。7.2 安全加固Prometheus 端口18085仅限内网访问通过防火墙或安全组。如果必须公网暴露可在前端使用 Nginx 反向代理添加 HTTPS 和 Basic Auth。EMQX 的 API 端口18083和 Dashboard 端口同样需要保护避免未授权访问。7.3 指标基数管理EMQX 会为每个客户端、每个主题生成大量指标注意emqx_client_connected等标签。若客户端数量极大百万级建议在 Prometheus 侧使用metric_relabel_configs丢弃不需要的标签如clientid防止时序爆炸。7.4 结合物联网前端监控EMQX 的指标反映了连接与消息层结合设备端监控如 Modbus Exporter、自定义传感器指标可形成从设备到云端的全链路可观测。8. 总结通过 EMQX 原生 Prometheus 插件物联网消息中枢的运行状态完全透明——设备连接波动、消息流入率、规则引擎效率、集群稳定性——所有关键信号实时汇入 Prometheus在 Grafana 中可视化并通过 Alertmanager 发出告警。将 EMQX 纳入全栈可观测性体系意味着 IoT 业务的“神经系统”也拥有了自我监控能力为大规模设备接入与实时通信保驾护航。部署它让每一个 MQTT 消息的脉搏都清晰可察。