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
浙公网安备 33010602011771号