新增桥接连接状态监控、重构日志系统

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 9 月,NanoMQ 0.12.1版本发布带来丰富更新:桥接功能新增上下线事件和连接状态监控能力;原有的日志系统重构升级;配置文件简化。

9 月,NanoMQ 继续保持稳步更新,最新的 0.12.1 版本已于近日正式发布。此版本依旧带来了丰富的更新:桥接功能中增加了上下线事件和连接状态监控能力;重构升级了原有的日志系统;配置文件得到了简化,将多个配置文件合并整理为统一的单一文件。

桥接连接状态事件消息

IoT 应用中,弱网状态下时常出现网络不稳定的情况,需要一个可靠的途径来侦测当前设备的联网状态以及与云端的连通性。为此,NanoMQ 提供了利用桥接连接来探测网络连接状态的能力。当用户在边缘侧使用 NanoMQ 桥接到云端时,NanoMQ 会创建一个 MQTT 连接到指定的云端 Broker,基于 MQTT 的长连接特性,本地网络里的设备可以利用此连接来判断网络状态。
网络侦测:桥接连接状态消息

如上图所示,当本地网络中断或其他故障导致桥接连接断开时,NanoMQ 会检测到桥接连接断开的情况,并将其转化为一个客户端上下线事件消息发布到系统主题中。网络恢复后桥接连接自动重连,也会发布一个上线事件消息到系统主题。本地的客户端和其他服务可以根据收到的此消息进行对应的应急处理,还可以配置多个桥接目标来作为备选服务避免因为云端服务中断导致的误判。

如何获取桥接上下线事件消息

目前 NanoMQ 的桥接状态事件支持所有的桥接方式,包括 MQTT 3.1.1/5.0 和 MQTT over QUIC。 上下线事件消息的系统主题分别为 $SYS/brokers/disconnected$SYS/brokers/connected。事件消息同样也支持作为一个标准 Publish 消息被以 WebHook 的方式获取。这里以一个 MQTT over QUIC 桥接配置为例,示范如何获取桥接连接的上下线消息:

若桥接配置为(只摘录部分相关):

bridge.mqtt.emqx.clientid=quic_client
bridge.mqtt.emqx.keepalive=5
bridge.mqtt.emqx.quic_keepalive=120
bridge.mqtt.emqx.clean_start=false
bridge.mqtt.emqx.username=quic_bridge
bridge.mqtt.emqx.password=passwd
AI 代码解读

使用 NanoMQ 命令行工具订阅对应主题,那么当本地网络中断时,桥接断开就会触发:

nanomq_cli sub --url mqtt-tcp://localhost:1883 -t '$SYS/brokers/connected'
connect_cb: mqtt-tcp://localhost:1883 connect result: 0 
$SYS/brokers/connected: {"username":"quic_bridge", "ts":1664277443551,"proto_name":"MQTT","keepalive":5,"return_code":"0","proto_ver":4,"client_id":"quic_client", "clean_start":0}
AI 代码解读

那么当本地网络恢复时,桥接重连成功就会触发:

nanomq_cli sub --url mqtt-tcp://localhost:1883 -t '$SYS/brokers/disconnected'
connect_cb: mqtt-tcp://localhost:1883 connect result: 0 
$SYS/brokers/disconnected: {"username":"quic_bridge","ts":1664277394014,"reason_code":"8b","client_id":"quic_client"}
AI 代码解读

可见上下线事件消息中的客户端 ID 和用户名/密码都与桥接配置中的一致,可以此来区分本地客户端和桥接客户端。目前桥接连接状态与普通 MQTT 客户端是共享同一个系统主题,NanoMQ 也考虑为桥接网络状态单独设立一个系统主题,以及作为云边消息总线加入标准的网络健康监控功能。欢迎广大用户提交相关 Issue 和功能申请。

新增 QUIC 传输层的 Keep Alive 参数配置

QUIC 内置了一个连接保持机制,为了让用户能够更细颗粒度的控制 MQTT 和 QUIC 的超时时间,NanoMQ 的桥接功能把两者的超时设置都暴露为可设置状态,后续还会开放更多的 QUIC 传输层参数供用户调优。

## Ping: interval of a downward bridging connection via QUIC.
bridge.mqtt.emqx.quic_keepalive=120
AI 代码解读

配置文件简化

在 0.12 版本之前,NanoMQ 每个模块都有一个独立的配置文件,需要单独打开每个文件进行修改配置,启动较为繁琐。从0.12 版本开始,我们将正式统一合并所有的配置项到 nanomq.conf, 并且为每个模块单独增加了分组。

需要注意的是,之前的命令行参数中指定桥接配置文件和用户名密码文件路径的功能被废弃。

  --bridge <path>            The path of a specified bridge configuration file 
  --auth <path>              The path of a specified authorize configuration file
AI 代码解读

此修改不影响 ZeroMQ 网关的配置文件(nanomq_gatewaty.conf 属于 nanomq_cli)和容器部署情况下通过环境变量指定配置文件的方式。

日志系统重构

NanoMQ 的旧有日志系统支持命令行、文件和 Syslog 三种模式,但是不能通过配置进行开关,不支持分级输出,而且需要在编译阶段通过修改 CMake 参数来启用,调试和运维分析有一定困难。在 0.12 版本我们重构了整个日志系统,保持对原有三种输出目标和 Syslog 标准兼容外,新增了 trace | debug | info | warn | error | fatal 5 种日志等级,以及指定日志文件路径和日志文件滚动更新等功能。

日志配置示例:

## ------------------ Logging Config ------------------ ##
## - file: 输出日志到文件
## - console: 输出日志到命令行
## - syslog: 输出日志到 syslog系统
## Value: file | console | syslog 支持并列配置
log.to=file,console,syslog

## Value: trace | debug | info | warn | error | fatal
## 设置日志等级
##
## Default: warn
log.level=warn

## 若配置了输出日志到文件,则在此指定文件路径
log.dir=/tmp

## 若配置了输出日志到文件,则在此指定文件名
log.file=nanomq.log

## 单个日志文件的最大大小,若超过则会滚动更新
## 支持单位参数: KB | MB | GB
log.rotation.size=10MB

## 最大保存的滚动更新的日志文件个数
log.rotation.count=5
AI 代码解读

NanoSDK 增加更多 API 封装

此前 NanoSDK 的 API 多为 NNG 的风格,需要用户自己组装 MQTT 消息并发送来完成订阅和接触订阅的操作。从 NanoSDK 0.7.5 开始,NanoSDK 里新增了以下更方便、封装程度更高的 MQTT API:
表格1.png

具体使用方式请参阅 NanoSDK Doc

即将到来

规则引擎的消息重发布功能和规则热更新将在下一个版本中正式发布。同时会为 NanoMQ 增加 Reload 命令来进行配置文件热更新,为 MQTT over QUIC 桥接功能增加多次重连失败可以自动切换为标准 TCP 的功能(Fallback to TCP),来保证在不支持 QUIC 的网络下保持桥接连接功能正常。

版权声明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/nanomq-newsletter-202209

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
EMQ
+关注
目录
打赏
0
0
0
0
52
分享
相关文章
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
166 38
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
数据采集监控与告警:错误重试、日志分析与自动化运维
|
19天前
|
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
23 3
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
42 10
智能运维,由你定义:SAE自定义日志与监控解决方案
SAE(Serverless应用引擎)是阿里云推出的全托管PaaS平台,致力于简化微服务应用开发与管理。为满足用户对可观测性和运维能力的更高需求,SAE引入Sidecar容器技术,实现日志采集、监控指标收集等功能扩展,且无需修改主应用代码。通过共享资源模式和独立资源模式,SAE平衡了资源灵活性与隔离性。同时,提供全链路运维能力,确保应用稳定性。未来,SAE将持续优化,支持更多场景,助力用户高效用云。
121 1
除了实时性能监控,Hyper-V还支持日志记录和警报功能你知道吗?
Hyper-V不仅支持实时性能监控,还具备强大的日志记录和警报功能。通过事件查看器可访问详细的日志文件,涵盖虚拟机管理、配置及Hypervisor事件,帮助故障排查和性能分析。警报功能支持预定义和自定义规则,可通过多种方式通知管理员,确保及时响应问题,保障虚拟化环境的稳定运行。
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
718 69
Grafana Loki,轻量级日志系统
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
158 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等