公众号
关注微信公众号
移动端
创头条企服版APP

EMQX简化物联网应用开发: 易操作、可观测、可扩展

443

引言:更加轻松地使用EMQX

最新发布的大规模分布式物联网MQTT消息服务器EMQX 5.0水平扩展性消息传输稳定性安全性等方面实现了突破性的提升,为用户物联网关键业务提供了保障。在此基础上,EMQX 5.0提供了更多便利的功能和设计以帮助用户更加轻松地使用、管理、扩展EMQX。

本文将从可操作性、可观测性、扩展性三个方面,与大家分享EMQX 5.0在运维监测、问题排查以及功能扩展中的功能优化,共同探索如何更快地利用这些优化搭建运维监控体系,为物联网业务带来更多助力。

简洁易读的HOCON格式配置文件

4.x配置文件使用类似properties的键值格式,对类似数组的配置项缺乏表达能力,为了让配置项层级更加清晰,5.0配置采用标准的HOCON格式。

另一方面,为灵活应对不同场景下用户对功能参数的要求,EMQX提供了非常丰富的配置项,但大部分配置使用默认值即可。在EMQX 4.x中,单个配置文件包含了所有配置项以及每个配置项的注释,对于新手用户来说,快速找到并修改常用配置具有一定难度。

针对此问题,EMQX 5.0精简了默认配置文件emqx.conf:只保留最常修改的配置,缩减配置文件在100行以内。

热配置更新

根据是否可在运行时修改,EMQX 5.0的配置可以分成可热更新/不可热更新两种配置。比如node{}节点类相关的参数是Erlang虚拟机的启动参数,属于不可热更新配置修改后必须重启节点才生效。

可热更新配置都可以通过HTTPAPI修改成功后立即生效,同时保证集群间配置同步更新成功。基本流程如下:

图1.png通过HTTPAPI更新的配置会持久化到配置文件中,以确保EMQX重启后配置不丢失。

可观测性

强大的日志功能

日志为系统排错、优化性能提供可靠信息来源。EMQX在日志数据过载或日志写入过慢时,默认启动过载保护机制,最大限度保证正常业务不被日志影响。EMQX支持符合RFC5424标准的日志分级机制。

更友好的日志格式

EMQX 5.0引入了结构化日志记录,现在EMQX发出的大多数日志都有一个msg字段,该字段的文本是一个下划线分隔的单词,更加阅读友好,同时也有助于日志索引工具对日志进行索引。

同时EMQX 5.0还支持JSON格式日志输出,相比于4.x的字符串(TEXT)日志,JSON结构化格式拥有更丰富的上下文及元数据信息,既让人更容易理解,也更方便使用程序解析,可以轻松与各类日志收集和分析系统如Elastic Stack(ELK/EFK)集成。

键值对方便提取特定的值、过滤和搜索整个数据集。如果增加新的键值对,解析日志程序也可以直接忽略那些它不关心的键,而不是无法解析。

二级标题:Trace排错利器

通过开启DEBUG级别日志能够有效地排查各类问题,但这会引起大量日志落地进而影响EMQX整体性能,尤其是在有大量连接与消息收发的生产环境中,该手段几乎是不可实施的。

针对这种问题,EMQX 5.0新增了在线Trace排错功能,允许用户指定客户端ID、主题或IP实时过滤输出DEBUG级别日志。Trace基于Erlang内置强大的Logger Filter功能,对整体的消息吞吐影响可以忽略不计:

  • EMQX使用独立的File Handlers进程来持久化Trace的磁盘日志。

  • 每个客户端连接会在EMQX内部生成一个独立进程来处理它的消息。

  • 当收到客户端消息时,这个独立进程会根据定制的Trace Filter判断是否符合规则(比如:是否为指定的ClientID),如果不符合,则执行原来的传输逻辑。反之,则在本进程序列化消息为二进制数据,再异步发消息给File Handler。

  • File Handlers负责把二进制数持久化至Trace文件中。

在此机制下,所有的过滤动作都前置在对接客户端的独立进程,过滤掉了大部分不符合规则的日志,保证了File Handler不被大量消息累积,因此能够在生产环境中安全的使用。

Trace几乎适用于所有疑难杂症,如消息或数据异常丢弃、客户端异常断线、订阅不生效等。针对特定时间段发生的异常,Trace允许用户设置任务启动/停止时间进行自动化收集,极大的方便用户使用。

同时,Trace与Dashboard深度适配,用户可以在Dashboard中问题分析→日志追踪管理集群中的Trace任务,并实时查看每个节点上收集到的日志内容。Trace极大改善用户自行排查、诊断客户端异常行为时的体验。

完善的度量指标以及Prometheus集成

日志和追踪只能反映EMQX运行过程中是否有异常,为了更方便监控运行时压力指标,EMQX提供了丰富的度量指标以及指标监控集成,方便用户以及运维人员进行业务的监控和预警。

在EMQX 5.0版本中,用户可以通过Dashboard查看客户端实时连接情况以及消息流入流出速度,通过节点拓扑一目了然洞察集群中所有节点状态。Dashboard上还提供多个纬度至多7天的历史指标并通过在线图表展示,用户可以直观的监控业务增长趋势,避免错过任何业务波动。

同时EMQX支持用户将指标集成至自己熟悉的监控与告警技术栈,通过配置文件或Dashboard上轻点鼠标即可在集成Prometheus、Datadog等系统。

图3.png

EMQX提供了Grafana的Dashboard的模板文件。这些模板包含了所有EMQX监控数据的展示。用户可直接导入到Grafana中,即可展示EMQX的运行状态。 

图4.png

慢订阅

正常情况下EMQX内部消息传输耗时都很低(毫秒级以下),大部分时间消耗都集中在网络传输上,针对客户端偶尔出现订阅QoS1/QoS2时延高。EMQX提供慢订阅统计功能,方便追踪QoS 1和QoS 2消息到达EMQX后,完成消息传输全流程的时间消耗,然后根据配置中的选项,计算消息的传输时延,之后按照时延高低对订阅者、主题进行统计排名。

图5.png EMQX消息流程示意图

影响慢订阅的因素

  1. 发布者到EMQX网络较慢(暂不能探测,功能规划中)。

  2.  Hooks执行慢,如ACL检查、ExHook、规则引擎等阻塞消息发布流程。

  3.  队列中消息堆积太多(PUBLISH与SUBSCRIBE共用同一连接,大量PUBLISH消息处理不及时/堆积也可能导致SUBSCRIBE变慢)导致发出时间超时过慢。

  4. 订阅者接收速度过慢。

消息时效性是物联网业务重要保障,大量慢订阅的出现可能是某个功能出现问题的前兆。

启用慢订阅后可以及时发现生产环境中消息堵塞等异常情况,提高用户对此类情况的感知能力,方便用户及时调整相关服务。 

图6.png

主题监控

EMQX支持统计指定主题(无通配符)下的消息收发数量、速率等指标。

图7.png

以上图为例,从监控指标中可以看到消息流出速率远小于消息流入速率。多次重置指标还是同样的结果,可以推测出订阅端消费能力不足。

Dashboard告警

EMQX对于操作系统(OS)和Erlang虚拟机(VM)的基本状态及资源状态内置了监控告警。EMQX允许用户对告警功能进行一定程度的调整以适应实际需要。

可以Dashboard上查看到当前/历史告警:

图8.png EMQX计划在未来版本中提供告警集成Webhook功能,允许用户将告警事件发送到对应的告警/通知服务,如Slack、钉钉等,用户亦可在Web服务中扩展实现短信或邮件告警。

扩展性

新的插件机制

EMQX提供了插件扩展机制,4.x版本中用户使用插件时需要将插件与EMQX源码一同编译以解决插件与EMQX的代码依赖问题,一定程度上限制了插件的分发与使用。

EMQX 5.0经过改进,允许通过插件包的的形式编译、分发、安装插件,当用户需要扩展功能时,可以下载独立的插件安装包,在Web界面完成上传即可进行安装,整个过程甚至不需要重启EMQX集群。

同时,一个规范的插件将会随身附带使用说明、插件主页地址等信息,普通用户可以依照说明快速将插件用起来,也为插件开发者提供了与用户沟通的渠道。

ExHook/gRPC用于微服务集成

ExHook(多语言扩展钩子)基于gRPC框架,允许用户使用其他编程语言(如Python、Java、Node.js等)直接向EMQX系统挂载钩子,以接收并处理EMQX系统的钩子事件,达到扩展和定制EMQX的目的。

图9.png

ExHook基于gPRC通信,理论上支持任意语言平台和微服务,通过ExHook可以实现客户端认证、权限检查、数据存储与改写消息流程等业务的集成。

在EMQX 5.0中我们允许创建多个ExHook实例,并为每个实例提供了详细的使用情况统计信息:

图10.png

同时还可以查看每个Exhook实例注册的钩子以及钩子参数,能够更好地感知Exhook扩展负载情况。

结语

作为自发布以来最重要的里程碑版本之一,EMQX 5.0为用户带来了足以保障各类数据需求的高性能,以及从实际应用出发、可快速上手的各类实用功能。如前文提到,可操作性与可观测性的提升将使EMQX集群的运维工作变得更加轻松与高效,扩展性的增强则为用户定制更加符合自身需求的EMQX提供了便利。

声明:该文章版权归原作者所有,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系。
您阅读这篇文章花了0
转发这篇文章只需要1秒钟
喜欢这篇 0
评论一下 0
相关文章
评论
试试以这些内容开始评论吧
登录后发表评论
阿里云创新中心
×
#热门搜索#
精选双创服务
历史搜索 清空

Tel:18514777506

关注微信公众号

创头条企服版APP