EMQX 介绍
EMQX 是一款开源、高度可伸缩、高可用的分布式 MQTT 消息服务器,同时也支持 CoAP/LwM2M 等一站式 IoT 协议接入。以下是 EMQX 的一些主要特点和功能:
- 海量连接与高并发:EMQX 能够处理千万级别的并发客户端,支持大规模分布式架构,具有高可用集群架构和弹性伸缩部署。
- 多协议支持:EMQX 完整支持 MQTT V5.0 协议规范,并向下兼容 MQTT V3.1 和 V3.1.1。此外,它还可以扩展支持 MQTT-SN、CoAP、LwM2M、WebSocket、STOMP 或私有 TCP 等多种物联网协议。
- 规则引擎与数据集成:EMQX 内置强大的规则引擎,可以进行数据提取、过滤与转换,并灵活集成 SQL、NoSQL、时序数据库以及 Kafka 等流处理中间件。
- 边缘到云端的部署:EMQX 支持从资源受限的边缘计算设备到私有云、混合云和公共云的部署,包括物理机、VM、容器/K8S 跨平台任意部署。
- 完全开源:EMQX 基于 Apache Version 2.0 开源协议,支持开源免费使用,适用于产品原型设计、物联网创业公司以及大规模的商业部署。
- 安全性:EMQX 提供端到端数据加密(支持国密)、细粒度访问控制,保障数据安全,满足企业合规需求。
- 易运维:EMQX 提供图形化配置、操作与管理,实时监测运行状态,并支持 MQTT 跟踪进行端到端问题分析。
- 云原生支持:EMQX 支持通过 Kubernetes Operator 和 Terraform 在企业内部和公共云中进行部署。
- 产品线:EMQX 提供多种产品,包括 EMQX Broker(开源版)、EMQX Enterprise(企业版)和 EMQX Platform(平台版),以满足不同规模和需求的 IoT 网络和应用。
- 功能列表:EMQX 支持完整的 MQTT V3.1/V3.1.1 及 V5.0 协议规范,QoS0, QoS1, QoS2 消息支持,持久会话与离线消息支持,Retained 消息支持,Last Will 消息支持,TCP/SSL 连接支持,MQTT/WebSocket/SSL 支持,HTTP 消息发布接口支持等。
EMQX 作为物联网应用开发和物联网平台搭建的基础设施软件,主要在边缘和云端实现物联网设备互联与设备上云,提供物联网设备接入、协议处理、消息路由、数据存储、流数据处理等核心能力。
观测云
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
安装 DataKit
DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。
登录观测云控制台,在 集成 -> DataKit 选择对应安装方式,当前采用 Linux 主机部署 DataKit。
采集 EMQX 指标
EMQX 默认暴露指标端口为:18083
,可通过浏览器查看指标相关信息:http://clientIP:18083/api/v5/prometheus/stats
。
由于 EMQX
能够直接暴露 metrics url
,所以可以直接通过 prom
采集器进行采集。进入 DataKit 安装目录 /usr/local/datakit/conf.d
,复制 prom
目录下的配置文件并命名为 emqx.conf
。 示例如下:
cp prom.conf.sample emqx.conf
调整内容如下:
[[inputs.prom]]## Exporter URLs.urls = ["http://clientIP:18083/api/v5/prometheus/stats"]source = "emqx"keep_exist_metric_name = true## Customize tags.[inputs.prom.tags]job = "emqx"
...
调整文档以上参数。
重启 DataKit
systemctl restart datakit
关键指标
统计(Statistics)
Metrics | 描述 |
---|---|
emqx_connections_count | 当前连接数量 |
emqx_topics_count | 当前主题数量 |
emqx_suboptions_count | 即 subscriptions_count |
emqx_subscribers_count | 当前订阅者数量 |
emqx_cluster_nodes_running | 集群 running 状态的 node |
emqx_cluster_nodes_stopped | 集群 stop 状态的 node |
消息 (PUBLISH 报文)
Metrics | 描述 |
---|---|
emqx_messages_received | 接收来自客户端的消息数量,等于 messages.qos0.received,messages.qos1.received 与 messages.qos2.received 之和 |
emqx_messages_sent | 发送给客户端的消息数量,等于 messages.qos0.sent,messages.qos1.sent 与 messages.qos2.sent 之和 |
emqx_messages_dropped | EMQX 内部转发到订阅进程前丢弃的消息总数 |
字节 (Bytes)
Metrics | 描述 |
---|---|
emqx_bytes_received | 已接收字节数 |
emqx_bytes_sent | 已发送字节数 |
报文 (Packets)
Metrics | 描述 |
---|---|
emqx_packets_connect | 接收的 CONNECT 报文数量 |
emqx_packets_connack_sent | 发送的 CONNACK 报文数量 |
emqx_packets_connack_error | 发送的原因码不为 0x00 的 CONNACK 报文数量,此指标的值大于等于 packets_connack_auth_error 的值 |
emqx_packets_connack_auth_error | 发送的原因码为 0x86 和 0x87 的 CONNACK 报文数量 |
emqx_packets_disconnect_sent | 发送的 DISCONNECT 报文数量 |
emqx_packets_disconnect_received | 接收的 DISCONNECT 报文数量 |
emqx_packets_publish_received | 接收的 PUBLISH 报文数量 |
emqx_packets_publish_sent | 发送的 PUBLISH 报文数量 |
emqx_packets_publish_error | 接收的无法被发布的 PUBLISH 报文数量 |
emqx_packets_publish_dropped | 超出接收限制而被丢弃的 PUBLISH 报文数量 |
emqx_packets_subscribe_received | 接收的 SUBSCRIBE 报文数量 |
emqx_packets_subscribe_error | 接收的订阅失败的 SUBSCRIBE 报文数量 |
emqx_packets_suback_sent | 发送的 SUBACK 报文数量 |
emqx_packets_unsubscribe_received | 接收的 UNSUBSCRIBE 报文数量 |
emqx_packets_unsubscribe_error | 接收的取消订阅失败的 UNSUBSCRIBE 报文数量 |
视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “EMQX”, 选择 “EMQX 监控视图”,点击 “确定” 即可添加视图。
监控器
EMQX 节点消息丢弃速率过高
如果消息丢弃数量突然增加,可能表明系统过载,设置告警。
EMQX 报文请求存在错误
总结
通过将 EMQX 指标数据接入到观测云,可以让用户更好地理解和控制 EMQX 集群的行为,从而提高系统的可靠性和效率。