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

本文涉及的产品
日志服务 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

使用 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}

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

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"}

可见上下线事件消息中的客户端 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

配置文件简化

在 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

此修改不影响 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

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

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
1月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
279 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
4月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
277 1
|
1月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
175 1
日志收集和Spring 微服务监控的最佳实践
|
1月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
62 4
|
1月前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
144 2
|
6月前
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
395 89
|
3月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
6月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
478 52
|
7月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
337 7
数据采集监控与告警:错误重试、日志分析与自动化运维