nats leaf 节点模式与mqtt 连接状态的监控

eaf 节点可以与集群直接通信,在iot 场景,一般客户端连接的都是leaf 节点,此时如果我们希望云端进行状态监控就有点不太一样了,以下是一些玩法说明

监控玩法

  • 具体使用什么账户以及如何监控和部署玩法有关系,同时leaf 节点的sys 与cluster 的sys 实际上并不是一个东西,能监控获取到的数据也是不一样的
  • 机制上可以通过will 以及$SYS.ACCOUNT 获取信息
  • 如果希望cluster 获取到所有leaf client 的状态情况就需要将leaf 节点的sys account 开启,同时对于leaf sys account 需要导出$SYS subject , 同时还要导入到与cluster 连接的账户,可能是nkeys的,也可能使用户密码模式
  • 此时leaf 暴露的只会是自己leaf 节点的系统监控消息,然后对于cluster 的订阅会收到来自leaf node得,如果有多个leaf 节点都export 了,然后连接也使用了同一个用户,那么cluster 就会收到多个leaf 节点的消息,这个机制上算是安全的,但是注意如果是supercluster 此时实际上如果多集群包含了一样的账户体系也是可以收到消息的, 算是正常特性,尤其是存在一样的账户体系
  • 通过通过export 以及import 那么账户就可以不是sys了,比如leaf sys 导出$SYS 然后其他账户import 就可以实现跨集群的监控,尤其是希望跨云跨集群的监控

一个参考玩法

核心是leaf 节点的account import export 配置

accounts {
    SYS: {
        users: [{user: ddddddd, password: ddddddd}]
        exports: [
            {stream: "$SYS.>"}
         ]
    },
    A: {
        users: [
            {user: data_a, password: pass},
            {user: data_a3, password: pass}
            ],
        jetstream: enabled
    },
   B: {
       users: [
            {user: ddddddd, password: dddddddd}
            ],
        jetstream: enabled,
        imports: [
            {stream: {account: SYS,subject: "$SYS.>"}}
        ]

    }
}
system_account: SYS

说明

以上是一个通过leaf 节点模式以及对于mqtt 监控的说明,方法并不难,但是如果使用好了价值还是比较大,以上整理的一些玩法是通过实践整理的,可能会有不对的地方,请谨慎测试

参考资料

https://docs.nats.io/running-a-nats-service/configuration/mqtt/mqtt_config

https://docs.nats.io/running-a-nats-service/configuration/securing_nats/accounts

posted on 2025-11-30 08:00  荣锋亮  阅读(0)  评论(0)    收藏  举报

导航